收藏0 举报
feelhyq 发表于 2017-4-7 17:35 你这个叫 “掩耳盗铃” 即便是一个变量的操作也会存在临界区 , 汇编伪代码给 如下 ldr r0, =g_lock ...
GZZXB 发表于 2017-4-7 21:57 4位机不懂不探讨,8/32位机对于字节变量来说,是原子操作,尽管抢占不影响。 ...
feelhyq 发表于 2017-4-7 22:45 针对楼主的回答,我去写了个汇编和C,C通过反汇编后,再看bin文件的机器代码,对于单个变量不是源自操作 ...
uint8_t g_Lock=0; if(!g_Lock) { g_Lock = 1; //DoSomething(); g_Lock = 0; } 这貌似只能用于绝对优先级的环境下,比如中断就是比线程优先级高。 确保A执行完"if(!g_Lock)"后,如果被B打断,B不会在执行完“if(!g_Lock)”后,又被打断而继续执行A
GZZXB 发表于 2017-4-7 23:07 写代码验证,为你的认真点赞 所谓原子操作并不是说c语句一定要一条汇编指令完成,c转成汇编肯 ...
feelhyq 发表于 2017-4-8 10:09 那这个 uint8_t g_lock 是不是需要加volatile去修饰呢?
cuya 发表于 2017-4-9 20:50 这是多线程程序中的基本问题, 用互斥锁。对于嵌入式的中断,亦是如此。
cuya 发表于 2017-4-10 10:29 嵌入式里, 开关中断是最简单而且最方便的临界区控制方式, 其他的方式不是不能做到, 而是麻烦一些, 即自 ...
renxiaolin 发表于 2017-4-10 17:21 看到你们的讨论,我就想到啦群主,
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
时间类勋章
人才类勋章
发帖类勋章
等级类勋章
96
331
10
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号