打印
[STM8]

stm8s 用IAR编程,请问这个语句为何被忽略而不是出错

[复制链接]
479|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanghqi|  楼主 | 2021-5-9 19:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

unsigned char IR_DataShit;
unsigned char IR_data;
if(~IR_DataShit== IR_data)
{...;}
以上的语句是红外解码部分,在KEIL和义隆EUIDE及STVD均能编译执行,但在IAR中,却被忽略跳过,也不提示出错,为什么,但改为以下就可以了
unsigned char IR_DataShit;
unsigned char IR_data;
unsigned char IR_T;
IR_T =~IR_DataShit;                                      
if(IR_T == IR_data)
{...;}

使用特权

评论回复
沙发
lizye| | 2021-5-9 19:52 | 只看该作者
难道IAR如此不好用吗?

使用特权

评论回复
板凳
zhanghqi|  楼主 | 2021-5-9 19:56 | 只看该作者
if(~IR_DataShit== IR_data)这个格式,用IAR编,最简单的程式也不通过。

使用特权

评论回复
地板
huangchui| | 2021-5-9 19:58 | 只看该作者
应该有warning的,看看warning的提示呗。

使用特权

评论回复
5
zhanghqi|  楼主 | 2021-5-9 20:01 | 只看该作者
加个括号试试看if((~IR_DataShit)== IR_data)

使用特权

评论回复
6
zhanghqi|  楼主 | 2021-5-9 20:03 | 只看该作者
没有任何提示,加括号也不行.

使用特权

评论回复
7
yszong| | 2021-5-9 20:05 | 只看该作者
优先级的问题吗?优化了?

使用特权

评论回复
8
zhanghqi|  楼主 | 2021-5-9 20:07 | 只看该作者
不是优先级问题,反正
if((~a)==b)
{...;}
竟然没有编译,完全透明。

使用特权

评论回复
9
zchong| | 2021-5-9 20:09 | 只看该作者
忽略跳过是啥意思?优先级搞不清的情况下尽量用括号。

使用特权

评论回复
10
pengf| | 2021-5-9 20:10 | 只看该作者
因为该if语句永远为假,编译器直接忽视

使用特权

评论回复
11
supernan| | 2021-5-9 20:12 | 只看该作者
至于为什么永远为假,百度一下有关整型提升的知识

使用特权

评论回复
12
wyjie| | 2021-5-9 20:13 | 只看该作者
同楼上,楼主应该先怀疑是不是自己语句有问题,if是没有执行,还是执行结果为真。

使用特权

评论回复
13
shimx| | 2021-5-9 20:15 | 只看该作者
if( IR_data == ~IR_DataShit)  这样试试行不?

使用特权

评论回复
14
wuhany| | 2021-5-9 20:22 | 只看该作者
只不过我把取反加了括号,也不可以,直接跳过

使用特权

评论回复
15
liliang9554| | 2021-5-9 20:25 | 只看该作者
我用STVD测试和IAR是一样的结果呢

使用特权

评论回复
16
zhanghqi|  楼主 | 2021-5-9 20:27 | 只看该作者
~IR_DataShit 是有符号数,并且自动提升为寄存器宽度

使用特权

评论回复
17
jlyuan| | 2021-5-9 20:29 | 只看该作者
最终做的是数学 运算。

使用特权

评论回复
18
chuxh| | 2021-5-9 20:32 | 只看该作者
if((U08)~IR_DataShit== IR_data)那么才会按数字运算

使用特权

评论回复
19
happy_10| | 2021-5-9 20:33 | 只看该作者
如果是C51,那么就会计算

使用特权

评论回复
20
zhanghqi|  楼主 | 2021-5-9 20:36 | 只看该作者

唉,还是没有什么结果,算了,多谢大家啦

使用特权

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

本版积分规则

852

主题

11757

帖子

5

粉丝