写在前面的话:初学Rtems,英语水平也有限,错误在所难免,请各位大牛不吝赐教,完善c_user的翻译。便于大家受益,在此谢过!
23.1引言
对每个应用来说,Rtems需要进行配置。配置信息包含了各种信息,如时钟“滴答”的长度,能创建的Rtems对象的最大个数,应用程序的初始化任务,应用程序中用到的驱动程序。信息被放置在系统初始化时分配给Rtems的数据结构中。本章详述了这些数据结构的类型,以及自动生成这些结构的一种简单机制。
23.2自动生成系统配置信息
Rtemst提供了rtems/confdefs.h这一C头文件,根据设定的各种宏能够产生Rtems应用程序需要的几乎所有的配置表。不是手工一个一个的建立各个表,而是在应用程序中通过给出几个配置参数的值来建立各个表。下面给了一个例子,一个包含消息队列、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的初始化任务开始执行。该应用程序配置成了带控制台驱动(标准输入/输出)和时钟设备驱动。
配置表中的每个配置参数,在给出的宏中都有与之对应的。大部分系统都可以通过rtems/confdefs.h进行简单的配置。
CONFIGURE_INIT常数必须给出,以保证由rtems/confdefs.h将配置参数实例化。这个只能在一个包含的应用程序原代码中定义...
用户必须知道默认值有意将配置集合压缩到最小。默认的,在应用程序中没有配置rtems/confdefs.h时,rtems/confdefs.h文件要确保最少一个任务或线程配置了,最少有一个初始化任务或线程表被配置。rtems/confdefs.h文件估计了Rtems执行空间大概需要的所需分配的内存。这种估计的精确度仅和rtems/confdefs.h给出的信息相关。可能因为各种原因使得估计有偏差。下列原因可能使得rtems/confdefs.h为Rtems预留富余的内存。
(1)所有的任务或线程都被声明为浮点型。
(2)
通常只要给出比足够的信息,rtems/confdefs.h配置的还是很精确的。使用库文件相当容易,不考虑其资源。以下列表中的所有常数部分可以由用户设置。
23.2.1库支持定义
这一部分定义了rtems/confdefs.h支持的文件系统、IO库相关配置参数。
CONFIGURE_MALLOC_STATISTICS--当应用程序希望使能收集例程中C宏的详细统计信息CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK--
CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
23.2.2基本的系统信息
本节定义了rtems/confdefs.h支持的一般的系统配置参数。
CONFIGURE_HAS_OWN_CONFIGURATION_TABLE--只有在应用程序提供了自己的完整的配置表集合时才定义
CONFIGURE_EXECUTIVE_RAM_WORK_AREA--
CONFIGURE_MICROSECONDS_PER_TICK--“滴答”之间的时间长度。默认设置为1000毫秒。
CONFIGURE_TICKS_PER_TIMESLICE--每个任务的“滴答”的一个时间片长度。默认为50。
CONFIGURE_MAXIMUM_PRIORITY--系统中任意一个任务的优先级数量。
CONFIGURE_MINIMUM_STACK_SIZE--应用程序所希望的每个任务或线程的堆栈的最小尺寸,字节数。
CONFIGURE_INTERRUPT_STACK_SIZE--
CONFIGURE_TASK_STACK_ALLOCATOR--可以指向一个用户提供的例程,分配任务的堆栈。这一块的默认值为空(NULL)。指示了任务堆栈将从Rtems空间进行分配。
CONFIGURE_TASK_STACK_DEALLOCATOR--
CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY--表明Rtems是否需要清空Rtems空间,C程序堆作为初始化的一部分。如果设置为真,空间被清空。否则,他不为空。除非由BSP重写。这一块的默认值为FALSE。
CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE--
CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)--
CONFIGURE_MESSAGE_BUFFER_MEMORY--
23.2.3空闲任务配置
本节定义了关于空闲任务相关的rtems/confdefs.h支持的参数配置。
CONFIGURE_IDLE_TASK_BODY--
ONFIGURE_IDLE_TASK_STACK_SIZE--
CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION--
23.2.4设备驱动表
本节定义了与自动产生设备驱动表相关的配置参数。rtems/confdefs.h只识别标准设备驱动。生成的设备驱动表仅仅能用于不带自定义的驱动的简单的应用程序。
CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE--
CONFIGURE_MAXIMUM_DRIVERS--
CONFIGURE_MAXIMUM_DEVICES--
CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER--
CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER--
...
CONFIGURE_BSP_PREREQUISITE_DRIVERS--如果BSP有设备驱动,它需要包含在设备驱动表中。这必须在设备入口地址表中进行定义,要放置在设备驱动表的前面,在其他设备驱动之前进行初始化。默认,该项不予定义。
CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS--
CONFIGURE_APPLICATION_EXTRA_DRIVERS--
23.2.5多处理器配置
23.2.6典型API配置
本节涉及了典型API相关的系统参数配置。
CONFIGURE_MAXIMUM_TASKS --能被激活的典型API任务的最大数目。该处默认为0。
23.2.7 典型API任务初始化表
23.3配置表
Rtems配置表用于应用特定应用需求的应用程序对系统的裁剪。比如,用户可以配置设备驱动的最大数目或是使用何种API。用户定义的配置表地址被作为一个参数传给rtems_initialize_executive函数。Rtems调用的第一个函数。Rtems的C结构定义如下:
work space start--Rtems在RAM中工作空间的地址。该空间包含的项目块为不同对象的控制块(TCBs, QCBs, ...)和任务堆栈。
work space size--
microseconds per tick--
ticks per timeslice--每个时间片含时钟“滴答”的次数。当使用rtems/confdefs.h机制配置为应用程序做配置时,该值对应于CONFIGURE_TICKS_PER_TIMESLICE宏的设置值。
stack allocate hook--堆栈分配挂钩
do zero of workspace--
maximum drivers--
number of device drivers--
number of device drivers--
Device driver table--
number of initial extensions--是一些初始用户扩展。这里的入口地址数必须和用户扩展表中的的数量相同。如果这里的值为0,则User driver address table地址必须为空。当使用rtems/confdefs.h机制配置为应用程序做配置时,该处的值由宏CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS通过rtems/confdefs.h自动设置。当然rtems/confdefs.h的赋值是根据User Extensions Table。
User extension table-- User Extension Table的表地址。
User multiprocessing table--
RTEMS api confguration--
POSIX api confguration--
23.4Rtems API配置表
23.7初始化任务表
23.8驱动地址表
23.9用户扩展表
23.12确定的内存要求
23.13...内存空间