设为首页收藏本站

新势力科技社区

 找回密码
 申,请,会,员

QQ登录

只需一步,快速开始

搜索
由于某种原因,我们论坛暂时只能转移到美国服务器存放,访问速度将受到一定影响,请大家谅解!
查看: 4187|回复: 5

[经验] 中断函数中一个容易忽略的错误

[复制链接]

25

主题

0

好友

38

积分

初级会员

Rank: 2

金钱
1046 新币
贡献
0 点
威望
7 点
最后登录
2013-6-22
精华
6
积分
38
帖子
38
发表于 2009-4-5 19:02:28 |显示全部楼层
本帖最后由 小小 于 2009-4-5 19:04 编辑

这是两年前我的徒弟遇到过一个故障。当时开发的一个产品,一项功能是在通电后播放40秒的语音.
测试时发现,大约通电70-80次就有一次播放时间不够40秒就提前停止。
当时以为复位有问题,换了复位片,没好。又先后换了CPU,语音芯片,还有电源,都没有好转。排除了硬件芯片原因导致的此现象.
后来又从软件中查找原因。反复查找软件逻辑,也没发现问题。后来偶然发现在主while里增加大量延时后,稳定性提高。
几乎不再出现问题。但是我还是觉得不对劲,用了两天时间终于找到了原因。因为这是公司的程序,所以不能贴源码。
我把其他程序都略去,只把出错的程序大概写一下。大家看看能找到问题吗?
  1. unsigned int ms_counter;
  2. void T0()
  3. {
  4. //定时器程序每100毫秒中断一次,程序略
  5. if (ms_counter<1000) ms_counter++;
  6. }
  7. void main(void)
  8. {
  9. //初始化定时器程序每100毫秒中断一次,程序略
  10. unsigned char tt;
  11. ms_counter=0;
  12. tt=0;//用tt控制只响一次
  13. while(1)
  14. {
  15. if (ms_counter<400)
  16. {
  17. if (tt==0)
  18. {
  19. tt=1;
  20. Sound_on();
  21. }
  22. }
  23. else
  24. {
  25. Sound_off();
  26. }
  27. //其他程序
  28. //。。。。。。
  29. }
  30. }
复制代码
高手们不要笑,菜鸟们坐好
问题出在ms_counter不到400时,程序提前执行了Sound_off();
原因分析:if (ms_counter<400)中的ms_counter是两字节的整型,而且在中断里有增一操作。
这就有一种错误的可能
if (ms_counter<400)??//被编译器翻译成以下语句
+0000007C:E9E0 LDI R30,0x90 Load immediate
+0000007D:E0F1 LDI R31,0x01 Load immediate
+0000007E:164E CP R4,R30 Compare
+0000007F:065F CPC R5,R31 Compare with carry
+00000080:F428 BRCC +0x05 Branch if carry cleared
在ms_counter==255时 R4是255 R5是0

CP R4,R30 ;这时R4是255
注意!如果在这两条语句中间产生了中断 ms_counter增一 以后 R4是0 R5是1
CPC R5,R31 ;这时R5是1

简单的说是由于在整型数增一进位的时候,又受到中断的影响。
本来正确值 0x00ff或0x0100(ms_counter),
实际错误值 0x01ff(ms_counter) 先判断低位时低位是FF,中断后判断高位时高位是01
ms_counter在255时被误认为511(0x01ff)导致提示音提前关闭。
这是一大类故障,由于中断造成的操作数更改。在其他的数据类型或编译器中也可能出现,虽然出现的机率不大,但影响是不可预知的,也是更容易忽视的。
哈哈!提醒一下没学过汇编的朋友。用C写一条语句,实际是几条汇編语句。在语句中间是有可能产生中断的。
if (ms_counter<400) //这是好几条汇编
ms_counter++; //这是好几条汇编
ms_counter=45; //这是好几条汇编



经验总结:
如果在中断程序中改变了多字节类型的变量,那么中断程序以外的程序中(主程序,子函数),读写前要关中断,读写后再开中断。
举一反三:
其他的数据类型也可能有这种影响。例如:长整型、浮点型。
上面的例子是中断里写,主程序中读。相反主程序写,中断里读也可能出错。

0

主题

0

好友

126

积分

初级会员

Rank: 2

金钱
1014 新币
贡献
0 点
威望
0 点
最后登录
2010-8-27
精华
0
积分
126
帖子
126
发表于 2009-11-3 23:40:57 |显示全部楼层
…………………………
回复

使用道具 举报

2

主题

0

好友

13

积分

初级会员

Rank: 2

金钱
125 新币
贡献
0 点
威望
0 点
最后登录
2009-11-10
精华
0
积分
13
帖子
13
发表于 2009-11-5 09:16:46 |显示全部楼层
问题一般都是在调试中解决发现的
回复

使用道具 举报

2

主题

0

好友

13

积分

初级会员

Rank: 2

金钱
125 新币
贡献
0 点
威望
0 点
最后登录
2009-11-10
精华
0
积分
13
帖子
13
发表于 2009-11-5 09:17:07 |显示全部楼层
楼主继续努力
回复

使用道具 举报

0

主题

0

好友

11

积分

初级会员

Rank: 2

金钱
100 新币
贡献
0 点
威望
0 点
最后登录
2009-11-21
精华
0
积分
11
帖子
11
发表于 2009-11-21 00:55:34 |显示全部楼层
说的很有道理
回复

使用道具 举报

0

主题

0

好友

86

积分

初级会员

Rank: 2

金钱
140 新币
贡献
0 点
威望
0 点
最后登录
2018-5-25
精华
0
积分
86
帖子
86
发表于 2018-5-16 15:53:41 |显示全部楼层
ugg outlet store
nike huarache shoes
polo ralph lauren
michael kors outlet store
nike outlet
burberry outlet store
louis vuitton outlet online
fitflop uk
christian louboutin sale
pandora jewelry store
nike outlet store
moncler coats
pandora charms
cheap oakley sunglasses
coach outlet online
vans outlet
kate spade handbags
nba jerseys wholesale
birkenstock uk
coach outlet store
cheap jordans for sale
coach outlet online
jordan shoes
coach outlet online
mulberry outlet uk
skechers outlet
uggs outlet
adidas yeezy boost
nike running shoes
gucci outlet
michael kors outlet store
oakley sunglasses wholesale
air max
birkenstock outlet online
canada goose sale
discount oakley sunglasses
valentino outlet
ralph lauren uk
coach outlet store online clearance
fitflop sandals
coach outlet online
nike outlet online
tory burch outlet store
canada goose
polo ralph lauren outlet
polo ralph lauren outlet online
moncler jackets
coach factorty outlet online
louis vuitton outlet online
coach outlet online
adidas outlet store
coach outlet online
adidas nmd r1
louboutin outlet
jordans
fitflops uk
ray ban sunglasses discount
cheap jordan shoes
coach outlet store online
birkenstock sandals
supra for sale
coach outlet online
mbt shoes sale
coach outlet online
supra for sale
pandora charms sale clearance
timberland boots
michael kors outlet online
cheap jordan shoes
coach factory outlet online
michael kors outlet clearance
michael kors outlet online
coach outlet store
canada goose parka
kate spade outlet online
coach outlet online
philipp plein outlet
harden vol 1
canada goose jackets
mlb jerseys cheap
kate spade outlet
pandora rings
pandora jewelry
burberry outlet canada
prada outlet online
polo ralph lauren outlet
ralph lauren
pandora outlet
ralph lauren outlet
toms outlet online
cheap ugg boots
mulberry uk
hermes outlet
coach factory outlet
ugg outlet store
red bottoms
moncler outlet online
michael kors canada
adidas campus shoes
kate spade outlet
clb20180517
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 申,请,会,员

手机版|Archiver|新势力科技 ( 鲁ICP备05002753号  

GMT+8, 2018-5-26 00:38

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部