"优先级表是电源技术中高压开关电源设计的一个关键概念,尤其在嵌入式系统如uC/OS-III的操作系统中,用于管理任务调度。任务被创建后,其任务控制块(TCB)会放入就绪列表,表示任务准备就绪,等待执行。就绪列表由一个优先级表和一个存储TCB的双向链表组成。优先级表在代码层面是一个数组,数组的大小由OS_PRIO_TBL_SIZE宏控制,该宏根据支持的优先级数量和CPU整型数据位数计算得出。在uC/OS-III中,优先级表与任务的优先级关联,通过特定的映射方式实现。本书《野火®》从0到1教你写uCOS-III,不仅解释源码实现,还指导如何使用API,适合初学者深入理解RTOS的运作机制。"
在uC/OS-III操作系统中,任务的管理是通过就绪列表来实现的。这个列表包含了一个优先级表和一个存储任务控制块(Task Control Block, TCB)的双向链表。当任务创建后,其TCB会被放入就绪列表,表明任务已经准备好,可以随时被调度执行。优先级表是一个数组,定义在`os_prio.c`文件中,使用`CPU_DATA`类型,通常是32位整型。数组的大小由`OS_PRIO_TBL_SIZE`宏决定,这个宏的值取决于系统支持的最大优先级数`OS_CFG_PRIO_MAX`和CPU整型数据的位数`DEF_INT_CPU_NBR_BITS`。
`OS_PRIO_TBL_SIZE`的计算公式是`(OS_CFG_PRIO_MAX - 1u) / (DEF_INT_CPU_NBR_BITS) + 1u`。例如,当`OS_CFG_PRIO_MAX`设置为32(意味着最多支持32个优先级),且`DEF_INT_CPU_NBR_BITS`为32(对应于Cortex-M系列MCU的32位整型),则`OS_PRIO_TBL_SIZE`的值为1,表示一个数组元素就能表示所有优先级。如果需要支持更多的优先级,比如64个,那么数组就需要两个元素,以此类推。
优先级表与任务的优先级关联的方式没有详细说明,但通常每个数组元素会对应一个优先级,通过某种映射机制,使得数组中的值能够表示任务的优先级顺序。这种设计允许操作系统高效地查找和调度优先级最高的任务。
学习这本书《野火®》从0到1教你写uCOS-III,读者不仅可以了解RTOS的内部工作机制,还可以通过实际编写代码来提升技能。作者强调了结合代码调试和重写例程的重要性,以加深理解和提高编程能力。书中遵循uC/OS-III官方源码的结构和命名规范,使得读者在学习后能顺利过渡到使用原始的uC/OS-III系统。