主页 文档 下载 莱特 沙龙 English

RTESM文档
RTEMS精彩应用
RTEMS版权说明
其他RTOS
ARM/DSP专区
AVR/FPGA/PCB
嵌入式文件系统
ARM AVR仿真器DIY
莱特电子工作室
联系我们
 


系统剪裁与配置

作者 Ray

RTEMS版权所有,转载请注明来源www.rtems.net,作者Ray

26.1: 介绍

RTEMS中,需要对应用进行手工或者自动配置。需要配置的信息包括每个时钟tick的实际时间值,RTEMS上能创建的对象数目,应用初始化任务,和应用的设备驱动。这些信息存放在RTEMS中的数据结构中。本章介绍了手工配置的要点,也介绍了如何进行简单的自动配置。

 

26.2: 系统的自动配置

RTEMS提供 confdefs.h C语言头文件,该头文件是自动配置中使用的重要文件。该文件中包含了大量的宏定义,这些宏用来创建系统的配置表。confdefs.h中,程序员可以定义需要设定的配置参数,这样就可以不用手动设置每一个配置表了。下面的例子中,配置了一个使用消息队列并且时间片为50微秒的系统

 

#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER

#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER

 

#define CONFIGURE_MICROSECONDS_PER_TICK 1000 /* 1 millisecond */

#define CONFIGURE_TICKS_PER_TIMESLICE 50 /* 50 milliseconds */

 

#define CONFIGURE_MAXIMUM_TASKS 4

#define CONFIGURE_RTEMS_INIT_TASKS_TABLE

 

这个系统将会使用任务 Init 为启动任务。同时配置成有一个控制台设备驱动 ( 为标准的输入/输出) 和一个时钟设备驱动的系统。

为了使confdefs.h中的配置生效,一定要定义CONFIGURE_INIT常量,该常量在包含confdefs.h的应用程序中定义。

程序员应该注意系统配置的默认值一般都是尽可能的小。缺省情况下,不会为应用分配资源。confdefs.h 文件确保至少有一个用户任务(线程),并且至少有一个初始化任务配置表。

confdefs.h 文件中将估算RTEMS 运行所需的内存。如果提供的信息不精确,那么这个估算通常不是那么精确。RTEMS通常会因为下面的原因为系统分配过多的内存:

 

•  所有的任务/ 线程被假定是浮点任务。

 

相反地,如果出现下面的情况,则可能出现内存不够:

•  任务/ 线程堆栈空间不够

•  没有考虑到消息使用的内存

•  设备驱动的需求没有考虑进去

•  网络协议栈的内存需求没有考虑

•  附加函数库的内存需求没有考虑进去

当然,如果程序员在confdefs.h中提供的信息准确,那么confdefs.h的估算会非常精确。 非常正确。下列将介绍配置文件中的常量。

 

26.2.1 : 库支持常量定义

这一节定义了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 是否对堆栈越界进行动态检查,缺省为不检查。

 

26.2.2 : 基本系统信息

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计算出的的堆栈数目,那么就可以增大该值

26.2.3 : 设备驱动表

自动生成设备驱动表格需要的配置参数。当然这些配置选项只适用用标准设备驱动。

CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE:如果定义了自己的非标准设备驱动表,就需要打开次开关,这样会自动产生rtems_driver_address_table设备驱动表

CONFIGURE_MAXIMUM_DRIVERS 驱动的最大数目缺省为10

CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER 是否使用控制台驱动,如果定义,那么该设备驱动负责提供标准的输入和输出使用 "/dev/控制台". 预先设定地 , 该不被定义。

如果应用愿包括控制台设备驱动, CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER 被定义。 该设备驱动("/dev/console")负责提供标准的输入和输出,缺省被屏蔽。

CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER 是否需要时钟驱动,缺省被屏蔽

CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER 是否适用桩驱动,缺省被屏蔽

 

26.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。

26.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 。

 

26.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 。

 

 
嵌入式软硬件设计咨询 • 8位 16位 32位 64位 RISC DSP
主页文章 方案 产品 下载反馈
 
2004 RTEMS.NET 版权所有