您的位置:首页 > 其它

Pend Lists

2016-02-21 19:28 225 查看
typedef  struct  os_pend_data        OS_PEND_DATA;    //在等待对象任务的堆栈中分配  即OSxxxPend()所在任务
typedef  struct  os_pend_list        OS_PEND_LIST;       //被封装到OS_PEND_OBJ中
typedef  struct  os_pend_obj         OS_PEND_OBJ;

struct  os_pend_data {
    OS_PEND_DATA        *PrevPtr;
    OS_PEND_DATA        *NextPtr;
    OS_TCB              *TCBPtr;
    OS_PEND_OBJ         *PendObjPtr;
    OS_PEND_OBJ         *RdyObjPtr;
    void                *RdyMsgPtr;
    OS_MSG_SIZE          RdyMsgSize;
    CPU_TS               RdyTS;
};

struct  os_pend_list {
    OS_PEND_DATA        *HeadPtr;
    OS_PEND_DATA        *TailPtr;
    OS_OBJ_QTY           NbrEntries;      //等待队列中的个数,每个
};

struct  os_pend_obj {
    OS_OBJ_TYPE          Type;
    CPU_CHAR            *NamePtr;
    OS_PEND_LIST         PendList;                          /* List of tasks pending on object                        */
#if OS_CFG_DBG_EN > 0u
    void                *DbgPrevPtr;
    void                *DbgNextPtr;
    CPU_CHAR            *DbgNamePtr;
#endif
};

OS_PEND_LIST被封装到  OS_PEND_OBJ  被封装到  OS_SEM、OS_MUTEX、OS_FLAG_GRP、OS_Q
OS_PEND_LIST指针指向  OS_PEND_DATA



下图为在Pending On Multiple Objects中的截图。



void  OS_PendListChangePrio (OS_TCB   *p_tcb,
                             OS_PRIO   prio_new):

    修改p_tcb的Prio为prio_new,依次将p_tcb->PendDataTblPtr中的p_pend_data从其对应的对象中的PendList中删除,然后根据prio_new重新插入。

void  OS_PendListInit (OS_PEND_LIST  *p_pend_list):

    初始化p_pend_list的HeadPtr、TailPtr、NbrEntries。

void  OS_PendListInsertHead (OS_PEND_LIST  *p_pend_list,
                             OS_PEND_DATA  *p_pend_data):

    将p_pend_data插入到p_pend_list的开头。

void  OS_PendListInsertPrio (OS_PEND_LIST  *p_pend_list,
                             OS_PEND_DATA  *p_pend_data):

    根据p_pend_data所在的tcb的优先级将p_pend_data插入到p_pend_list中。
    

void  OS_PendListRemove (OS_TCB  *p_tcb):

    依次将p_tcb->PendDataTblPtr中的p_pend_data从其对应的对象中的PendList中删除。

void  OS_PendListRemove1 (OS_PEND_LIST  *p_pend_list,
                          OS_PEND_DATA  *p_pend_data):

    将p_pend_data从p_pend_list中删除。最后将p_pend_data的NextPtr、PrevPtr设为0。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: