|
Программные прерывания разного приоритета |
|
|
|
Jun 24 2016, 16:02
|
Местный
  
Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778

|
Один из таймеров задает базовую частоту, в его обработчике прерывания запускается опрос датчиков и забираются результаты предыдущего опроса. Надо обрабатывать данные одновременно на разных частотах. Для примера конкретные числа, приходит 400 Гц, в первом же обработчике все преобразуется к 100 Гц, далее обработка на 100 Гц. Одновременно с этим 100 Гц преобразуются в 10 Гц и обрабатываются вторым способом, формируются поправки, которые идут на входы первой процедуры обработки.
То есть на временной диаграмме будет долгая работа 10 Гц процедуры, которую несколько раз прерывает 100 Гц процедура, и в 4 раза чаще прерывание для чтения измерений датчиков, которое перебивает всех но занимает мало времени.
Как это сделать на прерываниях? Из первого каждые 4 такта можно запускать второе прерывание с меньшим приоритетом. А из второго каждые 10 тактов третье с еще меньшим приоритетом. Но где взять программные прерывания? Занять неиспользуемые IRQ? Красивее вариантов нет?
Можно было бы обойтись одним прерыванием, если было бы можно разрешить одному IRQ вытеснять самого себя, менять приоритет исполняемого в данный момент прерывания. Но почитав внимательнее про регистр BASEPRI я понял, что так не получится.
МК - stm32f4xx.
Спасибо.
|
|
|
|
|
 |
Ответов
|
Jun 27 2016, 07:52
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Идея, в принципе, верная - использовать какие-нибудь "лишние" аппаратные прерывания (благо их в современных камнях с избытком). Даже на ноги ничего выводить не надо (разве что для отладки будет полезно).
Но, по хорошему, требуемый функционал хорошо ложится на RTOS. Я тоже когда-то велосипеды строил - низкоприоритетные прерывания, длинные процедуры которые выполняются за несколько заходов (чтоб в паузах можно было что-то ещё сделать). В очередной раз порекламирую scmRTOS - компактно, наглядно, хорошо документировано. По функционалу до "больших" ОСей бесконечно далеко, но этого никто и не обещал.
PS вроде б можно крутить приоритет текущего прерывания. Надо б внимательно прочитать, в какой момент оно в контроллере прерываний сравнивается. Но зачем подкладывать себе же такие очевидные грабли?!
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
Сообщений в этой теме
amaora Программные прерывания разного приоритета Jun 24 2016, 16:02 SII А почему не сделать нормальные потоки и спокойно н... Jun 26 2016, 16:35 amaora Этот вариант рассматривается. Jun 26 2016, 17:43 gerber Выделите 2 свободные ноги (пустые), сконфигурируйт... Jun 26 2016, 21:48 GetSmart Цитата(amaora @ Jun 24 2016, 20:02) Краси... Jun 27 2016, 14:37 amaora Если переходит на rtos, то я надолго закопаюсь в п... Jun 27 2016, 17:20 GetSmart Цитата(amaora @ Jun 27 2016, 21:20) На ст... Jun 27 2016, 21:04 jcxz Цитата(amaora @ Jun 27 2016, 23:20) Если ... Jun 28 2016, 04:09  GetSmart Цитата(jcxz @ Jun 28 2016, 08:09) Не може... Jun 28 2016, 15:14   jcxz Цитата(GetSmart @ Jun 28 2016, 21:14) Док... Jun 29 2016, 03:48    GetSmart Цитата(jcxz @ Jun 29 2016, 07:48) Обратит... Jun 29 2016, 11:59     jcxz Цитата(GetSmart @ Jun 29 2016, 17:59) Вы ... Jun 30 2016, 08:50      GetSmart Цитата(jcxz @ Jun 30 2016, 12:50) Это ещё... Jun 30 2016, 19:06       jcxz Цитата(GetSmart @ Jul 1 2016, 01:06) Вы е... Jul 1 2016, 03:22        GetSmart Цитата(jcxz @ Jul 1 2016, 07:22) Ну раз т... Jul 1 2016, 08:41 ar__systems У вас простейшая задача с минимальными скоростями,... Jun 29 2016, 07:02 amaora Еще вопрос. Допустим я решил использовать FreeRTOS... Jul 1 2016, 14:42
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|