реклама на сайте
подробности

 
 
> Программные прерывания разного приоритета
amaora
сообщение Jun 24 2016, 16:02
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Один из таймеров задает базовую частоту, в его обработчике прерывания запускается опрос датчиков и забираются результаты предыдущего опроса. Надо обрабатывать данные одновременно на разных частотах. Для примера конкретные числа, приходит 400 Гц, в первом же обработчике все преобразуется к 100 Гц, далее обработка на 100 Гц. Одновременно с этим 100 Гц преобразуются в 10 Гц и обрабатываются вторым способом, формируются поправки, которые идут на входы первой процедуры обработки.

То есть на временной диаграмме будет долгая работа 10 Гц процедуры, которую несколько раз прерывает 100 Гц процедура, и в 4 раза чаще прерывание для чтения измерений датчиков, которое перебивает всех но занимает мало времени.

Как это сделать на прерываниях? Из первого каждые 4 такта можно запускать второе прерывание с меньшим приоритетом. А из второго каждые 10 тактов третье с еще меньшим приоритетом. Но где взять программные прерывания? Занять неиспользуемые IRQ? Красивее вариантов нет?

Можно было бы обойтись одним прерыванием, если было бы можно разрешить одному IRQ вытеснять самого себя, менять приоритет исполняемого в данный момент прерывания. Но почитав внимательнее про регистр BASEPRI я понял, что так не получится.

МК - stm32f4xx.

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Jun 27 2016, 14:37
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(amaora @ Jun 24 2016, 20:02) *
Красивее вариантов нет?

Это, наверное, самый простой, когда проект без ОС и не хочется самому писать на асме подмену контекстов выходов из IRQ. Но могут попасться недокументированные вектора на месте якобы свободных. Паранойю можно сгладить передачей сигналов подтверждений вызова между своими уровнями. Если при влёте в нижеприоритетное прерывание нет флага от более приоритетного, то сразу выходить из обработчика.

Но можно добавить паранойи. Если вдруг разрешить якобы свободный вектор и что-то недокументированное запросит прерывание, то произойдёт зависание в обработчике IRQ. Так что вариант использовать вектор периферии, которая в проекте не используется смотрится тоже неплохо. Обязательно ли нужно запитывать этот блок для корректной работы NVIC должно быть написано в документации. Если не написано, то скорее всего придётся запитывать и внутри обработчика сбрасывать все возможные запросы от этого блока периферии, несмотря на то, что блок не используется.

Цитата(esaulenka @ Jun 27 2016, 11:52) *
PS вроде б можно крутить приоритет текущего прерывания.

Поделитесь информацией, если что-то узнаете. Логика NVIC может быть заточена на отработку инструкции BX со служебными значениями (паттерн 0xffffffxx).

Сообщение отредактировал GetSmart - Jun 27 2016, 21:22


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - esaulenka   Идея, в принципе, верная - использовать какие-нибу...   Jun 27 2016, 07:52
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th August 2025 - 23:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016