登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

Code visionAVR用的真不爽,碰到这样的问题,前辈们过来看看

作者:leech42 栏目:单片机
Code visionAVR用的真不爽,碰到这样的问题,前辈们过来看看
if条件语句中不能进行算术运算,一用就程序执行不进去,也不知是咋回事,大家有碰到过吗?
比如
(1)、if(a != 0)
       {
           if((a--) == 0)
           {
               a = 200;
               b = true;
           }
       }
(2)、if(a != 0)
       {
           a--;
           if(a == 0)
           {
               a = 200;
               b = true;
           }
       }
如上面的程序,(1)就进不了b=true那一段,而(2)就可以,但是我看编译好了后的汇编指令好像也是没什么错的。

还有就是我看到if((--a) == 0)这句的汇编指令是这样的
000092 944a          DEC  R4
000093 F419          BRNE _0x10
好像不大对吧???

走过路过的能帮忙我解决一下!!!!



2楼: >>参与讨论
zsmbj
是你的程序的问题啦!和Code visionAVR没关系。
a--是先执行比较然后再减,这样你的b=true就无论如何都不能执行了。这是对的。
假设a=1,则不会执行b=true,然后a--=0,这样连第一个if语句都不会进入了。所以更不会执行b=true了。

这样写就行了。
if(a != 0)
       {
           if((--a) == 0)
           {
               a = 200;
               b = true;
           }
       }

幸亏Code visionAVR没有进入这个循环,否则它可就错大了。呵呵!

3楼: >>参与讨论
leech42
呵呵,大意了,没注意,基本常识错误!
if((--a) == 0)编译出来是这样两条汇编指令
000092 944a          DEC  R4
000093 F419          BRNE _0x10
这两条的意思是不是就是当R4减1为0时则不跳?


参与讨论
昵称:
讨论内容:
 
 
相关帖子
如何获取I2C总线上多个设备的地址?
就C语言“类型匹配”问题再商榷
有人用过ATmanavr开发环境吗?
请教:  Winavr生成之COF文件用AVR studio4仿真时只显机器码
如何将一个int类型数组所有元素的高8位低8位交换?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号