打印
[技术问答]

关于中断和主函数都会改变同一个变量的问题,困扰很久了!

[复制链接]
599|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2022-6-24 09:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
你好,
有个C语言 请教一下!这个问题困扰我很久了!

你看看这个网友的观点是对的吗?
为了防止中断函数把某些共享数据破坏,在主函数中更改某个数据变量时,应该先关闭中断,修改完后再打开中断;如果是1个字节char变量没关系,如果是int等类型的2个字节以上的数据就有必要考虑一下。因为char是一个字节,在数据改变的时候,一条指令就可以更改完毕.而int是2个字节,更改数据的时候至少需要2条指令以上,所以我怕在刚执行一条指令的时候,还没来得及执行完第二条指令,也就是int数据还没更改完时出现定时中断,而恰好在定时中断里有发生了更改次变量的情况。



就是说中断里面用到的变量,如果主循环也有用,在主循环里面修改时,就要关中断,防止操作到一半,中断发生,中断里面改变了这个变量?

不知这个问题使用volatile能否解决?
谢谢!

使用特权

评论回复
沙发
cr315| | 2022-6-26 09:00 | 只看该作者
Volatile只是说, 每次在用到这个变量时, 都要重新读一次, 防止有中断或其它任务改变了这个值.

对于Cortex系列单片机, 变量是存在内存中, 只要改写变量, 就要先读到寄存器中,值改变后,再回写到内存中, 所以即使是char型8bit变量, 只要中断里有改写,中断外(或低优先级中断里)改写时,就一定要先关全局中断, 改写完后,再开全局中断. 而中断外(或低优先级中断里)的读不必这样关开中断.

使用特权

评论回复
板凳
redone| | 2022-7-6 21:01 | 只看该作者
额,应该不能这样

使用特权

评论回复
地板
sadicy| | 2022-7-17 09:32 | 只看该作者
还是要仿真跟踪一下吧
不能乱猜

使用特权

评论回复
5
zhihongkevin| | 2022-7-20 11:04 | 只看该作者
我觉得这是控制逻辑的问题,我做一些实时控制的时候也会遇到这个问题。但是可用从程序控制的方面入手,即使出现了你说的这种情况,不会改变既定的控制逻辑

使用特权

评论回复
6
cyclefly| | 2022-7-21 09:35 | 只看该作者
中断应该不会这样,还是哪里赋值了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1510

主题

4547

帖子

6

粉丝