打印

keil C51 中断影响 long 类型计算的问题

[复制链接]
4072|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ahr|  楼主 | 2008-10-16 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
多次遇到过 因中断触发而使正在进行计算的unsigned long类型数据计算或比较出错。以前用的少,在计算开始屏蔽中断,计算完再恢复,算是基本结局了。
可是现在,因为计算的地方比较多,屏蔽中断计算不太现实,不知道大家都是怎么处理这样的问题的呢?

相关帖子

沙发
chen3bing| | 2008-10-17 09:28 | 只看该作者

re

可以再定义一个long型变量,读前先把数据读到这个变量里面,
再判断。

使用特权

评论回复
板凳
夏虫| | 2008-10-17 09:40 | 只看该作者

不知道为什么要屏蔽中断后再计算

单片机进入中断时,会保护现场

使用特权

评论回复
地板
lyjian| | 2008-10-17 09:54 | 只看该作者

楼上说的对

中断和计算本来就是两回事
能出错肯定是你的软件写得有问题
在中断程序中没有保护现场或改了相关的变量

使用特权

评论回复
5
夏虫| | 2008-10-17 10:26 | 只看该作者

呵呵,我可能理解错了

刚才看了后面的帖子“主题:单片机C语言请教!”,可能LZ说的情况与里面的问题相同,里面已经给出了2种解决方案,一种是屏蔽中断,判断结束后再开中断,还有一种就是增加一个临时量进行判断。

使用特权

评论回复
6
horse7812| | 2008-10-17 10:54 | 只看该作者

楼上说的对

一般情况下,KEIL C会自动保护现场,估计是在中断响应程序中改变了相关的long型变量.对于这种情况,可采用以下办法:将所有涉及该变量的运算尽量子程序化,在子程序中可以通过关闭中断或者通过信号量通知中断服务程序在子程序执行的过程中不改变相关变量.另外,具体情况就要具体分析了.

使用特权

评论回复
7
zgl7903| | 2008-10-17 13:42 | 只看该作者

中断程序使用不同的寄存器组试试看

使用特权

评论回复
8
救火车| | 2008-10-17 13:48 | 只看该作者

楼上说的不是这个问题。

请搜一下我写的《一个容易忽略的错误》

使用特权

评论回复
9
ahr|  楼主 | 2008-10-17 15:58 | 只看该作者

感谢楼上各位

以前没仔细想,还以为是在计算的时候中断影响了标志位。
看了,《单片机C语言请教》和《一个容易忽略的错误》,应该就是我要问的问题。
类似多线程的数据共享。
怕频繁关中断影响中断响应,我只有增加标志,运算放到外面来做了。

使用特权

评论回复
10
5880527| | 2008-10-17 17:53 | 只看该作者

最近怎么老讨论这个问题呢

 

使用特权

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

本版积分规则

ahr

2

主题

15

帖子

0

粉丝