rtems 系统剪裁与配置
1. 总体介绍
RTEMS中,需要对应用进行手工或者自动配置。需要配置的信息包括每个时钟tick的实际时间值,RTEMS上能创建的对象数目,应用初始化任务,和应用的设备驱动。这些信息存放在RTEMS中的数据结构中。本文介绍了手工配置的要点,也介绍了如何进行简单的自动配置。
2.系统的自动配置
2.1 配置的说明
RTEMS提供 confdefs.h C语言头文件,该头文件是自动配置中使用的重要文件。该文件中包含了大量的宏定义,这些宏用来创建系统的配置表。confdefs.h中,程序员可以定义需要设定的配置参数,这样就可以不用手动设置每一个配置表了。为了使confdefs.h中的配置生效,一定要定义CONFIGURE_INIT常量,该常量在包含confdefs.h的应用程序中定义。下列将介绍配置文件confdefs.h中的常量。
2.2 库支持常量定义
这一节定义了confdefs.h中文件系统I/O库相关的常量
CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS: 可以同时打开的文件数目。I/O库中,每打开一个文件就需要为其分配一个互斥变量。CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS的默认值为3,也就是支持标准的输入,输出和错误输出三个文件描述符。
CONFIGURE_TERMIOS_DISABLED:程序中不会使用POSIX的termios 功能,缺省为支持。
CONFIGURE_NUMBER_OF_TERMIOS_PORTS 终端数目,缺省为1。
CONFIGURE_HAS_OWN_MOUNT_TABLE:如果系统使用自己的文件系统安装表,如果支持文件系统,就会定义的 rtems_filesystem_mount_table_t类型的变量rtems_filesystem_mount_table
CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM 使用IMFS为缺省文件系统。这是默认选项,否则使用miniIMFS为基本文件系统。
STACK_CHECKER_ON 是否对堆栈越界进行动态检查,缺省为不检查。
2.3 基本系统信息
confdefs.h中定义的系统参数如下:
CONFIGURE_HAS_OWN_CONFIGURATION_TABLE 系统使用自己定义的配置表CONFIGURE_INTERRUPT_STACK_MEMORY 中断堆栈大小,缺省大小为 RTEMS_MINIMUM_STACK_SIZE
CONFIGURE_EXECUTIVE_RAM_WORK_AREA RTEMS基准地址,缺省为NULL,表示由BSP判断
CONFIGURE_MICROSECONDS_PER_TICK 每个tick实际的微秒数
CONFIGURE_TICKS_PER_TIMESLICE 每个时间片中的tick数目缺省为50.
CONFIGURE_MEMORY_OVERHEAD 为系统追加的内存数目,默认价值是 0
CONFIGURE_EXTRA_TASK_STACKS 为系统追加的堆栈数目,默认价值是 0 ,如果系统使用的堆栈大于confdefs.h计算出的的堆栈数目,那么就可以增大该值
2.4 多处理器配置选项
如果定义了CONFIGURE_MP_APPLICATION,下面的选项就有效:
CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE 用户自己提供多处理器配置表。
CONFIGURE_MP_NODE_NUMBER 多处理器节点数目。
CONFIGURE_MP_MAXIMUM_NODES 最多节点数目。
CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS 全局变量数目,默认是 32 。
CONFIGURE_MP_MAXIMUM_PROXIES 代理最大数目,默认是 32 。
CONFIGURE_MP_MPCI_TABLE_POINTER MPCI配置表的指针。该字段的默认值是 &MPCI_table。
2.5 标准配置
CONFIGURE_MAXIMUM_TASKS 并行任务最大数。默认是0(没有限制)。
CONFIGURE_MAXIMUM_TIMERS 定时器最大数。默认是0(没有限制) 。
CONFIGURE_MAXIMUM_SEMAPHORES 最大信号量数目,默认是 0 。
CONFIGURE_MAXIMUM_MESSAGE_QUEUES 最大消息队列数目,为该字段的默认是 0 。
CONFIGURE_MAXIMUM_PARTITIONS 内存区最大数目。默认是 0 。
CONFIGURE_MAXIMUM_REGIONS 可变内存区最大数目,默认是 0 。
CONFIGURE_MAXIMUM_PORTS 可以同时存在的ports数目,默认是 0 。
CONFIGURE_MAXIMUM_PERIODS 可同时存在单调期数。默认是 0 。
CONFIGURE_MAXIMUM_USER_EXTENSIONS 允许的用户扩展数。默认是 0 。
2.6 标准API初始表
confdefs.h 会自动产生初始化任务表Initialization_tasks,下面是控制表自动创建的参数。
CONFIGURE_RTEMS_INIT_TASKS_TABLE 如果用户愿使用标准RTEMS API初始化任务表。任务一般会通过其他任务进行初始化,所以这个字段缺省为未定义。
CONFIGURE_HAS_OWN_INIT_TASK_TABLE有自定义的初始化表,缺省没有。
CONFIGURE_INIT_TASK_NAME 初始任务名称,缺省值为rtems_build_name 。 ('U' , 'I' , '1','')
CONFIGURE_INIT_TASK_STACK_SIZE 任务栈大小 , 缺省为 RTEMS_MINIMUM_STACK_SIZE 。
CONFIGURE_INIT_TASK_PRIORITY 初始任务的优先级 , 缺省为 1 。
CONFIGURE_INIT_TASK_ATTRIBUTES 缺省的初始化任务属性 , 缺省为 RTEMS_DEFAULT_ATTRIBUTES 。
CONFIGURE_INIT_TASK_ENTRY_POINT 初始任务 , 缺省为 Init 。
CONFIGURE_INIT_TASK_INITIAL_MODES 初始任务执行模式,初始为RTEMS_NO_PREEMPT 。
CONFIGURE_INIT_TASK_ARGUMENTS 初始任务参数,初始值是 0 。