【问题标题】:Compiler ignoring if statements编译器忽略 if 语句
【发布时间】:2014-07-19 15:19:03
【问题描述】:

这可能是一个简单的问题,所以我希望你能指出我正确的方向。

我正在用 C 编写一个简单的 IO 程序。在我的程序中间,我有一个永远不会执行的 if 语句。当我试图在 if 语句中放置一个断点以使其自动删除并推过 if 语句块时,我意识到了这一点。更深入地研究这个问题,c 编译器不会为我的 if 语句创建任何汇编代码。以下是我的代码 sn-p 和汇编输出。

代码:

void sendData(unsigned int val1 ){
    P1OUT |= 1;
    if ((val1 & 0x8000 ) == 0x8000)
        wait(T1H);
    else
        wait(T1L);
    P1OUT &= ~(1);
}

*注意:是的,我确实有另一个名为 wait 的函数,它会延迟多个周期。

组装:

 13     P1OUT |= 1;
      sendData():
 c0ae:   D3D2 0021           BIS.B   #1,&Port_1_2_P1OUT
 18     P1OUT &= ~(1);
 c0b2:   C3D2 0021           BIC.B   #1,&Port_1_2_P1OUT

感谢您的帮助。

【问题讨论】:

  • 可能是共享软件编译器? “注册以获取if 声明”?
  • 编译器似乎正在优化那部分代码。编译器是否有非优化设置?
  • sendData 在 C 版本中,sendLedData 在 asm 版本中。你在看正确的功能吗?
  • 或许将代码发布到 wait() 函数会有所帮助?
  • 它正在工作。该优化级别引起了问题。谢谢大家。是的,将关卡一直切换到关闭有效。

标签: c if-statement assembly compiler-construction msp430


【解决方案1】:

等待可能是一个正在优化的繁忙循环。我相信有一个很好的等待函数的例子,它可以在示例代码中进行优化。

参见例如http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/18638.aspx

【讨论】:

    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2015-08-13
    • 2014-03-04
    • 1970-01-01
    相关资源
    最近更新 更多