目录
- 任务就绪表的结构
- 使任务进入就绪状态
- OS_LOWEST_PRIO <= 63(以28为例)
- OS_LOWEST_PRIO <= 254(以65为例)
- 使任务脱离就绪状态
- 获取任务就绪表中优先级最高的就绪任务
- 优先级判定表OSUnMapTbl[ ]
- OS_LOWEST_PRIO <= 63
- OS_LOWEST_PRIO <= 254
任务就绪表的结构
- 由两个全局变量构成。
#if OS_LOWEST_PRIO <= 63u
#define OS_RDY_TBL_SIZE ((OS_LOWEST_PRIO) / 8u + 1u) /* Size of ready table*/
#else
#define OS_RDY_TBL_SIZE ((OS_LOWEST_PRIO) / 16u + 1u)/* Size of ready table*/
#endif
OS_EXT OS_PRIO OSRdyGrp; /* Ready list group*/
OS_EXT OS_PRIO OSRdyTbl[OS_RDY_TBL_SIZE]; /* Table of tasks which are ready to run*/
其中,OS_EXT
:
#ifdef OS_GLOBALS
#define OS_EXT
#else
#define OS_EXT extern
#endif
还有,OS_PRIO
:
#if OS_LOWEST_PRIO <= 63u
typedef INT8U OS_PRIO;
#else
typedef INT16U OS_PRIO;
#endif
使任务进入就绪状态
#if OS_LOWEST_PRIO <= 63u /* Pre-compute X, Y*/ptcb->OSTCBY = (INT8U) (prio >> 3u);ptcb->OSTCBX = (INT8U) (prio & 0x07u);
#else /* Pre-compute X, Y*/ptcb->OSTCBY = (INT8U) ((INT8U) (prio >> 4u) & 0xFFu);ptcb->OSTCBX = (INT8U) (prio & 0x0Fu);
#endif/* Pre-compute BitX and BitY*/ptcb->OSTCBBitY = (OS_PRIO) (1uL << ptcb->OSTCBY<