Например TDA7294

Форум РадиоКот • Просмотр темы - Вопрос по программированию задержки внутри прерывания
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт ноя 11, 2025 08:06:49

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 171 ]    , , 3, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Пн янв 13, 2025 13:30:39 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
во, к примеру, как у меня сделана подстановка адреса возврата в прерывании для таймера1:
Starichok51, спасибо.
Работает чётко..

А то не понимал как правильно из прерывания на адрес выходить.. :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Пн янв 13, 2025 14:23:55 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18867
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
таким образом можно выходить в любое место программного цикла, не обязательно в самое начало, как сделано у меня.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Пн янв 13, 2025 14:32:01 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1484
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15249
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
И не только в пребываниях - любая подпрограмма может точно так же менять точку возврата.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Пн янв 13, 2025 14:58:48 
Друг Кота

Карма: 64
Рейтинг сообщений: 1017
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4362
Откуда: Ижевск
Рейтинг сообщения: 0
Команды IJMP и ICALL прекрасно работают.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Пн янв 13, 2025 16:28:19 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1484
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15249
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Это вызов подпрограмм, а речь шла об условном возврате с погашением прерывания (или без оного, что много реже).
Т. Е. Сначала вход в подпрограмму из исходной точки, затем переход к другому модулю и по его завершении возврат в исходную.
Основное назначение - разрешение работы прерываний после исполнения кратковременной части обработчика.
При том, что "длинная" часть обработчика прерывания продолжает выполняться до его окончательного завершения как обычная, подпрограмма. Плюс может быть несколько таких "длинных хвостов" согласно необходимым условиям.
Собственно одна из разновидностей построения программ...
(помимо АВРок и другие семейства существуют - смотрим тот же I8080/Z80, ПИКушки, 51е).
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 04:12:57 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 1
во, к примеру, как у меня сделана подстановка адреса возврата в прерывании для таймера1:
Код:
;--- Таймер1 ---
ldi R16, low(RAMEND)
out SPL, R16
ldi R16, low(main)
push R16
ldi R16, high(main)
push R16
reti

перезаписываю вершину стека и пишу в стек адрес возврата.

Баловство. Правильная организация - разбить основной цикл, чтобы с запасом упаковаться в системный тик. 1 мс, 10 мс. Чтобы итерация основного цикла гарантированно с запасом выполнялась за системный тик.
А игры со стеком это баловство. В диспетчерах, ртосах ещё пойдет. Не более.
Как только настал момент игры со стеком. Значит, ты что то неправильно делаешь в организации программы.
Это мое мнение.
В свое время я тоже задавался вопросом. А как чё то сделать и вернуться. Потом понял. Это вопрос чайника. Правильная организация программы.
Где то валяется самописное диспетчер, ртоска. И там игры со стеком. Не пригодилось


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 07:21:18 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Ну это не только в программировании. Практически во всём и у любого метода есть целесообразность и ограничения.

Тут суть в наличии вариантов решения под конкретные задачи и условия.

Demiurg писал(а):
А игры со стеком это баловство
С позицией хорошо/плохо или добро/зло тоже далеко не уехать))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 08:43:57 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 0
Ну это не только в программировании. Практически во всём и у любого метода есть целесообразность и ограничения.

Тут суть в наличии вариантов решения под конкретные задачи и условия.

Demiurg писал(а):
А игры со стеком это баловство
С позицией хорошо/плохо или добро/зло тоже далеко не уехать))

Нет категории хорошо плохо. Есть единственная целесообразность. И инженерный подход. Постараться учесть все моменты. Чтобы твое устройство не было опасным.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 09:22:55 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1484
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15249
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Не так уж и "бесполезный" прием.
8)
К примеру "псевдопараллельный" Обработчик динамической индикации/клавиатуры на пребывания от таймера...
Вполне жизнеспособной для применения.
Да много ещё различных вариантов. Особо для МК без возможности программно изменять приоритет прерываний.
:roll:
Что же касается "абсолютной безопасности/безотказности/надёжности" самоделки - это уже отдельная тема, включающей помимо программной начинки множество других факторов.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 09:45:28 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18867
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
Demiurg, это моя программа термометра на DS18B20, и системный тик в ней 1 секунда.
прочитал температуру, вывел на экран, запустил преобразование и "топчусь" на месте и жду следующего прерывания.
и твоё мнение о "неправильности" не правильное.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 10:28:39 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Demiurg, в моём случае внешнее прерывание (а оно не циклично) просто останавливает таймер. И после остановки уже нет смысла возвращаться к продолжению, а именно из прерывания нужно сделать прыжок и выполнять совсем другие действия.

Правда пришлось ввести переинициализацию индикатора на max7219 (иногда сбои были)
Но повторюсь, в данном случае мне проще сделать прыжок и переписать часть с "чистого листа", чем возвращаться в недоделанное, потом в основной цикл, который забивать проверками флагов и условий.. А программа то всего 0,9 кб ))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 11:33:59 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1484
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15249
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Отошли от темы топикстартера!
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 19:40:06 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 0
shonty, не верный и неправильный подход. Если вы уже подумали прыгнуть со стеком. Это уже неправильный подход. Это хак. Но не решение. Решение осознать проблему и решить её. Без прыжков по стеку.
Вывернись наизнанку. Но реши без прыжков. Это будет правильно. Игры со стеком прыжки для диспетчеров и ртос.

Добавлено after 3 minutes 51 second:
Поясню. Ты срываешь стек. И ломаешь всю предыдущую работу МК. Да, тебе хочется начать все сначала. А кто тебе мешает? Поставил программный таймер. Не нравится, начинай сначала. Кто мешает?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 20:07:34 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
8-bit Instruction Set Rev. 0856H–AVR–07/09

Читаем например инструкцию RET:
Цитата:
Returns from subroutine. The return address is loaded from the STACK. The Stack Pointer uses a pre-increment scheme during RET.
Цитата:
Возвращается из подпрограммы. Адрес возврата загружается из СТЕКА. Указатель стека использует схему предварительного приращения во время RET.


или например инструкцию RETI:
Цитата:
Returns from interrupt. The return address is loaded from the STACK and the Global Interrupt Flag is set.
Цитата:
Возврат из прерывания. Адрес возврата загружается из СТЕКА и устанавливается флаг глобального прерывания.


Мы постоянно используем стёк, не ведая об этом и под другим соусом.

Demiurg, кроме как:
Demiurg писал(а):
shonty, не верный и неправильный подход. Если вы уже подумали прыгнуть со стеком. Это уже неправильный подход. Это хак. Но не решение. Решение осознать проблему и решить её. Без прыжков по стеку.
конкретно по коду Starichok51-ка есть что возразить?

Что там "сломалось"?

Добавлено after 1 minute 50 seconds:
А пока вы своими сообщениями лишь пытаетесь меня загипнотизировать :)))

Добавлено after 2 minutes 23 seconds:
shonty не совсем удачный объект для гипноза))
А вот аргументы с удовольствием почитаю))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 20:22:46 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18867
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 1
Медали: 1
Лучший человек Форума 2017 (1)
в этом моем коде на программный цикл тратится несколько миллисекунд. и потом нужно ждать, когда закончится преобразование в термометре.
а время повтора цикла задано таймером с периодом 1 секунда, когда преобразование заведомо закончится.
скажу даже больше - я при этом даже не "срываю" стек, он и так уже находится на своей вершине, и операция загрузки вершины стека в моем коде даже лишняя.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 20:24:14 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 0
Зачем мне эта информация?! Я на ассемблере несколько лет сидел. Равнялся на инженера AVR. Шел следом.


Последний раз редактировалось Demiurg Вт янв 14, 2025 20:26:17, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 20:25:08 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1484
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15249
Откуда: ДОНЕЦК
Рейтинг сообщения: 1
Скорее имелось ввиду, что произвольные операции со стеком требуют особого внимания при их организации.
Да и делать такие фокусы с достаточной уверенностью можно только под ассемблером, где главный контроль за всеми элементами программы лежит на авторе данной программы.
В ЯВУ сие крайне не рекомендованный приём.
8)
На сегодня время выполнения команд (быстродействие МК) многие вопросы снимает. Это раньше 1микросекунда на команду ограничения жестко накладывала.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 20:31:27 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 0
Да. Игры со стеком опасны. Ты должен четко понимать. Что ты делаешь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 20:36:52 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18867
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 1
Медали: 1
Лучший человек Форума 2017 (1)
конечно, я бы мог сделать "тупо" по Demiurg-у : создать аппаратный таймер, допустим по 4 мс и потом по программному счетчику ждать 250 прерываний таймера, чтобы получить 1 секунду, и затем перейти на полный цикл. а после окончания цикла вернуться на ожидание 250 прерываний таймера.
а игры со стеком опасны только для тех, кто ни хера не понимает в стеке.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт янв 14, 2025 20:39:21 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
BOB51 писал(а):
Да и делать такие фокусы с достаточной уверенностью можно только под ассемблером, где главный контроль за всеми элементами программы лежит на авторе данной программы.
Вот, кстати, здравая мысль.. :beer:

Понятно, что программируя на библиотеках, можно уехать на другой адрес и там заблудиться.. :)))

Суть асм-а в максимальном контроле ))


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 171 ]    , , 3, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y