打印
[STM32F1]

IAR的优化,把中间过程全给优化没了,导致结果完全不对,请高手给看看

[复制链接]
1420|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xfiori|  楼主 | 2013-12-20 11:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IAR, TE, ST, ui, TEST
近期做一个项目,之前调试的挺好的,结果发布版(最高优化)测试组反应输出结果不对

回来研究了半天,发现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         

等于是中间的计算步骤全部给省略了,只有最后红色的字被编译了,这样结果肯定不对啊

请高手们给看看,这到底是怎么回事啊?
沙发
wx85105157| | 2013-12-20 12:57 | 只看该作者
用volatile关键字防止变量被编译器优化

使用特权

评论回复
板凳
xfiori|  楼主 | 2013-12-20 14:49 | 只看该作者
这里其实不是变量被优化了啊,而是对Output变量的整个赋值过程都被省略了。。。。

使用特权

评论回复
地板
wx85105157| | 2013-12-20 16:34 | 只看该作者
加上编译看看会怎样啊

使用特权

评论回复
5
duanks| | 2013-12-20 18:10 | 只看该作者
第一行加__IO

使用特权

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

本版积分规则

3

主题

13

帖子

0

粉丝