内联if(?:)在_delay_us()中不起作用

时间:2012-02-04 20:56:44

标签: c microcontroller avr avr-gcc atmega

当我尝试在我的1-Wire实现中使用_delay_us(condition ? value_if_true : value_if_false)时,延迟不起作用,我的设备没有得到任何答案,但是当我用它替换它时,它可以正常工作:

if(condition) _delay_us(value_if_true);
else _delay_us(value_if_false);

当我在lcd上显示内联时,它显示正确的值。

那么这两个符号之间的区别是什么? 如果在_delay_us()中工作,我该如何进行内联?

2 个答案:

答案 0 :(得分:3)

documentation清楚地说:

  

为了使这些函数按预期工作,必须启用编译器优化,延迟时间必须是编译时已知常量的表达式。如果不满足这些要求,产生的延迟将会更长(并且基本上是不可预测的),否则不使用浮点计算的应用程序将通过链接到应用程序的浮点库例程经历严重的代码膨胀。

答案 1 :(得分:0)

哎呀......完全偏离基础的想法,但留在这里提醒我在发布前思考。

你需要:条件? _delay_us(value_if_true):_ delay_us(value_if_false)

与if语句基本相同的语法

想想

(条件)?(评估条件是否为真):(评估条件是否为假)