|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
Работа FreeRTOS в системах жесткого реалтайма21.04.2021, 06:59. Показов 6739. Ответов 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
|
|||||||||||||||||||||||||||||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||
| 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
|
|||||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||
| 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
|
||||||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|
| 23.04.2021, 14:18 | |
|
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 23.04.2021, 14:50 | ||
|
Не по теме: это не значит, что я пишу библиотеки для платформ ST параллельно с их разрабами, нет ). Но... есть много других платформ, под которые пишутся программные платформы
0
|
||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|
| 23.04.2021, 14:53 | |
|
То есть "конкурент" только в том смысле что пишете свои слои абстракции вместо ST-шных? Ну в этом смысле и я им конкурент
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|
| 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 | |
|
Одинакова ли совершаемая данной силой работа в двух инерциальных системах отсчета? Медленная работа жесткого диска Работа жесткого диска в фоне. Слышна работа жесткого дисках в колонках
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|