【发布时间】:2012-02-04 20:56:44
【问题描述】:
当我尝试在我的 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 上显示 inline if 值时,它会显示正确的值。
那么这两种符号有什么区别呢? 如果在 _delay_us() 中工作,我如何进行内联?
【问题讨论】:
-
什么是
_delay_us?是宏吗?我会尝试_delay_us((condition ? value_if_true : value_if_false)) -
我会专注于 value_if_true/false 并且我宁愿把
_delay_us((condition) ? (value_if_true) : (value_if_false))给你省去任何麻烦! -
我猜 _delay_us() 是编译器内在的。这些东西通常需要一个数字文字,因为编译器会识别它并将其直接转换为为您提供延迟所需的正确指令数。所以它通常必须是一个数字字面量值,或者编译器知道它的值的其他常量。
-
如果是编译器问题,编译器会发出警告/错误。 b3niup 说延迟不起作用所以我猜这里的问题是在运行时
-
在你的源文件上运行 avr-gcc -S,它会输出包含线索的程序集。
标签: c microcontroller avr avr-gcc atmega