uCOS-II原理3.ppt


文档分类:IT计算机 | 页数:约18页 举报非法文档有奖
1/18
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/18
文档列表 文档介绍
uCOS-II原理3
互斥型信号量
在描述互斥型信号量的事件控制块中,除了成员OSEventType要赋以常数OS_EVENT_TYPE_MUTEX以表明这是一个互斥型信号量和仍然没有使用成员OSEventPtr之外,成员OSEve一个标志(常指针)。当可移动的指针OSQIn或OSQOut移动到数组末尾,也就是与OSQEnd相等时,可移动的指针将会被调整到数组的起始位置OSQStart。也就是说,从效果上来看,指针OSQEnd与OSQStart等值。于是,这个由消息指针构成的数组就头尾衔接起来形成了一个如图所示的循环的队列。
为了对图所示的消息指针数组进行有效的管理,μC/OS-II把消息指针数组的基本参数都记录在一个叫做队列控制块的结构中,队列控制块的结构如下:
 
typedef struct os_q
{
struct os_q *OSQPtr;
void **OSQStart;
void **OSQEnd;
void **OSQIn;
void **OSQOut;
INT16U OSQSize;
INT16U OSQEntries;
} OS_Q;
在μC/OS-II初始化时,,并用队列控制块中的指针OSQPtr将所有队列控制块链接为链表。由于这时还没有使用它们,故这个链表叫做空队列控制块链表
创建一个消息队列首先需要定义一指针数组,然后把各个消息数据缓冲区的首地址存入这个数组中,然后再调用函数OSQCreate( )来创建消息队列。创建消息队列函数OSQCreate( )的原型为:
 
OS_EVENT OSQCreate(
void**start, //指针数组的地址
INT16U size //数组长度
);
请求消息队列的目的是为了从消息队列中获取消息。任务请求消息队列需要调用函数OSQPend( ),该函数的原型为:
 
void*OSQPend(
OS_EVENT*pevent, //所请求的消息队列的指针
INT16U timeout, //等待时限
INT8U*err //错误信息
);
任务需要通过调用函数OSQPost( )或OSQPostFront( )来向消息队列发送消息。函数OSQPost( )以FIFO(先进先出)的方式组织消息队列,函数OSQPostFront( )以LIFO(后进先出)的方式组织消息队列。这两个函数的原型分别为: 
INT8U OSQPost(
OS_EVENT*pevent, //消息队列的指针
void*msg //消息指针
);
 

 
INT8U OSQPost(
OS_EVENT*pevent, //消息队列的指针
void*msg //消息指针
);
 
函数中的参数msg为待发消息的指针。
信号量集
在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式。μC/OS-II为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集。
信号量集所能管理的信号量都是一些二值信号,所有信号量集实质上是一种可以对多个输入的逻辑信号进行基本逻辑运算的组合逻辑,其示意图如图5-1所示
信号量集的标志组
不同于信号量、消息邮箱、消息队列等事件,μC/OS-II不使用事件控制块来描述信号量集,而使用了一个叫做标志组的结构OS_FLAG_GRP。
OS_FLAG_GRP结构如下:
 
typedef struct{
INT8U OSFlagType; //识别是否为信号量集的标志
void *OSFlagWaitList;//指向等待任务链表的指针
OS_FLAGS OSFlagFlags; //所有信号列表
}OS_FLAG_GRP;
成员OSFlagWaitList是一个指针,当一个信号量集被创建后,这个指针指向了这个信号量集的等待任务链表。
等待任务链表
与其他前面介绍过的事件不同,信号量集用一个双向链表来组织等待任务,每一个等待任务都是该链表中的一个节点(Node)。标志组OS_FLAG_GRP的成员OSFlagWaitList就指向了信号量集的这个等待任务链表。
等待任务链表节点OS_FLAG_NODE的结构如下:
 
typedef struct {
void *OSFlagNodeNext; //指向下一个节点的指针
void *OSFlagNodePrev; //指向前一个节点的指针
void *OSFlagNodeTCB; //指向对应

uCOS-II原理3 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数18
  • 收藏数0 收藏
  • 顶次数0
  • 上传人放射辐射
  • 文件大小1.92 MB
  • 时间2022-05-20