uCOS专区

实时系统对存储器的需求

发布日期:2011/11/27

    如果设计是前后台系统,对存储器容量的需求仅仅取决于应用程序代码。而使用多任务内核时的情况则很不一样。内核本身需要额外的代码空间(ROM)。内核的大小取决于多种因素,取决于内核的特性,从1K100K字节都是可能的。8CPU用的最小内核只提供任务调度、任务切换、信号量处理、延时及超时服务约需要1K3K代码空间。代码空间总需求量由表达式[2.12]给出。 

    [2.12]  总代码量 应用程序代码 内核代码

 

    因为每个任务都是独立运行的,必须给每个任务提供单独的栈空间(RAM)。应用程序设计人员决定分配给每个任务多少栈空间时,应该尽可能使之接近实际需求量 (有时,这是相当困难的一件事)。栈空间的大小不仅仅要计算任务本身的需求 (局部变量、函数调用等等),还需要计算最多中断嵌套层数(保存寄存器、中断服务程序中的局部变量等)。根据不同的目标微处理器和内核的类型,任务栈和系统栈可以是分开的。系统栈专门用于处理中断级代码。这样做有许多好处,每个任务需要的栈空间可以大大减少。内核的另一个应该具有的性能是,每个任务所需的栈空间大小可以分别定义(µC/OSII可以做到)。相反,有些内核要求每个任务所需的栈空间都相同。所有内核都需要额外的栈空间以保证内部变量、数据结构、队列等。如果内核不支持单独的中断用栈,总的RAM需求由表达式[2.13]给出。 

    [2.13] RAM总需求 应用程序的RAM需求 + (任务栈需求 最大中断嵌套栈需求) * 任务数

 

如果内核支持中断用栈分离,总RAM需求量由表达式[2.14]给出

    [2.14]=RAM总需求 应用程序的RAM需求 内核数据区的RAM需求 各任务栈需求之总和 最多中断嵌套之栈需求

 

除非有特别大的RAM空间可以所用,对栈空间的分配与使用要非常小心。为减少应用程序需要的RAM空间,对每个任务栈空间的使用都要非常小心,特别要注意以下几点:

定义函数和中断服务子程序中的局部变量,特别是定义大型数组和数据结构

函数(即子程序)的嵌套

中断嵌套

库函数需要的栈空间

多变元的函数调用

    综上所述,多任务系统比前后台系统需要更多的代码空间(ROM)和数据空间(RAM)。额外的代码空间取决于内核的大小,而RAM的用量取决于系统中的任务数。