近期做一个项目,之前调试的挺好的,结果发布版(最高优化)测试组反应输出结果不对
回来研究了半天,发现IAR把我中间的计算过程全部省略了。。。
代码如下:
extern uint8_t Output;
static void TestFunc(uint8_t uData1, uint8_t uData2)
{
uint16_t wTemp;
wTemp = MAKEWORD(uData1,uData2);
wTemp = (wTemp>>4) & 0x1FF;
Output = (uint8_t)(wTemp*50/0x150);
if (uData1 & 0x20)
Output |= 0x80;}
编译后的代码为
248 TestFunc(uTestData1, uTestData2);
\ 00000080 1C48 LDR.N R0,??main_0+0xC
\ 00000082 0021 MOVS R1,#+0
\ 00000084 0170 STRB R1,[R0, #+0]
249
等于是中间的计算步骤全部给省略了,只有最后红色的字被编译了,这样结果肯定不对啊
请高手们给看看,这到底是怎么回事啊? |