96
331
1071
助理工程师
使用特权
3
812
2507
初级工程师
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文件的机器代码,对于单个变量不是源自操作 ...
10
760
2532
uint8_t g_Lock=0; if(!g_Lock) { g_Lock = 1; //DoSomething(); g_Lock = 0; }
GZZXB 发表于 2017-4-7 23:07 写代码验证,为你的认真点赞 所谓原子操作并不是说c语句一定要一条汇编指令完成,c转成汇编肯 ...
26
3320
1万
禁止发言
feelhyq 发表于 2017-4-8 10:09 那这个 uint8_t g_lock 是不是需要加volatile去修饰呢?
cuya 发表于 2017-4-9 20:50 这是多线程程序中的基本问题, 用互斥锁。对于嵌入式的中断,亦是如此。
cuya 发表于 2017-4-10 10:29 嵌入式里, 开关中断是最简单而且最方便的临界区控制方式, 其他的方式不是不能做到, 而是麻烦一些, 即自 ...
92
1105
4517
中级工程师
renxiaolin 发表于 2017-4-10 17:21 看到你们的讨论,我就想到啦群主,
发表回复 本版积分规则 回帖后跳转到最后一页
时间类勋章
人才类勋章
发帖类勋章
等级类勋章
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号