新闻  |   论坛  |   博客  |   在线研讨会
RTEMS存储空间配置
tongxin | 2009-04-12 22:34:03    阅读:1119   发布文章

26.12: 内存需求
%A
%A 由于内存是嵌入式系统的稀缺资源。RTEMS允许暂时不用的管理器释放占用内存资源。这就允许开发者能灵活的剪裁RTEMS以适应小内存系统的需要。因此, RTEMS的内存需求是和应用相关的。为了保证程序运行时有足够的内存,程序员应该有效的估算各个模块的内存使用。系统中下面的API可以被剪裁:
%A
%A     *
%A       信号
%A     *
%A       可变内存区
%A     *
%A       双口内存
%A     *
%A       事件
%A     *
%A       多处理器处理
%A     *
%A       固定内存区
%A     *
%A       定时器
%A     *
%A       信号量
%A     *
%A       消息
%A     *
%A       单调周期
%A
%A RTEMS被设计成可以链接的函数库。由于程序的模块化设计,RTEMS允许链接时不链接未使用的库函数,从而减少目标代码的大小。
%A
%A RTEMS系统必须为应用提供内存空间,虽然RTEMS的数据段必须存放在RAM中,但是代码段可以选择存放在ROM中或者RAM中。此外也必须为系统分配RAM工作空间(workspace),工作空间的大小可以根据对应的处理器文档计算。
%A
%A 下面是i386的内存需求:
%A
%A 数据段 833字节
%A
%A 内核:全 39.592字节
%A
%A 内核:精简:26.660字节(只包括初始化,中断和异常管理)
%A
%A 代码需要的存储空间
%A
%A Component
%A         
%A
%A Included
%A         
%A
%A Not Included
%A         
%A
%A Size
%A
%A Core
%A         
%A
%A 16,948
%A         
%A
%A NA
%A         
%A
%A
%A
%A Initialization
%A         
%A
%A 916
%A         
%A
%A NA
%A         
%A
%A
%A
%A Task
%A         
%A
%A 3,436
%A         
%A
%A NA
%A         
%A
%A
%A
%A Interrupt
%A         
%A
%A 52
%A         
%A
%A NA
%A         
%A
%A
%A
%A Clock
%A         
%A
%A 296
%A         
%A
%A NA
%A         
%A
%A
%A
%A Timer
%A         
%A
%A 1,084
%A         
%A
%A 144
%A         
%A
%A
%A
%A Semaphore
%A         
%A
%A 1,500
%A         
%A
%A 136
%A         
%A
%A
%A
%A Message
%A         
%A
%A 1,596
%A         
%A
%A 224
%A         
%A
%A
%A
%A Event
%A         
%A
%A 1,036
%A         
%A
%A 44
%A         
%A
%A
%A
%A Signal
%A         
%A
%A 396
%A         
%A
%A 44
%A         
%A
%A
%A
%A Partition
%A         
%A
%A 1,052
%A         
%A
%A 104
%A         
%A
%A
%A
%A Region
%A         
%A
%A 1,392
%A         
%A
%A 124
%A         
%A
%A
%A
%A Dual Ported Memory
%A         
%A
%A 664
%A         
%A
%A 104
%A         
%A
%A
%A
%A I/O
%A         
%A
%A 676
%A         
%A
%A 00
%A         
%A
%A
%A
%A Fatal Error
%A         
%A
%A 20
%A         
%A
%A NA
%A         
%A
%A
%A
%A Rate Monotonic
%A         
%A
%A 1,132
%A         
%A
%A 136
%A         
%A
%A
%A
%A Multiprocessing
%A         
%A
%A 6,840
%A         
%A
%A 228
%A         
%A
%A
%A
%A RTEMS的私有数据变量和例程名字由底线 (_) + “ 大写单词 ” +小些单词构成。例如函数 _CORE_message_queue_Initialize() 所以,应用程序中不要定义这样的函数和变量,以免发生命名冲突。
%A
%A
%A 26.13: RTEMS系统工作空间内存需求
%A
%A RTEMS中系统工作空间(workspace)是为系统预留的内存区。应用程序不允许改变系统工作空间的内容。工作空间主要包含RTEMS数据结构。 此外,还包含任务栈和浮点上下文等信息
%A
%A confdefs.h 可以自动计算RTEMS需要的工作空间大小。confdefs将所有的任务都看成浮点任务,为其分配尽可能小的栈空间。此外还计算RTEMS内核自身的内存消耗。下列的定义可以使弥补计算的不足:
%A
%A CONFIGURE_MEMORY_OVERHEAD
%A
%A CONFIGURE_EXTRA_TASK_STACKS
%A
%A RTEMS数据存储的起始地址必须是四字节对其,否则会引起异常。
%A
%A 下面是i386体系的workspace的计算方法。
%A
%A RTEMS RAM Workspace Worksheet
%A
%A Description
%A         
%A
%A Equation
%A         
%A
%A Bytes Required
%A
%A maximum_tasks
%A         
%A
%A * 372 =
%A         
%A
%A
%A
%A maximum_timers
%A         
%A
%A * 68 =
%A         
%A
%A
%A
%A maximum_semaphores
%A         
%A
%A * 124 =
%A         
%A
%A
%A
%A maximum_message_queues
%A         
%A
%A * 148 =
%A         
%A
%A
%A
%A maximum_regions
%A         
%A
%A * 144 =
%A         
%A
%A
%A
%A maximum_partitions
%A         
%A
%A * 56 =
%A         
%A
%A
%A
%A maximum_ports
%A         
%A
%A * 36 =
%A         
%A
%A
%A
%A maximum_periods
%A         
%A
%A * 36 =
%A         
%A
%A
%A
%A maximum_extensions
%A         
%A
%A * 64 =
%A         
%A
%A
%A
%A Floating Point Tasks
%A         
%A
%A * 108 =
%A         
%A
%A
%A
%A Task Stacks
%A         
%A
%A
%A
%A Total Single Processor Requirements
%A         
%A
%A
%A
%A
%A         
%A
%A
%A         
%A
%A
%A
%A Description
%A         
%A
%A Equation
%A         
%A
%A Bytes Required
%A
%A maximum_nodes
%A         
%A
%A * 48 =
%A         
%A
%A
%A
%A maximum_global_objects
%A         
%A
%A * 20 =
%A         
%A
%A
%A
%A maximum_proxies
%A         
%A
%A * 124 =
%A         
%A
%A
%A
%A Total Multiprocessing Requirements
%A         
%A
%A
%A
%A
%A         
%A
%A
%A         
%A
%A
%A
%A Fixed System Requirements
%A         
%A
%A 6,768
%A
%A Total Single Processor Requirements
%A         
%A
%A
%A
%A Total Multiprocessing Requirements
%A         
%A
%A
%A
%A Minimum Bytes for RTEMS Workspace
%A         
%A
%A
%A
%A 内存的需求计算方法如下所示:
%A
%A 可以看到,每增加一个任务,需要多 372 个字节,有了这些计算公式,系统使用的内存可以量化到字节为单位。
%A
%A 对象的分配可以使用两种模式。默认模式是规定对象数目的上限。对象在初始化时分配好需要的内存,系统运行过程中系统对象的数目不能超过配置的数目。
%A
%A 第二种模式允许系统动态增加对象的数目,这通过配置rtems_resource_unlimited实现。例如:
%A
%A #define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(5)
%A
%A rtems_resource_unlimited 定义的值是对象表的大小 , 当系统需要动态为新对象分配空间 , 每次分配固定大小的空间 , 空间的大小和 rtems_resource_unlimited 成正比。对象使用完毕后,内核将这些内存释放。
%A
%A 一般来说每个版本的RTEMS对内存的需求将会是不同的。而且对于不同的处理器,不同的编译器,内存的需求都可能发生变化。为了避免问题,在如下情况下应该重新计算内存需求:
%A
%A 修改了配置参数,
%A
%A 任务或中断栈需求改变,
%A
%A 任务的浮点属性被改变,
%A
%A RTEMS 被升级, 或
%A
%A 目标处理器被改变。
%A
%A 如果不能为RTEMS提供足够的工作空间将会产生异常。
%A%A
%A

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
寂寞如雪
2009-05-19 19:01:18
夜色花
2009-05-19 18:56:22
没有爱可以重来
2009-05-19 18:54:59
推荐文章
最近访客