佚名通过本文主要向大家介绍了iar单步执行,iar,iar使用教程,iar下载,iar安装教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: IAR中为什么有些执行语句会直接跳过
描述:
uint16 shortaddr;
shortaddr = pkt->srcAddr.addr.shortAddr;
xx = shortaddr/256;
yy = shortaddr%256;
为啥我这样不行,警告说xx,yy只设了没有用到
我调试了一下,能运行到shortaddr那行,运行完了直接跳过xx,yy那两行,有哪位大神告诉我一下是什么情况吗?感激不尽啊
解决方案1:
你用两个局部变量,又不使用,骗过编译器,又有什么用,欺骗编译器,实际就是欺骗自己 解决方案5:
描述:
IAR
uint8 xx,yy;uint16 shortaddr;
shortaddr = pkt->srcAddr.addr.shortAddr;
xx = shortaddr/256;
yy = shortaddr%256;
为啥我这样不行,警告说xx,yy只设了没有用到
我调试了一下,能运行到shortaddr那行,运行完了直接跳过xx,yy那两行,有哪位大神告诉我一下是什么情况吗?感激不尽啊
解决方案1:
把优化等级调成最低,然后最后加上对XX,YY的引用,比如:xx=xx;yy=yy;这样可以防止XX,YY被优化掉。
解决方案2:定义为变量类型即可
解决方案3:编译时直接去除了不会被调用的语句
解决方案4:你用两个局部变量,又不使用,骗过编译器,又有什么用,欺骗编译器,实际就是欺骗自己 解决方案5:
没什么大问题
xx = shortaddr/256;
yy = shortaddr%256;
你只是赋值,但是这两个值没有使用到
你如果再来一个
zz=xx+yy;
那就不会这样警告了
是没用到啊,xx yy 赋值以后就没用了,所以编译器就给优化掉了
随便再加个语句,比如 shortaddr = xx * 256 + yy;