_delay_us где-то работает...где-то - нет!
- Войдите на сайт для отправки комментариев
Ср, 20/06/2018 - 16:43
Вот кусочек кода
for(int i=0; i<Dist_Acceleration; i++) { Start_Speed=Start_Speed-accelerationByStep; PORTB |= (1<<STEP_PIN); delayMicroseconds(IMPULS_TIME);//и ждем длительность импульса и по истечении PORTB &= ~(1<<STEP_PIN); delayMicroseconds(Start_Speed);//Выдерживаем паузу между импульсами }
Если delayMicroseconds заменить на _delay_us, то в одной строке это работает, а во второй нет. Компилятор выдает ошибку.
IMPULS_TIME это целое число, которое задано дифайном, а Start_Speed это целое число, которое вычисляется программой до применения в цикле.
Компилятор что-то объясняет, но я его не понимаю..... Подскажите, плиз.
Неправильно написал. Надо так :
MPULS_TIME это целое число, которое задано дифайном, а Start_Speed это целое число, которое вычисляется по ходу цикла. Но также не работает, и если Start_Speed вычислено до исполнения цикла, и в ходе цикла не изменяется.
А вот чего говорит компилятор:
_delay_us требует константу для рассчета задержки при компиляции. То есть, туда должно быть подставлено число заранее. До компиляции, а не в процессе выполнения программы.
https://myrobot.ru/forum/topic.php?forum=2&topic=511&postid=1355862983#1...
Jeka_M, спасибо!
А нахрена тогда нужен этот _delay_us, который имеет такие ограничения, когда есть delayMicroseconds, который этих ограничений не имеет?
А нахрена тогда нужен этот _delay_us, который имеет такие ограничения, когда есть delayMicroseconds, который этих ограничений не имеет?
подозреваю, что памяти они занимают сильно по разному
Ок, проверю. Спасибо.
P.S. По быстренькому проверил.
В исходной программе используется delayMicroseconds. Результат компиляции 584 байта (57%).
В трех строках заменил delayMicroseconds на _delay_ms. Результат - 602 байт (58%).
delayMicroseconds надо менять на _delay_us, IMHO
Ой, затупил немного. Но, теперь при замене результат остается без изменений, 584 байта в первом случае, и 584 байта во втором.
Ой, затупил немного. Но, теперь при замене результат остается без изменений, 584 байта в первом случае, и 584 байта во втором.
ну значит оптимизация работает :)