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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

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

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

Сообщение Вячеслав М. »

Что то никто не сказал что регистр и так можно обнулить, и не влияя на флаги, а я этим постоянно пользуюсь: ldi Rd,0

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

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

Сообщение ДядяВован »

Здесь или в соседней теме был разговор про назначение "нулевым" одного из РОН.
Тогда обнулять, не цепляя флаги, получится любой регистр, в отличии от LDI.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Можно и без "нулевого" регистра, LDSом. Регистры - вещь более дефицитная обычно, чем ОЗУ.
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

Вячеслав М. писал(а):Что то никто не сказал что регистр и так можно обнулить, и не влияя на флаги
а смысл есть? проверка флага ставится после каких-л внятных действий, а не сразу после clr R16 например)
Jack_A писал(а):Можно и без "нулевого" регистра, LDSом
не совсем понятно, как lds-ом?
Реклама
Аватара пользователя
ДядяВован
Мучитель микросхем
Сообщения: 496
Зарегистрирован: Вс окт 25, 2020 22:13:25
Откуда: Смоленск

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

Сообщение ДядяВован »

shonty писал(а): как lds-ом?
Видимо чтением ячейки ОЗУ с нулевым содержимым
Jack_A писал(а):без "нулевого" регистра, LDSом
LDS в два раза медленнее, а иногда скорость важна
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Ну если счёт на наносекунды, а регистров свободных - вагон, тогда да. :) :shock:
[uquote="shonty",url="/forum/viewtopic.php?p=4682828#p4682828"]а смысл есть? проверка флага ставится после каких-либо внятных действий, а не сразу после clr R16 например)[/uquote]
Теоретически можно представить. Если после каких-либо внятных действий требуется внятная реакция на результат этих действий, а для неё нужен обнулённый регистр и незатронутые флаги.
Изображение
Вячеслав М.
Нашел транзистор. Понюхал.
Сообщения: 174
Зарегистрирован: Пн янв 13, 2025 15:24:02

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

Сообщение Вячеслав М. »

Самый простой пример это в прерывании, там бывает так чтобы в стеке ничего не сохранять, тот же статусный регистр, вот там ldi Rd,0 и пригодится, я например для прерываний регистры зарезервировал, и вообще стеком не пользуюсь, только конечно не нарочно, но эти игры со стеком не вдохновляют, значит есть системные ошибки когда стеком пользуешься в микроконтроллерах, через указатели передаю данные, не через стек.
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Замечу. LDI работает только с R16...R31, а CLR со всеми.
Аватара пользователя
ДядяВован
Мучитель микросхем
Сообщения: 496
Зарегистрирован: Вс окт 25, 2020 22:13:25
Откуда: Смоленск

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

Сообщение ДядяВован »

Jack_A писал(а):Ну если счёт на наносекунды
Бывает и такое))
А ещё флэш "не резиновый", LDS в два раза больше места в памяти программ занимает.
Jack_A писал(а):регистров свободных - вагон
Бывает лучше выделить один регистр, т. к. нет вагона времени для выполнения алгоритма и вагона программной памяти.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

akl, и LDS со всеми.
а CLR изменяет флаги.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ответить

Вернуться в «AVR»