您的位置:首页 > 其它

CoOS使用教程——互斥量

2015-12-22 16:43 155 查看
在介绍互斥量之前,先说说什么是临界资源。

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

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

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

同样的,在单片机里面,串口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驱动,还有自旋锁和睡眠锁两种,对加锁和解锁操作不当的话,也极易让任务变得不稳定,所以使用前请注意一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: