Поможет ли assembler или я просто CodevisionAVR готовить не умею?

программирование assembler микроконтроллеры avr CodevisionAVR

Условия: CodevisionAVR 2.0.5, оптимизация: speed, ATMega16 на 8МГц, отправляем контроллер в Idle и ждем срабатывания прерывания INT0.
Задача: после срабатывания прерывания вывести в PORTB определенную константу за минимальное время (желательно меньше 1 мкс).
Код типа такого дает задержку в ~5 мкс (это ж почти 40 тактов!):
===================================
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Pusto
}
...
idle();
PORTB=0xFF;
===================================

Такого тоже:
===================================
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
PORTB=0xFF;
}
...
idle();
===================================

Неужто, компилятор генерирует такой громоздкий код? Стоит ли мне только ради этого тратить время на изучение ассемблера, или я все равно в необходимых 8 тактов не уложусь?
Ответы:
Так в чём проблема то? Открой IDA получившуюся хрень бина да посмотри что там на асме, может просто баг который можно обойти.
P.S. Оптимизации компилятора включать в таких задачах НЕЛЬЗЯ.


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.