UCOSII操作系统的任务间通信

本文介绍了UCOSII操作系统中任务间通信的几种机制,包括信号量、互斥信号量、消息邮箱和消息队列。强调了使用全局变量进行通信的潜在问题,并详细阐述了各种通信方式的工作原理和相关函数,如OSSemCreate、OSSemPend等。通过这些通信机制,可以解决中断导致的数据一致性问题和任务间的同步与资源管理。
摘要由CSDN通过智能技术生成

前言

在主程序里面做i++(i=10),在某个中断服务函数里面做i–,会出现主程序刚取出i的值得时候被中断打断,在中断里面做了i—(写回去的值为9),返回到断点后,主程会对i(已经取出的值)做加1操作,然后写回去(最终i=11;).------在主程序里面在对i操作之前先把中断关了,等操作完后再打开中断。
出现以上情况的原因是—打断。在Ucos中不可避免的会出现以上打断问题。因为ucos是以优先级作为调度原则,所以也存在打断问题。所以任务间间交换信息如果用全局变量,就存在以上问题。所以ucos任务间交换信息尽量的不要用全局变量。

Ucosii的任务间通信机制:信号量、互斥信号量、消息邮箱、消息队列、事件标志组

任务控制块:存放当前任务的相关信息(任务函数地址、任务优先级、任务栈、任务状态)

事件控制块:当成功创建一个事件(信号量、互斥信号量、消息邮箱、消息队列、事件标志组)后,系统就分配一段内存空间,这段空间就是事件控制块,存放这该事件的相关信息。

信号量

可以把信号量看成是一个计数器,表示当前资源的占用情况,当释放一个资源时信号量+1,如果占用一个资源,信号量-1。

  1. 要想使用信号量,必须先创建一个信号量,并且可以对这个信号量赋予一个初始值。
  2. 释放信号量,信号量就会+1
  3. 要想得到一个信号量,要先查看信号量是否为0,如果大于0表示当前可以去占用一个信号量,如果为 0表示当前信号量被用光了,可以死等其他任务释放信号量&
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值