打印

突然有一个疑问

[复制链接]
1508|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangjianf5|  楼主 | 2013-10-21 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wangjianf5 于 2013-10-22 08:47 编辑

8位单片机定义一个32位的全局变量,如果在主程序里读取这个32位变量的时候出现了中断,而中断里又将这个数据的值改变了,那么返回后会不会造成这个数据的字节读取错误。
举个例子:比如一个32位的数据 0x11223344,主程序中读取了0x1122的时候中断来了,中断将数据改变成0xAABBCCDD了,那么主程序返回后会不会读取成0x1122CCDD?
1,4字节的变量,没有完全读取的时候会不会进入中断?
2,如果会进入中断,那么会不会造成上面说的情况?
3,如果不会进入中断,请问单片机是怎么防止这种情况的?
谢谢!

相关帖子

沙发
ayb_ice| | 2013-10-21 17:05 | 只看该作者
LZ有点入门了,这是典型的临界代码

当然可能产生风险,此时必须想办法处理,最简单的方法是关中断

使用特权

评论回复
板凳
wangjianf5|  楼主 | 2013-10-22 08:49 | 只看该作者
以前做东西的时候从来就没有考虑过这个问题,也没遇到过这个问题,就这么混过来了那么多年。
这个想法也是突然自己脑子里闪现出来的
这样的话,那太危险了

使用特权

评论回复
地板
杨爱林林| | 2013-10-22 10:51 | 只看该作者
楼主有时间  可以看看这方面的资料
比如你百度查查关键字  volatile的用法

使用特权

评论回复
5
outstanding| | 2013-10-22 11:15 | 只看该作者
肯定危险啊。如果不中断可能还好点。

使用特权

评论回复
6
sunhq02| | 2013-10-22 13:12 | 只看该作者
这个是会出现的
需要用临界区处理
你可以简单浏览下操作系统特别是RTOS的原理
里面有很多种临界区处理方法

最简单的就是关中断

使用特权

评论回复
7
NE5532| | 2013-10-22 13:26 | 只看该作者
肯定会造成错误的,共享资源肯定会出现这种临界错误。

使用特权

评论回复
8
幸福的理由| | 2013-10-22 13:46 | 只看该作者

使用特权

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

本版积分规则

8

主题

29

帖子

1

粉丝