ucosIII OS_TYPE.H /OS_CFG_APP.H 解释

来源:互联网 发布:sql不允许保存修改 编辑:程序博客网 时间:2024/04/30 00:18

ucosIII User's Manual.pdf 文档,μC/OS-III Configuration Manual章节B-2 B-3 翻译,以进一步了解ucosIII 的移植及裁剪。

B-2 DATA TYPES (OS_TYPE.H)

os_type.h包含μC/OS-III所用到的数据类型,这些数据类型只应在μC/OS-III的移植时被修改。
修改os_type.h的原因是处理器针对特定字长可能会运行的更好。例如一个16位处理器在处理16位值时可能更有效率,而32位处理器对32位值更合适,即便会有额外的RAM开销。换言之,用户可能需要在处理器性能和内存开销上作出选择。


B-3 μC/OS-III STACKS, POOLS AND OTHER (OS_CFG_APP.H)

μC/OS-III允许用户配置空闲任务堆栈的大小、统计任务堆栈、消息池、时钟节拍轮盘、定时器轮盘、调试表等。这是通过os_cfg_app.h进行完成的。
OS_CFG_TASK_STK_LIMIT_PCT_EMPTY:
这个#define为空闲任务,统计任务,节拍任务,中断队列处理任务和定时器任务的任务堆栈 设置堆栈溢出检测限位(以空余百分比的形式)。换句话说,设置值是堆栈剩余的空间比例。
例如,如果堆栈的大小为1000个CPU_STK单元,而用户声明的OS_CFG_TASK_STK_LIMIT_PCT_EMPTY为10,则堆栈溢出检测限位将在堆栈%90满或在%10空的时候被置位。
如果处理器的堆栈是从高地址向低地址的增长,那么检测限位应该靠近堆栈的“基地址”,即接近堆栈的0单元。
如果处理器不支持自动堆栈限位检测,则应该将这个#define设置为0.


OS_CFG_IDLE_TASK_STK_SIZE:
设置空闲任务的堆栈大小(以CPU_STK为单位),注意,设置的任务堆栈大小至少要大于OS_CFG_STK_SIZE_MIN值(见os_cfg.h)


OS_CFG_INT_Q_SIZE:
如果OS_CFG_ISR_POST_DEFERRED_EN设置为1(见os_cfg.h),则这个#define指定了中断队列可以容纳的项目数。此队列的大小取决于 ISR处理程序期间,可能发生多少此中断?其大小还取决于是否允许中断嵌套。一个很好的初始值大约是10.


OS_CFG_INT_Q_TASK_STK_SIZE:
如果OS_CFG_ISR_POST_DEFERRED_EN设置为1(见os_cfg.h),则#define设置的ISR处理任务(ISR handler task’s stack)的堆栈大小(以CPU_STK为单位)


OS_CFG_ISR_STK_SIZE:
此项设置了μC/OS-III的中断堆栈大小(以CPU_STK为单位),注意,次堆栈的大小需要满足中断嵌套的最坏情况,假设处理器支持中断嵌套。该堆栈的声明在os_cfg_app.c中,形式如下:
CPU_STK OSCfg_ISRStk[OS_CFG_ISR_STK_SIZE];


OS_CFG_MSG_POOL_SIZE:
此项指定了OS_MSGs消息池中可用的OS_MSGs数量。其值以OS_MSG单元的数量表示。消息池在os_cfg_app.c中声明,形式如下:
OS_MSG OSCfg_MsgPool[OS_CFG_MSG_POOL_SIZE];


OS_CFG_STAT_TASK_PRIO:


OS_CFG_STAT_TASK_RATE_HZ:

设置统计任务的执行频率,HZ为单位。建议该值是节拍频率的偶数分之一


OS_CFG_STAT_TASK_STK_SIZE:


OS_CFG_TICK_RATE_HZ:


OS_CFG_TICK_TASK_PRIO:

节拍任务的优先级。建议将此任务设置在一个相当高的优先级上,但并不是最高的。分配给该任务的优先级必须大于0并且小于OS_CFG_PRIO_MAX-1.


OS_CFG_TICK_TASK_STK_SIZE:

OS_CFG_TICK_WHEEL_SIZE:

这个#define定义了OSTickWheel[]表中的项目数。“轮盘”的作用,是可以减少节拍任务每次需要检查更新的任务数量。轮盘的大小应该是应用程序的预期总任务数的几分之一。
其值应该是4~1024之间的数。任务管理的开销在某种程度上决定了轮盘的大小。较大的轮盘尺寸将会减小节拍管理的负荷,但会需要更多地RAM。轮盘的每个项目都包含一个指针、一个计数器,计数器记录了在轮盘的这一条“轮辐”上等待的任务数。这个计数器通常16位的。建议不要将OS_CFG_TICK_WHEEL_SIZE设置为与节拍频率成倍数的关系。如果应用程序有很多任务,建议设置一个较大的轮盘尺寸。作为初始值,建议使用一个质数(3,5,7,11,13,17,19,23…)。


OS_CFG_TMR_TASK_PRIO:
指定μC/OS-III定时器任务优先级。建议设置在一个中等偏低的优先级上。
应遵守如下规则:

OS_CFG_TMR_TASK_RATE_HZ
定时器任务的频率。一般默认设置为10Hz。当然定时器可以以更高的速度运行,代价是更高的处理器开销。
注:OS_CFG_TMR_TASK_RATE_HZ必须是OS_CFG_TICK_TASK_RATE_HZ的整数分之一。换句话说,如果设置OS_CFG_TICK_TASK_RATE_HZ==1000Hz,请不要设置OS_CFG_TMR_TASK_RATE_HZ为11,因为那样子每次定时器更新都将需要90.91时钟节拍,不是整数。


OS_CFG_TMR_TASK_STK_SIZE:
定时器任务的堆栈大小。


OS_CFG_TMR_WHEEL_SIZE:
定时器的更新采用了轮转的轮盘机制。“轮盘”的作用,是可以减少定时器管理任务每次需要检查更新的任务数量。轮盘的大小用该时应用程序的总定时器数目的几分之一。
其值应该是4~1024之间的数。定时器管理的开销在某种程度上决定了轮盘的大小。较大的轮盘尺寸将会减小定时器管理的负荷,但会需要更多地RAM。轮盘的每个项目都包含一个指针、一个计数器,计数器记录了在轮盘的这一条“轮辐”上等待的任务数。这个计数器通常16位的。建议不要将此值设置为与节拍频率成倍数的关系。如果应用程序有很多定时器,建议设置一个较大的轮盘尺寸。作为初始值,建议使用一个质数(3,5,7,11,13,17,19,23…)。

如有出入,以英文原版为主。

1 0
原创粉丝点击