msp430超级想不懂的问题

[复制链接]
2739|7
 楼主| FS1360472174 发表于 2012-7-31 09:00 | 显示全部楼层 |阅读模式
为了简便说明问题,提取代码如下。
#include<msp430x14x.h>
#define  uchar unsigned char
uchar b=1;
uchar a=5;
uchar c=10;
void main()
{
while(b)
{
a--;
}
c--;
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
b=0;   
}
当上面while循环中语句为while(b)
{

}只有一个分号时,可以跳出while循环,但是当while(b)
{
a--;//或其他语句时
}跳不出while循环。
这是为什么,测试时两次都进入了中断。
申明:上述代码是简化后,表达出我的原来代码的意思。求指教
求指教
tianm 发表于 2012-7-31 09:20 | 显示全部楼层
你判断的是B
永远的不知 发表于 2012-7-31 15:21 | 显示全部楼层
1# FS1360472174
你仿真一下,看b是否变为了0;还有就是把优化等级调为最低,减少其他因素。
vivilzb1985 发表于 2012-8-1 17:46 | 显示全部楼层
那就单步调试看看b的值是否在中断的时候被清零了
李冬发 发表于 2012-8-1 19:21 | 显示全部楼层
变量b加个volatile修饰吧
 楼主| FS1360472174 发表于 2012-8-2 23:13 | 显示全部楼层
解决了,一种是将IAR版本改为debug,(降低优化程度)另外就是各位说的加个VOLATILE.在单片机C语言书上找到的答案,谢谢诸位了
colin111111 发表于 2012-8-4 19:29 | 显示全部楼层
方xin??????
peter_zheng 发表于 2012-8-11 13:01 | 显示全部楼层
这就是代码本身没有任何意义而被系统优化掉了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

56

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部