uC/OS-II内核架构解析---uC/OS-II通信与同步

本文深入解析了uC/OS-II实时操作系统中的通信与同步机制,包括消息邮箱Mbox、消息队列msgQ、信号量Sem、互斥锁Mutex以及事件组标志Flag的详细使用和管理函数。Mbox用于单一消息传递,msgQ实现多条消息传递,信号量用于任务同步及资源管理,Mutex保证资源的排他性访问,Flag则用于多事件管理。通过对这些机制的理解,读者可以更好地掌握uC/OS-II的内核架构。
摘要由CSDN通过智能技术生成

1. 消息邮箱Mbox

      Mbox用于多任务间单一消息的传递,uC/OS-II使用ECB管理Mbox的基本信息,OSEventPtr指向创建Mbox时指定的内存空间。事件的创建由具体的事件管理程序实现。主要包含在C源文件OS_MBOX.C中。

  • OS_EVENT *OSMboxCreate(void *msg);
  • void *OSMboxPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);
  • void *OSMboxAccept(OS_EVENT *pevent);
  • INT8U OSMboxPost(OS_EVENT *pevent, void *msg);
  • INT8U OSMboxPostOpt(OS_EVENT *pevent, void *msg, INT8U opt);
  • OS_EVENT *OSMboxDel(OS_EVENT *pevent, INT8U opt, INT8U *err);
  • INT8U OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *);

 

 

2. 消息队列msgQ

(1) msgQ基本内容

      msgQ是uC/OS-II任务间通信的机制,可实现多条消息传递,即可以同时存储多条消息。uC/OS-II使用循环队列管理机制。主要包含在C源文件OS_Q.C中。

      msgQ管理:使用指针数组存储所有消息的位置;使用QCB标识指针数组中消息的基本信息;使用ECB管理整个msgQ。QCB在编译时分配空间,即当前系统中可用的msgQ个数是预先设置的,系统运行时不能修改。

 

(2) msgQ全局变量

  • OS_EXT OS_Q *OSQTbl[OS_MAX_QS];   //QCB结构体数组
  • OS_EXT OS_Q *OSQFreeList;                    //空闲QCB头指针
  • typedef struct os_q{                                //消息队列控制块

      struct os_q *OSQPtr;        //用于构建空闲QCB链表

      void **OSQStart;              //指向msgQ指针数组的起始位置

      void **OSQEnd;               //指向msgQ指针数组的结束位置

      void **OSQIn;    //指向msgQ指针数组下一个可以插入消息的位置

      void **OSQOut; //指向msgQ指针数组下一个可以读出消息的位置

      INT16U OSQSize;            //msgQ指针数组的大小

      INT16U OSQEntries;              //msgQ指针数组当前可以读取的消息个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值