Страница 9 из 9

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Пт фев 14, 2025 15:10:54
Jack_A
[uquote="Demiurg",url="/forum/viewtopic.php?p=4682568#p4682568"]В прерывании мы делаем минимум действий.[/uquote]
Так это практика хорошего программирования. Но иногда, чтоб бороться с трудностями, нужно их создать. :(
Я уже приводил, кажется, тут пример. Проектировался прибор для промышленного изготовления, как бы профессионалами. И этот цифровой! измеритель частоты вращения врал на единицы процентов! Делов-то: посчитать импульсы во временном окне, поделить одно на другое. "Будем вводить поправки" - решил их шеф. "Да вы что, уху, что ли, ели? В цифровом - поправки?" - говорю им. А у них в прерывании - и дин. индикация, и аналоговая "полоска", и кнопки. В общем, как говорил Рудик - "Одно сплошное телевидение прерывание". Тут уж просчёты вовсю.
По совету умного человека :) ужали прерывания раз в десять - и забыли об поправках. Прибор и эталонный частотомер - тютелька в тютельку.
СпойлерПоправки - это болезнь.
Делали мы АСК для контроля серьёзного изделия. Там в числе прочего с помощью ВК7-9 меряют сопротивление чего-то нелинейного. Естественно, цифровик показывает далеко не совсем то. "Вводи поправки" - говорит мне коллега, отвечавший за измериловку. "Не хрен лениться. Воспроиведите 'нутро' ВК7-9 на рассыпухе - измерительное напряжение, внутреннее сопртивление для этого режима." - возражаю. Поворчали,сделали. И забыли про поправки.
Им бы крестиком пометить -
И забыть про тот фарватер.
Ох и трудно жить на свете
Сомалийскому пирату. ©

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Сб фев 15, 2025 06:42:28
Вячеслав М.
Что то никто не сказал что регистр и так можно обнулить, и не влияя на флаги, а я этим постоянно пользуюсь: ldi Rd,0

Добавлено after 15 minutes 53 seconds:
Помню что в прерывании что то делал кроме установления флага, так это ещё в далёкие годы на 51 проце, это когда надо было на скорости 750 Kbd RS485 принимать и тут же передать пакет подготовленных данных, на лету, из компа запрос был и я не прерывая этого сеанса тут же передавал данные. Получалось что в запросе уже был ответ, это особенность чипа FT232 , буфер на приём и на передачу, хоть и полудуплекс. А на мегу когда перешёл уже смысла что то делать в прерывании не вижу, конечно кроме передачи в какой нибудь интерфейс подготовленного байта или приёма байта из интерфейса и положить его куда по указателю.

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Сб фев 15, 2025 10:29:46
ДядяВован
Здесь или в соседней теме был разговор про назначение "нулевым" одного из РОН.
Тогда обнулять, не цепляя флаги, получится любой регистр, в отличии от LDI.

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Сб фев 15, 2025 11:15:51
Jack_A
Можно и без "нулевого" регистра, LDSом. Регистры - вещь более дефицитная обычно, чем ОЗУ.

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Сб фев 15, 2025 12:01:16
shonty
Вячеслав М. писал(а):Что то никто не сказал что регистр и так можно обнулить, и не влияя на флаги
а смысл есть? проверка флага ставится после каких-л внятных действий, а не сразу после clr R16 например)
Jack_A писал(а):Можно и без "нулевого" регистра, LDSом
не совсем понятно, как lds-ом?

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Сб фев 15, 2025 12:25:24
ДядяВован
shonty писал(а): как lds-ом?
Видимо чтением ячейки ОЗУ с нулевым содержимым
Jack_A писал(а):без "нулевого" регистра, LDSом
LDS в два раза медленнее, а иногда скорость важна

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Сб фев 15, 2025 16:05:14
Jack_A
Ну если счёт на наносекунды, а регистров свободных - вагон, тогда да. :) :shock:
[uquote="shonty",url="/forum/viewtopic.php?p=4682828#p4682828"]а смысл есть? проверка флага ставится после каких-либо внятных действий, а не сразу после clr R16 например)[/uquote]
Теоретически можно представить. Если после каких-либо внятных действий требуется внятная реакция на результат этих действий, а для неё нужен обнулённый регистр и незатронутые флаги.

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Сб фев 15, 2025 20:06:12
Вячеслав М.
Самый простой пример это в прерывании, там бывает так чтобы в стеке ничего не сохранять, тот же статусный регистр, вот там ldi Rd,0 и пригодится, я например для прерываний регистры зарезервировал, и вообще стеком не пользуюсь, только конечно не нарочно, но эти игры со стеком не вдохновляют, значит есть системные ошибки когда стеком пользуешься в микроконтроллерах, через указатели передаю данные, не через стек.

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Вс фев 16, 2025 14:50:59
akl
Замечу. LDI работает только с R16...R31, а CLR со всеми.

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Вс фев 16, 2025 16:18:18
ДядяВован
Jack_A писал(а):Ну если счёт на наносекунды
Бывает и такое))
А ещё флэш "не резиновый", LDS в два раза больше места в памяти программ занимает.
Jack_A писал(а):регистров свободных - вагон
Бывает лучше выделить один регистр, т. к. нет вагона времени для выполнения алгоритма и вагона программной памяти.

Re: Вопрос по программированию задержки внутри прерывания

Добавлено: Вс фев 16, 2025 16:21:21
Starichok51
akl, и LDS со всеми.
а CLR изменяет флаги.