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。
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。
相关文章推荐
- iOS 单例
- Android笔记---四大组件之Content Provider内容提供者详解
- 请求网络之HttpUrlConnection
- 【SPOJ-YELBRICK】The Yellow Brick Road【GCD】
- JQuery问题总结--持续更新
- 设计模式(1)---简单工厂模式
- ubuntu pastebin
- 问卷调查
- UML的基本图(一)
- 构建下一代服务载体,智能设备这座宝藏该怎么挖?
- jsp继续学习
- Android笔记---四大组件之Service服务详解
- Oracle 创建数据库以及数据库备份
- 实现Swipe View
- 错误 127 error LNK2026解决方法
- 定时器精度
- html的meta总结,html标签中meta属性使用介绍
- os_pend_multi.c
- 第三次作业之Calculator项目随笔
- Android JNI开发笔记