重要数据结构及任务栈初始化流程分析

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、任务栈创建及初始化流程

重要数据结构及任务栈初始化流程分析_第1张图片
图片.png

你可能感兴趣的:(重要数据结构及任务栈初始化流程分析)