原创 一条语句引发的惨痛教训

2013-6-25 14:38 1827 14 22 分类: 消费电子

也许学习效率也是有周期性的,前段时间学习STM32感觉比较快,也很顺手,可是从上星期学中断,不知道怎么回事,像是中了魔一样,就是不能理解,折腾了几天,总算是折腾出来了。但是今天我的一个小的语法问题,却让我很无语。

本来我的设计是:

KEY1(PC10)控制LED1(PB1);

KEY2(PC11)控制LED2(PB12);

KEY3(PC10)控制LED3(PB13);

KEY4(PB3)控制LED4(PB14);

前面三个都能控制,也都能反映,但是就是LED4就是不能控制,于是乎想到可能是JTAG的原因影响到了中断(PB3没有进入中断),大力查找,各种资料的看,验证,但是最后的结果是,PB3进入了中断;那会不会是硬件有问题,又是一番大力的验证,结果是硬件也没问题,结果也没问题;最后就是在仔细的查一遍程序结构,最后发现一条语句的不一样:LED4!=LED4;而其他的是:LED1=!LED1; LED2=!LED2; LED3=!LED3;很明显程序出了问题。

因为:

LED1=!LED1;

LED2=!LED2;

LED3=!LED3;

它们等价于

 

LED1=~LED1;

LED2=~LED2;

LED3=~LED3;

也就是每次LED都是取反。

 

而,LED4!=LED4   等价于  LED4=LED4 +!LED4 它是永远等于1的,所以它永远只有一种状态,永远也都是点不亮的。

 
PARTNER CONTENT

文章评论8条评论)

登录后参与讨论

用户1080093 2013-8-3 07:53

没看明白“LED4!=LED4 等价于 LED4=LED4 +!LED4”

用户1678296 2013-7-13 23:23

!=是逻辑判断语句吧,只能返回真或假。

用户1588142 2013-6-26 12:29

学习了!

用户1584489 2013-6-25 14:43

谢谢楼上几位的建议,呵呵,我是初学者,所以会犯一些低级错误,这个我也是意识到了,在这写出来,主要是想跟大家分享一下这些经历,给其他像我一样的初学者一个参考。

用户840986 2013-6-24 15:58

如此错误只适合于闷在肚子里,不好意思公开吧。

用户1167151 2013-6-24 13:59

LED4!=LED4 是一个值永远为假的判断,不做任何操作。好的编译器应当给出警告,因为此判断不在if语句中。

用户1602177 2013-6-24 10:49

多谢分享~

用户1406868 2013-6-24 08:43

LED4!=LED4 等价于 LED4=LED4 !LED4这样的语句怎么执行啊。即使LED=0,等价出来就是 0!=0,或者 0=01这样的逻辑能够执行吗?我觉得不仅语句写错,而且分析都是错的。
相关推荐阅读
用户1584489 2014-08-27 20:37
凤舞天讲msOS的OS
我们先讲OS部分,大家知道,系统启动之后,是从复位开始的 那么复位对应的栈,就是MSP栈 Cortex系列,存在两个栈 MSP和PSP 之所以分为两个栈,是为了给OS用的 注意,是专门...
用户1584489 2014-06-10 12:04
国产嵌入式微系统msOS成型记之一:何为嵌入式微系统
嵌入式微系统,顾名思义就是嵌入式微型操作系统,然而操作系统一词在嵌入式行业里往往专指uC/OS之类的带任务切换的系统,所以为了有别于这个专用名词,往往用开发平台一词来代替,所以嵌入式...
用户1584489 2014-04-10 10:53
嵌入式微平台(msOS)
          ...
用户1584489 2014-04-10 10:01
嵌入式微平台(msOS)简介
嵌入式微系统(msOS)是深圳市雨滴科技有限公司的王绍伟先生(网名:凤舞天)在2013年基于早期开发的“实用单片机系统,标识MS”,经过多年的MTK手机开发经验,结合自己具体的项目应用而升级推出的...
用户1584489 2014-04-10 09:43
评论:@雨滴-凤舞天 博客中提到的“阴阳五行”
老大的文章及其有道理,转一个...
用户1584489 2014-03-10 10:10
关于msPLC/msOS相关资料下载
 随着msOS的不断完善,源代码、相关文档和视频的完成,只是把资料放在群共享不能方便更多的人下载学习,所以现在把相关资料都放在了网盘里面,有需要的可以进到网盘下载。 360云盘:http://...
我要评论
8
14
关闭 站长推荐上一条 /3 下一条