Цитата Сообщение от jamper Посмотреть сообщение
Вот это очень спорное высказывание.
Вызов прерываний из другого прерывания допускается в случае крайней необходимости, например в одном прерывании вы выводите значение на индикатор и в это же время приходит импульс формирующий измерительный интервал...
За индикацию по прерыванию нас в институте цитирую:
"Увижу - буду бить. Сильно, но аккуратно" (с) один хороший майор.

Пользователь с временем реакции 0.2 секунды не помрет, если получит индикацию на 10-50 миллисекунд позже. А чтобы символ не потерялся - нужно программировать так, чтобы после возврата из прерывания все сохранилось. Например хранить индекс сканируемого символа и выводимое значение индикатора целиком в памяти.

Прерывание, в отличие от основной программы, строится в расчете на непрерываемость - потому что памяти у нас мало, процессор слабенький - не до жиру.

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

Конечно, если "по фен-шую", то в прерываниях должны только флаги выставляться, а по этим флагам основной цикл подпрограммы вызвать, разбираясь - кому времени побольше дать, а кому не очень. С флагами "меня после входа дольше чем на столько-то не прерывать" (чтобы протокол соблюсти например). Отправлять контроллер "спать", если ничего не делается. Чтобы истинная многозадачность была.
"Когда надо дать всем поровну, часто и помногу" (с) тот же самый майор.
Но это в больших проектах и/или на ЯВУ с поддержкой этой самой многозадачности компилятором.

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

Цитата Сообщение от jamper Посмотреть сообщение
А вот делать задержки внутри обработчика прерывания есть наипервейшее зло, само название - "прерывание" говорит о том что прерывается основной (читай самый важный) процесс, а вы в нем задержку...
У меня совершенно противоположный подход. Все самое важное и требующее непрерывности, непременно полной обработки - по прерываниям, callback ам от прерываний, дополнительным процессам (когда надо - и с повышенным приоритетом).
А основной процесс занимается обработкой ввода пользователя, индикацией. Поэтому, если получит управление чуть попозже - ничего страшного не случится.
Да и сделать только основной процесс безопасно прерываемым гораздо проще, чем городить эту самую "реентрабельность" везде и всюду. Экономит и время написания и отладки, и код и оперативную память.

Цитата Сообщение от jamper Посмотреть сообщение
2. есть такая прога VMLab 3.15 заточена как раз под АВРки, проста как 7 коп. и позволяет моделировать вх.сигналы.
ИМХО протеус слишком перегружен для любителей.
Перегружен - это P-CAD PC logs 1988-го года выпуска и Multisim начала 2000-х.
А Протеус прост как тапок. Главное накидать цифровых элементов, а не аналоговых - и вперед.
VMLab, при всей его навороченности и сложности всего-лишь отладчик.
Proteus отличается от Microcap или там EWB только тем, что контроллеры моделировать умеет. Поэтому после его освоения получится не потеряться и в них и хотя бы понимать "куда копать" в других программах подобного класса.

Хотя, может у меня такое мнение, потому что мой любимый AvrCo сам себе VMLab - есть в нем и индикатор ЖК, и семисегментные индикаторы, и эмулятор терминала для UART, и на АЦП можно подавать всякие загогулины, да много чего еще.

Цитата Сообщение от jamper Посмотреть сообщение
3. если желаешь и дальше программировать - тогда меняй стиль, использование абсолютных значений и имен регистров по умолчанию прямой путь к запутыванию себя и тех кто потом будет пытаться помогать запустить софтину.
Согласен. Однако просто так самому дисциплинировать себя сложно.
Лучше написать что-нибудь зубодробительное без комментариев.
А потом при попытке разобраться в написанном в целях дополнения или модификации - плюнуть и переписать "как надо" уже заново, с правильными именами и структурой данных.
Когда наступишь на грабли сам, да еще несколько раз - набитая шишка не даст лениться.

Цитата Сообщение от ZMIY
Я так решил, что пока эту прогу не допишу, никаких Визуал Бейсиков , т.е. программ автоматизирующих работу и т.д. Цель - именно мозг раскачать. А уже потом с просветлённым разумом можно подбирать более удобную программу.
Пожелаю удачи. Наверное так и надо.
А я так и не добил свой крупный проект на астме.
Может я и ленивый. Но когда написал его же за полторы недели на Паскале, и еще за месяц отладил до состояния "комар носа не подточит", после того как полгода мурыжил его на ассемблере - был счастлив.

Я наверное нестандартные велосипеды изобретаю.
Нормальные люди "ресетят" контроллер переходом по нулевому адресу. А я, если есть watchdog - вешаю контроллер, точно зная, что watchdog все сделает сам.