Например TDA7294

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

Текущее время: Ср фев 18, 2026 11:34:21

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


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



Начать новую тему Ответить на тему  [ Сообщений: 48 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вс окт 28, 2012 18:48:52 
Друг Кота
Аватар пользователя

Карма: 77
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7518
Рейтинг сообщения: 0
А отчего бы просто не сбросить I-флаг и не вызвать функцию?

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вс окт 28, 2012 18:53:40 
Поставщик валерьянки для Кота
Аватар пользователя

Зарегистрирован: Пт апр 24, 2009 11:39:16
Сообщений: 2064
Откуда: г.Оренбург
Рейтинг сообщения: 0
Вырубить прерывания и из обработчика вызвать?)

_________________
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вс окт 28, 2012 18:55:36 
Друг Кота
Аватар пользователя

Карма: 77
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7518
Рейтинг сообщения: 0
Э-э-э... Пардон, таки врубить прерывания. Я ошибся. Не сбросить I, а поставить.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вс окт 28, 2012 19:30:13 
Поставщик валерьянки для Кота
Аватар пользователя

Зарегистрирован: Пт апр 24, 2009 11:39:16
Сообщений: 2064
Откуда: г.Оренбург
Рейтинг сообщения: 0
То есть, врубить и функцию? хм...можно попробовать) или функцию и врубить?

_________________
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вс окт 28, 2012 20:14:10 
Друг Кота

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Сб мар 07, 2009 20:44:36
Сообщений: 4435
Рейтинг сообщения: 0
Цитата:
Столько это сколько? Модификация стэка - по сути перезапись двух байтов - много не отнимет, уверяю вас =)

Не, ну понимаю несколько тактов в прерывании провести и выйти - это еще хорошо. А вот выполнять какой-либо процесс (функцию, которая может еще и ожидает какого-либо события) недопустимо в прерывании :)
Цитата:
Э-э-э... Пардон, таки врубить прерывания. Я ошибся. Не сбросить I, а поставить.

Поставить-то поставим... Но смысл? Этим мы всего лишь разрешим глобальные прерывания. А сами источники прерываний будут устанавливать свои флаги прерываний в своих регистрах флагов прерываний... Вот по ним и можно определять - совпало ли время с установленным на будильнике...

_________________
Не умеешь - не берись, но не взявшись не научишься...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Пн окт 29, 2012 01:12:18 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Вот блин проблему создали....
По сути, все делается проще. Просто берем переменную и заюсываем ее как набор различных флагов.
Устанавливаем флаг в одном месте, по определенному событию и проверяем в другом месте, если необходимо. Если флаг выставлен, то сбрасываем его и выполняем действие, если не выставлен, то едем далее по программе. Длинные задержки организовываются через системный таймер и срабатывание этих программных таймеров опять же по флагам. Самое интересное - что через флаги можно управлять устройством параллельно с разных интерфейсов. Например как через кнопки, так и по UARTу одновременно.

А манипуляции с обработчиком прерывания и стеком, ИМХО даже на АСМе, мазохизм.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Пн окт 29, 2012 08:33:02 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1435
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4603
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Один единственный грамотный совет по теме... :tea:
А то уже начали советовать вызывать бешеные функции из обработчика, с разрешением прерываний, не задумываясь о "бедном" контексте, которому будет "плохо" от таких маневров... :facepalm:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Пн окт 29, 2012 14:49:47 
Друг Кота
Аватар пользователя

Карма: 77
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7518
Рейтинг сообщения: 0
Цитата:
бешеные функции из обработчика, с разрешением прерываний, не задумываясь о "бедном" контексте


Если честно, я не вникал в суть задачи. :) Меня спросили "как" - я ответил. :) Может, флаг в этом случае и правда более удачное решение.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Пн окт 29, 2012 16:45:47 
Поставщик валерьянки для Кота
Аватар пользователя

Зарегистрирован: Пт апр 24, 2009 11:39:16
Сообщений: 2064
Откуда: г.Оренбург
Рейтинг сообщения: 0
Итак, сделал с флагом-работаааееет)) Спасибо за советы! :))

_________________
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Пн окт 29, 2012 23:27:36 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
То - то и оно. Кстати, качественная программа так же требует и обработки исключений. Тупые бесконечные циклы ожидания, к примеру, готовности EEPROM к записи тоже опасны. Я недавно только из-за этого хотел отсеять одного программера, что его программа на разных мелочах могла просто повиснуть в бесконечных циклах, ожидая чего то. Страдала в основном грамотность построения алгоритмов. Пожалел только потому, что больше не к чему было придраться. В остальном, код был довольно хорош, особенно в плане переносимости.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вт окт 30, 2012 08:22:00 
Поставщик валерьянки для Кота
Аватар пользователя

Зарегистрирован: Пт апр 24, 2009 11:39:16
Сообщений: 2064
Откуда: г.Оренбург
Рейтинг сообщения: 0
Спасибо за советы) Теперь даже научился немного оптимизации-из-за вложенных циклов и кучи временных переменных 8 мега иногда уходила в резет))) Зато горд-я смог забить всё ОЗУ) Чтобы не плодить темы, спрошу тут-код на С можно без особых изменений(поправить регистры, инклуды) перенести с 8 меги на 168? По ногам они идентичны.

_________________
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вт окт 30, 2012 09:40:26 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Вот тут юзай директивы. Смоя основная, это #define Все архитектурнозависимое надо переопределять. Это для того, чтобы во время правок при переносе не приходилось шастать по всему исходнику.
Код:
#define LED_PORT PORTA
#define LED_PIN  (1<<4)

LED_PORT |= LED_PIN;

А так, для переноса, тебе надо включить другой заголовочник, если это ИАР или изменить МК в свойствах проекта, если это GCC.
Переопределить порты, если у них названия другие. Ну и перенастроить прочую периферию, которая отличается. Типа таймеров и прочего.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вт окт 30, 2012 09:55:29 
Поставщик валерьянки для Кота
Аватар пользователя

Зарегистрирован: Пт апр 24, 2009 11:39:16
Сообщений: 2064
Откуда: г.Оренбург
Рейтинг сообщения: 0
Все архитектуронезависимое(имена портов итд) итак уже в дефайне. Просто поменять заголовочник и периферию переиниацилизировать, значит. Спасибо за советы!

_________________
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вт окт 30, 2012 11:13:26 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
DX168B писал(а):
Кстати, качественная программа так же требует и обработки исключений. Тупые бесконечные циклы ожидания, к примеру, готовности EEPROM к записи тоже опасны. Я недавно только из-за этого хотел отсеять одного программера, что его программа на разных мелочах могла просто повиснуть в бесконечных циклах, ожидая чего то.


Весьма спорное утверждение. Встраиваемое ПО состоит сплошь из таких мест: тут надо ждать EEPROM, там SPI, еще где-то АЦП и т.п. Если на каждый такой участок лепить всякую шелуху для проверки, то программа вырастет как на дрожжах, естественно став сложнее для понимания и поддержки. При этом, данные неисправности чисто железные (сгорел чип, брак, наводки), программа ничего с ними не сможет сделать.

Хотя, конечно же есть области, где применяется именно такой подход - космос, мирный атом, и, возможно, авионика. Там да, дублирование всего и вся плюс куча проверок. Но мы же не спутники запускаем. Требовать такой мега надежности от обычных промышленных систем - тоже самое, что требовать от ПК, чтобы при выдергивании процессора он вежливо нам об этом сообщал, прося вернуть его на место. Так что думаю сторожевого таймера более чем достаточно, ведь это есть тот максимум, что может сделать ПО - перезагрузить железку.

ПС: Конечно я несколько утрирую. Если вы запускаете спутники, то извините. Если я неправильно вас понял, то тоже извиняйте.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вт окт 30, 2012 14:07:48 
Поставщик валерьянки для Кота
Аватар пользователя

Зарегистрирован: Пт апр 24, 2009 11:39:16
Сообщений: 2064
Откуда: г.Оренбург
Рейтинг сообщения: 0
Тогда ещё вопрос-когда ОЗУ заполнено, МК может сам резетиться? А то фигня была такая(

_________________
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вт окт 30, 2012 14:44:27 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Pika4u писал(а):
Тогда ещё вопрос-когда ОЗУ заполнено, МК может сам резетиться? А то фигня была такая(

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вт окт 30, 2012 16:55:20 
Друг Кота
Аватар пользователя

Карма: 77
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7518
Рейтинг сообщения: 0
Цитата:
Весьма спорное утверждение.


+1.

В абсолютном большинстве случаев хватает watchdog'а. Собственно, он для того и придуман, чтобы, в частности, обезопасить прошивку от зависания на таких участках без затрат програмных ресурсов.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Вт окт 30, 2012 17:20:45 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
В моем случае, это не спутники, но тоже ответственные устройства, гоняющие туда-суда сотни ампер (системы бесперебойного энергоснабжения).
И не дай бог, где какой глюк. Все закончится выходом из строя силовых блоков и полным отказом системы. А если кому-то операцию на сердце в тот момент делали? Это к примеру, если питается от системы больница.

Для простых поделок оно-то и понятно, что можно и без всего этого. Но если времени, терпения и памяти достаточно, то почему бы и нет? :)))

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Ср окт 31, 2012 22:27:13 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пт авг 20, 2010 18:31:05
Сообщений: 101
Рейтинг сообщения: 0
Тема интересная! :) Сейчас работаю над часами. пишу на асме для PIC, будильником управляю при помощи флагов, как описывалось ранее. И все бы ни чего, но если в программе есть продолжительная пауза(например задержка на преобразования температуры датчиком ds18b20) в 800мс. То срабатывание будильника запаздывает на секунду. А зрительно это очень заметно. Но и это вроде ничего, можно перетерпеть. Вход в меню у меня организован тоже через флаги и тут, то не очень приятно выходит - нажал кнопку и ждешь секунду пока в меню попадешь. Может кто поможет советом? Как справиться? Флаги устанавливаю в прерываниях, а при выполнении основной программы проверяю их. У меня пока только одно решение - перенести фрагмент кода обработки меню в обработчик прерываний. :idea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача управления из прерывания в функцию.
СообщениеДобавлено: Ср окт 31, 2012 22:41:07 
Друг Кота
Аватар пользователя

Карма: 77
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7518
Рейтинг сообщения: 0
Цитата:
И все бы ни чего, но если в программе есть продолжительная пауза(например задержка на преобразования температуры датчиком ds18b20) в 800мс. То срабатывание будильника запаздывает на секунду. ... Как справиться?


Не делать ожидание датчика блокирующим выполнение циклом, а ориентироваться по времени.

1. Пришло время мерять температуру? Послали команду, поставили флаг измерения + запомнили время начала.
2. Флаг измерения стоит? Секунда по часам прошла? Читаем из датчика. Сбрасываем флаг измерения, задаем следующее время опроса датчика.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


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

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


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

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


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

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


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