UCOSii(四)——任务的通信与同步

一、任务的通信方式

1.1 共享内存

进程间的通信方式有两种,一种是使用共享内存,这种方式基本不依赖OS,也没有相应的系统开销。另一种则需要OS支持,通过建立链接器实现任务间的通信。

Message Passing Share Memory
依赖内核,需要预先建立Link,内核负担开销 无需预先建立Link,用户进程负责开销
只有建立链接的双方才可以通信 所有进程都可以访问
需提供Link Creation、Link Capacity、 Message Lost等机制 需要提供互斥存取

两种通信方式的区别

在UCOSii中,多个任务使用同一块内存区域需要提供一种互斥存取的方法。否则该段共享数据很有可能在被访问前就被其他任务重置了。

利用关中断宏OS_ENTER_CRITICAL()、OS_EXIT_CRITICAL()以及开调度锁是利用函数 OSSchedLock()、 OSSchekUnlock()可以实现单任务对某一资源的暂时性独享。

用这种方法实现数据共享存在很大的局限性,一个简单的例子,当一个共享资源允许被多个任务同时占用,这种方式就很低效。

RTOS会提供信号量、邮箱和消息队列来支持任务间的通信与同步,即使是非实时性操作系统也同样有这样的接口,这已经类似于一种规范。

1.2 信号量

信号量的概念最初由Edsger Dijkstra提出。

假定有多个任务需要读写一块板卡上的flash芯片,如果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值