CoOS使用教程——互斥量

在介绍互斥量之前,先说说什么是临界资源。

最经典的临界资源就是打印机,在你同时让打印机打印两分文档的时候,会弹出一个窗口,上面列出打印队列。

这就是说,打印机只有一个,它无法同时打印两个文档,只能排队,一个个地打。

如果同时打印的话,会出错,这不是用户想要的结果。

同样的,在单片机里面,串口1,也是个临界资源,为了不让它出错,必须使用互斥量。

所谓互斥,就是互相排斥,任务A在使用串口1的时候,任务B不能使用,反之亦然。


使用互斥量之后,效果如下图所示。

把第16、23、34、39、46、51行都注释掉,不使用互斥量,效果如下图所示。


显然,不使用互斥量会让串口输出错误的信息。

1、CoCreateMutex(),创建一个互斥量。

OS_MutexID  CoCreateMutex(void);

如果成为创建一个互斥量,会返回一个OS_MutexID变量;创建失败的话,返回-1。

2、CoEnterMutexSection(),进入临界段。

StatusType  CoEnterMutexSection(OS_MutexID mutexID);

3、CoLeaveMutexSection(),退出临界段。

StatusType  CoLeaveMutexSection(OS_MutexID mutexID);

4、其实互斥量,就是在嵌入式常常说的“锁”,进入临界段对应“加锁”,退出临界段对应“解锁”。

而在linux驱动,还有自旋锁和睡眠锁两种,对加锁和解锁操作不当的话,也极易让任务变得不稳定,所以使用前请注意一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值