编译器忽略 if 语句

标签 c if-statement assembly compiler-construction msp430

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

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

代码:

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

感谢您的帮助。

最佳答案

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

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

关于编译器忽略 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23944850/

相关文章:

c - 设置 tcp header 中的最大段大小

c - 当使用 if else 语句时,程序直接转到 else

c - int8 数组与标量的快速乘法

x86-64 - 如何编写 X86_64 _汇编器_?

assembly - 没有基址寄存器的 qword ptr [hexvalue] 是什么意思

c - 在英特尔 64 位机器上启用/禁用缓存 : CD bit always set?

用 C 语言创建空心菱形

c - 在c中的函数中分配struct的char成员

python - if语句,if string.count() = integer?

if-statement - 计算 Google 表格中值连续出现的次数