UCOSII操作系统学习之任务间的通信(1)

1.任务间通讯方式:信号量和邮箱

为了把描述事件的数据结构统一起来,UCOSII 使用叫做事件控制块(ECB)的数据结构来描述诸如信号量、邮箱(消息邮箱)和消息队列这些事件。信号量,邮箱,消息队列都是一类事件

2.信号量:                          1) 创建信号量OS_EVENT *OSSemCreate (INT16U cnt)

                                           2)请求信号量 OSSempend(OS_EVENT *pevent,INT16U timeout,INT8U *err;

                                           3)  发送信号量(访问共享资源结束后,释放信号量)OSSemPost(OS_EVENT *pevent);

                                           4)删除信号量(不需要某个信号量时) OSSemDel(OS_EVENT *pevent,INT8U opt,INT8U *err)。

3.邮箱:在多任务操作系统中,常常需要在任务与任务之间通过传递一个数据(这个数据叫消息的方式来进行通信。为了达到这个目的,可以在内存中创建一个存储空间作为该数据的缓冲区。如果把这个缓冲区称之为消息缓冲区,这样在任务间传递数据的最简单办法就是传递消息缓冲区的指针。我们把用来传递消息缓冲区指针的数据结构叫做邮箱

   1)创建消息邮箱:OS_EVENT *OSMboxCREAT(void *msg);函数中的参数msg为消息的指针,函数的返回值为消息邮箱的指针。

   2)  向消息邮箱中发送消息函数 OSMBoxPost(OS_EVENT *pevent,void *msg);其中pevent为消息邮箱的指针,msg为消息指针。

   3)  请求邮箱:OSMboxPend ( vOS_EVENT *pevent, INT16U timeout, INT8U err),这个函数的主要作用就是查看邮箱指针OSEventPtr是否为NULL,如果不是NULL就把邮箱中的消息指针返回给调用函数的任务,同时用OS_NO_ERR通过函数的参数err通知任务获取消息成功;如果邮箱指针OSEventPtr是NULL,则使任务进入等待状态,并引发一次任务调度。pevent为请求邮箱指针,timeout为等待时限,err为错误信息。

   4)查询邮箱状态:OSMboxQuery(OS_EVENT *pevent,OS_MBOX_DATA *pdata),其中pevent为纤细邮箱指针,pdata为存放邮箱信息的结构。

   5)删除邮箱函数:OS_EVENT *OS_MboxDel(OS_EVENT *pevent,INT8U opt,INT8U *err);其中pevent为消息邮箱指针,opt为删除选项,err为错误信息

4.对任务控制块的理解

 任务控制块就是一个结构体,结构体中定义了许多与任务相关的变量,包括优先级等。任务堆栈和任务控制块是一一对应的关系,任务堆栈可以理解为一个存储器,每个任务都有一个任务堆栈,任务堆栈就是装任务控制块的,只是不是直接装,而是通过任务控制块里面的任务堆栈指针变量指向任务堆栈而已,同时可以将所有任务控制块链接为一个任务链表,这样方便任务的管理,任务管理实质是对任务链表的管理。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值