Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: delay.h
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
demiurg_spb
MCU: Mega1281, Mega128, Mega64
F_CPU: 14745600
При попытке организовать паузу длинной в 24 NOP'а получаю косяк.
Это:
Код
NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();NOP();NOP();

не эквивалентно этому:
Код
_delay_us(1.628); // 24/14745600 = 1.628 us

Предлагаю альтернативу (основано на новых возможностях avrlibc (на модуле builtins.h))
Спасибо Анатолию!
MrYuran
А в чём косяк-то?
Скорее всего, оптимизатор пошелудил немного.
Посмотрите листинг.
demiurg_spb
Некогда пока смотреть (я удалил delay.h, чтоб не повадно было инклюдить).
Оптимизатор не может на это влиять, т.к. эти макросы _изначально_ были заточены на то, чтобы быть скомпилины с оптимизацией больше чем -o0.
А предложенный мной вариант не зависит от уровня оптимизации (ИМХО).

Эта ситуёвина была замечена ещё больше года назад на позапрошлой версии WinAVR и с тех пор не менялась.
Я тогда писал ногодрыгательный интерфейс для связи с драйвером LCD на KS108 (формирование E строба).
SysRq
Ээ.. а где в WinAVR именно _delay_ns? Вижу us, ms...
demiurg_spb
Это я ошибся, конечно было _delay_us(1.628); (я поправил в первом сообщении)
SysRq
В AVRStudio, ATMega128 (симулятор 1 версии) @ 14.7456MHz, что 24 nop'а, что _delay_us(1.628), - выполняются 24 цикла (вот только время симулятор выдает не аккуратно, жетско округляет).
Да и в железе ничего такого неадекватного не замечал, не более чем ±1 цикл ошибка из-за округления чисел где-то. Хм.
demiurg_spb
Да, я пробовал в пустом проекте - там всё чётко.
Код
_delay_us(1.628);
такты
1          dcf2:    88 e0       ldi    r24, 0x08; 8
1          dcf4:    8a 95       dec    r24
2(1)       dcf6:    f1 f7      brne    .-4; 0xdcf4 <main+0x2>
всего:24
А в большом проекте - что-то не так. Позже попробую выяснить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.