“Cortex-M3权威指南”中CH5说到了“互斥访问”,也用“LDREX/STREX”举例说明了,请问如何在C语言中实现这种互斥访问呢?
C中没有对应的语句,需要用嵌入汇编使用这些特殊指令
当然不用这些特殊指令,使用纯C函数也可以实现互斥访问,一些操作系统的书中有介绍。
“互斥访问”我认为,是操作系统多任务中的概念吧。
先实现多任务操作系统,呵呵
"互斥访问"是操作系统中要解决的问题,但不是操作系统特有
只要有中断,就会有“互斥访问”的问题。
举个简单的例子:你通过中断接收数据到一个环形缓冲区,用一个指针控制数据写入缓冲区,再在主循环中从缓冲区读取并处理数据,用另一个指针控制数据读出,如果写指针追上了读指针表示缓冲区上溢,如果读指针追上写指针表示缓冲区变空;对读写指针的控制就需要解决“互斥访问”的问题,如不解决读写指针的操作肯定会乱。
香主说的是!
版主说的是!
一般的通讯,是都可以用环形缓冲解决,但要对一个资源的锁定,则无法解决,只能关中断...不知道有什么好的办法没有?
可以考虑用BIT_banding
bit banding 是把读-修改-写包在一起了,
纯c操作,方便
互斥
C语言中常用的互斥访问方法:
1.关中断
2.通过测试标志来访问互斥资源
3.使用信号量
l 关中断
l 使用测试并置位指令
l 禁止做任务切换
l 利用信号量
Keil RealView中的指令内在函数可直接实现“LDREX/STREX”的,附件《4.7 指令内在函数》之__ldrex()/__strex即实现该指令。
-
-
编译器参考指南.pdf (2.05 MB)
互斥访问这个词平时也很少听到,不知道是用在什么条件下的