Встроенный, если (? :) не работает в _delay_us () - PullRequest
0 голосов
/ 05 февраля 2012

Когда я пытаюсь использовать _delay_us(condition ? value_if_true : value_if_false) в моей реализации 1-Wire, задержка не работает, и я не получаю ответ от своего устройства, но он прекрасно работает, когда я заменяю его на:

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

При отображении встроенного значения на ЖК-дисплее отображается правильное значение.

Так в чем же разница между этими двумя обозначениями? Как я могу сделать inline, если работа в _delay_us ()?

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

В документации четко сказано:

Чтобы эти функции работали должным образом, оптимизация компилятора должна быть включена, а время задержки должно быть выражением, которое является известной константой во время компиляции. Если эти требования не выполняются, результирующая задержка будет намного больше (и в основном непредсказуемой), и приложения, которые в противном случае не используют вычисления с плавающей запятой, будут испытывать сильное разрастание кода из-за процедур библиотеки с плавающей запятой, связанных с приложением.

0 голосов
/ 05 февраля 2012

Упс ... совершенно неосновные мысли, но оставляя их здесь, чтобы напомнить мне подумать перед публикацией.

вам нужно: состояние? _delay_us (value_if_true): _delay_us (value_if_false)

в основном тот же синтаксис, что и в операторе if

думаю

(условие)? (Оценить, было ли условие истинным) :( оценить, было ли условие ложным)

...