|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
Работа FreeRTOS в системах жесткого реалтайма21.04.2021, 06:59. Показов 6588. Ответов 34
Есть проект, использующий FreeRTOS, но в котором необходимо откликаться на внешнее прерывание в минимальное время. Т.е. своего рода проект с жеским реалтаймом. Столкнулся с проблемой, что на FreeRTOS пока не могу это реализовать.
Основная проблема в том, что есть планировщик, который каждую миллисекунду берет управление себе и проверяет кому его передать. Что своего рода прерывает код, и в этот момент может наступить внешнее прерывание EXTI1, которое будет отложено до окончания работы планировщика. Время работы планировщика, время переключения между задачами/прерываниями я не замерял, но вычитал, что это порядка единиц мксек, что довольно много. По сути мне надо разбить код на две части: 1 часть - это обработка EXTI1 и обработка прерываний 4 каналов от таймера 2 часть - это весь остальной код, там так же есть прерывания, задачи и тд, но это уже не требует такого жесткого реалтайма Вопрос в том, как это можно сделать без вреда для работы ОС? Задать приоритет EXTI1 и прерывания таймера выше приоритета планировщика, но не приведет ли это к сбою FreeRTOS? На рисунке зеленым это то, что должно выполняться моментально вне зависимости от того, чем занят процессор, остальное может прерываться и работать в штатном режиме ОС Рисунок немного неправильно нарисован, естественно, что когда наступает EXTI1 и EXTI от таймера 1 весь код прервется (TASK1, TASK2)
0
|
|
| 21.04.2021, 06:59 | |
|
Ответы с готовыми решениями:
34
Одновременная работа LWIP и USB HS FreeRTOS STM32F407 Работа с гитом на двух операционных системах |
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 22.04.2021, 13:58 | ||
|
1
|
||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|||||||||||||||||||||||||||||||
| 22.04.2021, 14:15 | |||||||||||||||||||||||||||||||
Сообщение было отмечено DmitryDDDD как решение
Решение
DmitryDDDD,
Создал проект в кубе по вашим скринам. Так вот Cube не делает TIM1 системным таймером для ОС. Таймер для ОС по дефолту SysTick и из куба вы его не измените. То что вы настроили SYS Timebase таймер - это просто таймер который в прерывании инкрементирует переменную - но он никак не работает с ОС. Если вы не поленитесь, и полазите по проекту то найдете такие строки в файле FreeRTOSConfig_template.h
Далее вы увидите строки:
Теперь поищем, где же используется
/* Constants required to manipulate the core. Registers first... */
0xE000ED20 SHPR3 RW Privileged 0x00000000 System handler priority register 3 Смотрим, что там Бинго, регистр установки приоритета прерываний SysTick. На всякий случай смотрим, что у нас там по адресам 0xe000e010: А там не что иное как системный таймер. Выводы: Куб генерит источник тактирования для ОС - SysTick. Timebase в разделе SYS не имеет никакого отношения к ОС. Приоритет ядра configLIBRARY_LOWEST_INTERRUPT_PRIORITY равен 0xF (или 15), что при 4 битном приоритете является минимальным из возможных. Любое прерывание которое имеет приоритет выше - прервет ОС. Приоритет прерываний с системными вызовами FreeRTOS configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIO RITY равен 5. Соответсвенно все прерывания которые используют API ОС должны иметь приоритет от 5 до 15 и могут прерывать ядро. Все прерывания 0 до 5 не должны использовать API ОС, они могут прерывать всё и ядро и прерывания с системными вызовами.
1
|
|||||||||||||||||||||||||||||||
|
4139 / 2717 / 433
Регистрация: 09.09.2017
Сообщений: 12,050
|
||
| 23.04.2021, 10:47 | ||
|
То есть обработчик прерывания, длящийся миллисекунды! Нет уж, пусть у переключателя задач будет минимальный приоритет: прерывания быстро куда хотят вклиниваются, быстро отрабатывают и быстро возвращают все как было, юзерский код и таскменеджер даже не заметят что там что-то возникало.
1
|
||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 23.04.2021, 11:55 [ТС] | |
|
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||||||
| 23.04.2021, 12:07 | |||||||
|
Скорее всего большинство кода из него выкидывается линкером, но это не точно. Если это действительно мешает - нужно либо сделать как я чуть выше предложил, либо изменить хендлер прерывания так, чтобы он делал только то, что от него требуется. У меня этот хендлер выглядит так:
..у меня в одном из проектов этот `HAL_TIM_IRQHandler` занимает 366 байт. Не много, конечно, однако, как для самой высокоприоритетной задачи - вполне ощутимо
0
|
|||||||
|
4139 / 2717 / 433
Регистрация: 09.09.2017
Сообщений: 12,050
|
||||
| 23.04.2021, 12:15 | ||||
. Видимо, задач они на этот таймер повесили много...
0
|
||||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||
| 23.04.2021, 12:17 [ТС] | ||
|
Voland_,
Если Вы хотите обойти коллбэк этого таймера в HAL, то что Вы делаете потом с переменной ulTotalRunTime++;? И в таком случае HAL_TIM_IRQHandler(&htim9); надо закомментировать?
0
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 23.04.2021, 12:41 | ||
|
0
|
||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 23.04.2021, 12:50 [ТС] | |
|
Voland_, Ну просто так же нельзя его закомментировать, надо заменить ему функционал чем-то? В Вашем случае это, видимо, ulTotalRunTime++; Только где эта переменная дальше используется?
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||||||||
| 23.04.2021, 13:59 | ||||||||
Добавлено через 15 минут PS: в большом количестве случаев хендлер ничего и не делает - он просто пробегает по флагам таймера, убеждается что они все не выставлены, и ничего не вызывает. Все это легко убирается на compile-time либо link-time, вот только разрабам от ST это все пофигу, как и раньше, в их SPL. Я давно на них чертыхаюсь, по этому поводу тоже . Поэтому, прошу считать мое мнение субьективным, и можно даже сказать - предвзятым, (как конкурента) .
0
|
||||||||
|
4139 / 2717 / 433
Регистрация: 09.09.2017
Сообщений: 12,050
|
|
| 23.04.2021, 14:18 | |
|
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 23.04.2021, 14:50 | ||
|
Не по теме: это не значит, что я пишу библиотеки для платформ ST параллельно с их разрабами, нет ). Но... есть много других платформ, под которые пишутся программные платформы
0
|
||
|
4139 / 2717 / 433
Регистрация: 09.09.2017
Сообщений: 12,050
|
|
| 23.04.2021, 14:53 | |
|
То есть "конкурент" только в том смысле что пишете свои слои абстракции вместо ST-шных? Ну в этом смысле и я им конкурент
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|
| 23.04.2021, 20:11 | |
|
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 24.04.2021, 07:06 [ТС] | |
|
_SayHello, ValeryS, Не, там TIM1 можно выбрать, откуда это пошло я уже не помню, возможно отсюда
https://narodstream.ru/stm-uro... y-chast-1/ https://narodstream.ru/stm-uro... free-rtos/ Я в коде потом проверял, каждую милисекунду срабатывает прерывание от этого таймера (по-моему от этого таймера..., подзабыл уже), планировщик видимо заведен на него
0
|
|
| 24.04.2021, 07:06 | |
|
Одинакова ли совершаемая данной силой работа в двух инерциальных системах отсчета? Медленная работа жесткого диска Работа жесткого диска в фоне. Слышна работа жесткого дисках в колонках
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
начало и оглавление
-
Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|