typedef struct os_tcb { |
OS_STK*OSTCBStkPtr; |
#if OS_TASK_CREATE_EXT_EN |
void*OSTCBExtPtr; |
OS_STK*OSTCBStkBottom; |
INT32UOSTCBStkSize; |
INT16UOSTCBOpt; |
INT16UOSTCBId; |
#endif |
struct os_tcb *OSTCBNext; |
struct os_tcb *OSTCBPrev; |
#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_EN |
OS_EVENT*OSTCBEventPtr; |
#endif |
#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN |
void*OSTCBMsg; |
#endif |
INT16UOSTCBDly; |
INT8UOSTCBStat; |
INT8UOSTCBPrio; |
INT8UOSTCBX; |
INT8UOSTCBY; |
INT8UOSTCBBitX; |
INT8UOSTCBBitY; |
#if OS_TASK_DEL_EN |
BOOLEANOSTCBDelReq; |
#endif |
} OS_TCB; |
程序清单L 3.4任务控制块OS_TCB中几个成员的算法 | |
OSTCBY | = priority >> 3; |
OSTCBBitY | = OSMapTbl[priority >> 3]; |
OSTCBX | = priority & 0x07; |
OSTCBBitX | = OSMapTbl[priority & 0x07]; |
程序清单L3.5使任务进入就绪态 |
OSRdyGrp|= OSMapTbl[prio >> 3]; |
OSRdyTbl[prio >> 3] |= OSMapTbl[prio & 0x07]; |
Index | Bit Mask (Binary) |
0 | 00000001 |
1 | 00000010 |
2 | 00000100 |
3 | 00001000 |
4 | 00010000 |
5 | 00100000 |
6 | 01000000 |
7 | 10000000 |
程序清单L3.6从就绪表中删除一个任务 |
if ((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]) == 0) |
OSRdyGrp &= ~OSMapTbl[prio >> 3]; |
欢迎光临 嵌入式开发交流网论坛 (http://www.dianzixuexi.com/bbs/) | Powered by Discuz! X3.2 |