1、各种重要的数据结构
/* TCB中备份寄存器组的结构体, 用来临时保存任务前换的寄存器 */
typedef struct stackreg
{
U32 uispsr;
U32 uicpsr;
U32 uiR0;
U32 uiR1;
U32 uiR2;
U32 uiR3;
U32 uiR4;
U32 uiR5;
U32 uiR6;
U32 uiR7;
U32 uiR8;
U32 uiR9;
U32 uiR10;
U32 uiR11;
U32 uiR12;
U32 uiR13;
U32 uiR14;
U32 uiR15;
U32 uiExc_Rtn;
}STACKREG;
typedef struct dlist /* 链表结构 */
{
struct dlist* pstrHead; /* 头指针 */
struct dlist* pstrTail; /* 尾指针 */
}DLIST;
typedef struct prioflag /* 优先级标志表 */
{
#if PRIORITYNUM >= PRIORITY128
U8 aucPrioFlagGrp1[PRIOFLAGGRP1];
U8 aucPrioFlagGrp2[PRIOFLAGGRP2];
U8 ucPrioFlagGrp3;
#elif PRIORITYNUM >= PRIORITY16
U8 aucPrioFlagGrp1[PRIOFLAGGRP1];
U8 ucPrioFlagGrp2;
#else
U8 ucPrioFlagGrp1;
#endif
}PRIOFLAG;
typedef struct taskschedtab /* 任务调度表 */
{
DLIST astrList[PRIORITYNUM]; /* 各个优先级根节点 */
PRIOFLAG strFlag; /* 优先级标志,把该任务的优先级标识在优先级标识表中置1的 */
}TASKSCHEDTAB;
typedef struct tcbque /* TCB队列结构 */
{
DLIST strQueHead; /* 连接队列的链表 */
struct tcb* pstrTcb; /* TCB指针 */
}TCBQUE;
/* TCB结构体 */
typedef struct tcb
{
STACKREG strStackReg; /* 备份寄存器组 */
TCBQUE strTcbQue; /* TCB结构队列 */
U8 ucTaskPrio; /* 任务优先级 */
}TCB;
2、任务栈创建及初始化流程