Перейти к содержанию
    

FreeRTOS - минимальное время тика?

Сообщения #11 и #15 в этом топике не читали? ладно, следующий раз постараюсь более внятно излагать свои мысли.

Этот пост я проглядел. то есть не совсем проглядел, а проглядывал его с телефона дома, и не особо придал значение коду с дефайнами. После продолжение ветки перешло на второй лист, и туда забыл посмотреть. Но зато комент, где было сказано что тачлиб юзает SysTick натолкнула на мысль, что нужно из нее удалить все упоминания SysTick чтоб она вообще забыла о его существовании.

По этому автору esaulenka отдельное спасибо.

 

Это все хорошо.

Только мне не понятен один момент, откинув всю лирику о приоритетах задач, концепции FreeRTOS и т.д.

Планировщик, очень сокращенно - это функция которая управляет регистром PC, то есть выбирает куда перекинуть ход выполнения программы.

Он вызывается по прерыванию таймера на котором он работает - SysTick, или через API функции FreeRTOSа.

У меня 3 задачи, не в одной нет никаких API функций, даже делай.

1-я вызывает функцию, которая отключает SysTick и по какой то причине он не включается. Каким образом моя программа оказывается во второй задачи и там висит, потому как SysTick отключен и планировщик больше не вызывается, а API функций в задачах нет, чтоб вызвать планировщик.

 

P.S. Остается только один вариант - когда 1-я задача включает SysTick, срабатывает прерывание, мы попадаем в планировщик, он передает управление 2-й задаче, и тут по какой то причине SysTick отключается (уже в планировщике).

Изменено пользователем maxntf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какой смысл в замене SysTick на TIM3? В Ваш МК SysTick впаять забыли? :biggrin:

Вот не копал глубоко - при использовании мастера CubeMX + FreeRtos

ПО советует использовать другой кроме SysTic таймер.

При использовании STMовского HAL (CubeMX) + FreeRTOS нужно назначать системный таймер HALа (который формирует сетку 1 мс) на любой другой свободный таймер кроме SysTick. Потому что SysTick монопольно занимает FreeRTOS.

И приоритеты на них назначаются соответственно.

Это подробно описано в доках на HAL, целая глава есть.

 

А по минимальному тику FreeRTOS тоже встречал рекомендации не делать частоту больше 1000 гц

Из доки на FreeRTOS v9.0 :

configTICK_RATE_HZ

Sets the tick interrupt frequency. The value is specified in Hz.

The pdMS_TO_TICKS() macro can be used to convert a time specified in milliseconds to a time specified in ticks. Block times specified this way will remain constant even when the configTICK_RATE_HZ definition is changed. pdMS_TO_TICKS() can only be used when configTICK_RATE_HZ is less than or equal to 1000. The standard demo tasks make extensive use of pdMS_TO_TICKS(), so they too can only be used when configTICK_RATE_HZ is less than or equal to 1000.

То есть, если в ваших библиотеках применяется макрос pdMS_TO_TICKS(), то он будет неправильно считать время.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что то кажется мне, что дело не в тачлиб, во второй задаче у меня используется FatFS, я ее прикрутил и просто читаю файл через SPI. Но сейчас вспоминаю, когда я с ней разбирался (поверхностно) особо на детали внимание не обращал, меня интересовало только чтение файла. Но там ведь где то должны быть часы, чтоб указывать время создания/редактирования файла (по идеи). То есть эта библиотека как то должна работать со временем, а где это делается и настраивается я даже не разбирался. Возможно это вторая задача SysTick останавливает.

 

P.S.

Хотя вроде нужно самому эти атрибуты заполнять, FatFS за датой не следит, по крайне мере настраивать ее я не находил как. Там есть структура FILINFO, вот пользователь ее сам и заполняет.

Изменено пользователем maxntf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только мне не понятен один момент ....

Судя по всему у вас нет не хватает знаний по RTOS, читайте матчасть, она есть на сайте freeRTOS.

В частности примеры применения.

Тогда не придется гадать на кофейной гуще ))

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вся ось стала монстроподобной и потому не самой шустрой и удобной.

Мне тоже она показалась слишком монстроидальной. Поэтому пользую uCOS-II - она полегче.

 

Он вызывается по прерыванию таймера на котором он работает - SysTick, или через API функции FreeRTOSа.

Обычно в РТОС он вызывается не только из ISR таймера и вызовов API OS, но и в других ISR (в которых это разрешено).

 

При использовании STMовского HAL (CubeMX) + FreeRTOS нужно назначать системный таймер HALа (который формирует сетку 1 мс) на любой другой свободный таймер кроме SysTick. Потому что SysTick монопольно занимает FreeRTOS.

Ну так можно вызвать нужную функцию этого куба из ISR FreeRTOS. Выставить для FreeRTOS 1КГЦ и вызывать.

Нафига козе баян Зачем кста кубу это прерывание? Там своя ОС внутри уже что-ль? :wacko:

 

Планировщик, очень сокращенно - это функция которая управляет регистром PC, то есть выбирает куда перекинуть ход выполнения программы.

Кста: не планировщик (шедулер) перекидывает ход выполнения программы, а переключатель контекста. Если уж на то пошло.

Шедулер только выбирает и назначает какая задача будет выполняться следующей, и возбуждает PendSV, в котором собственно контекст и переключается. Без PendSV ничего никуда не перекинется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне тоже она показалась слишком монстроидальной. Поэтому пользую uCOS-II - она полегче.

Тоже смотрел в сторону uCOS, но уже uCOS-III.

Но "вдруг" попалась под руки RTX Keil (теперь она кстати принадлежит ARM), сделана по-уму: все сервисы на SVC, т.е. именно так, как это рекомендуется самой АRM при проектировании ядра.

Работает несколько быстрее FreeRTOS, размера занимает немного меньше. Сравнивал на одном и том же проекте.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А по минимальному тику FreeRTOS тоже встречал рекомендации не делать частоту больше 1000 гц

Из доки на FreeRTOS v9.0 :

 

То есть, если в ваших библиотеках применяется макрос pdMS_TO_TICKS(), то он будет неправильно считать время.

На самом деле, сделать частоту тиков выше не проблема. Ну да, придётся переписать пару простых макросов и на этом всё.

Использую в сложном проекте где порядка 60 задач, частоту тиков почти 13кГц, при тактовой 96МГц, отлично работает.

 

Зачем это надо. Объясняю. Если используете энергосберегающие режимы и режим ticklessIdle, т.е. пропуск тиков, то в сон контроллер уходит не ранее чем через один тик, соответственно чем тик меньше, тем быстрее после выполнения задачи контроллер уснёт.

 

Это все хорошо.

Только мне не понятен один момент, откинув всю лирику о приоритетах задач, концепции FreeRTOS и т.д.

Планировщик, очень сокращенно - это функция которая управляет регистром PC, то есть выбирает куда перекинуть ход выполнения программы.

Он вызывается по прерыванию таймера на котором он работает - SysTick, или через API функции FreeRTOSа.

У меня 3 задачи, не в одной нет никаких API функций, даже делай.

1-я вызывает функцию, которая отключает SysTick и по какой то причине он не включается. Каким образом моя программа оказывается во второй задачи и там висит, потому как SysTick отключен и планировщик больше не вызывается, а API функций в задачах нет, чтоб вызвать планировщик.

 

P.S. Остается только один вариант - когда 1-я задача включает SysTick, срабатывает прерывание, мы попадаем в планировщик, он передает управление 2-й задаче, и тут по какой то причине SysTick отключается (уже в планировщике).

Я правильно понял, что в задачах нет вызовов vTaskDelay()?

В таком случае они всегда будут подвешивать планировщик.

vTaskDelay() обязателен в любой задаче FreeRTOS.

Хотя вру, не обязателен, вместо него может быть ожидание очереди или семафора, но что-то подобное обязано быть внутри бесконечного цикла каждой задачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работает несколько быстрее FreeRTOS, размера занимает немного меньше. Сравнивал на одном и том же проекте.

Что значит "несколько быстрее"? Изменилась загрузка CPU? И на сколько (в %)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что значит "несколько быстрее"? Изменилась загрузка CPU? И на сколько (в %)?

Да, загрузка меньше, буквально проценты, но конкретное значение сильно зависит от проекта.

Т.е. если использутся очень много сервисов, то разница получается более заметная.

Полагаю, что все дело в более оптимальной работе шедулера и самих сервисов.

Точные замеры (профилирование) я не делал, ибо такой задачи себе не ставил.

Просто, было принято решение выбора: соскакивать с FreeRTOS или остаться. Выбор пал на первое ))

 

 

Ну и вторым доводом сыграло то, что мои проекты не привязаны к какой-то конкретной RTOS (раньше я об этом писал, использую "обертку"), но почти все проекты на ARM-Cortex.

Поэтому тащить чудовищную универсальность в плане портов FreeRTOS для меня просто нет смысла.

 

Но есть и минус (для меня): пока что нет у Segger порта для их SystemView под эту ось, но дойдут руки сам сделаю или на край дождусь пока на это созреет Segger.

Порты SystemView на FreeRTOS и uCOS есть в комплекте, вполне рабочие. Правда порт SystemView под FreeRTOS пришлось немного допиливать - сыроват он был на тот момент ((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но есть и минус (для меня): пока что нет у Segger порта для их SystemView под эту ось
А про эту штуку знаете https://electronix.ru/forum/index.php?showtopic=127646 ? Вроде и под ucos ее уже сделали

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А про эту штуку знаете?

Знаем такую, пробовали ))

Но лично мне она вообще не понравилась - вертикальная прокрутка (WTF???), информативность уступает systemview и нет нормальной FREE версии ((

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня было такое же мнение о вертикальной прокрутке.

Но сейчас у меня противоложное мнение.

нет нормальной FREE версии
А J-link у вас настоящий? Тогда какая разница?

Как в горизонтальной прокрутке вывести столько инфы:

post-11606-1527228652_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А J-link у вас настоящий? Тогда какая разница?

Поясните, не пойму связи. J-link-ов в конторе много и нормальные и китай.

Придет время купят и SystemView, но пока 1млн событий (ограничение free версии) хватает в любом нынешнем проекте.

 

Как в горизонтальной прокрутке вывести столько инфы:
В SystemView все события (текст) точно также выводятся c вертикальной прокруткой.

Если щелкнуть на любое событие в окне терминала или событий, то на графике автоматом будет указано место.

Удобно и главное - привычно: ось времени - X, слева направо. Никакой самодеятельности ))

 

post-2831-1527229016_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я правильно понял, что в задачах нет вызовов vTaskDelay()?

В таком случае они всегда будут подвешивать планировщик.

Нет. Если задачи одного приоритета, они будут переключаться по кругу с периодом SYSTICK.

Не самая лучшая идея, но работает.

 

Заодно мы решили загадку топикстартера. Переключение задач у него не привязано к выполнению задачи никак, и в какой-то "счастливый" момент оно срабатывает посреди критической секции. Один раз.

В общем, это никуда не годится. Если есть RTOS, надо ей пользоваться. Нужна задержка - delay() операционки. Нужно подождать, пока сработает прерывание - выкинуть вечный цикл с флажком, сделать очередь или семафор.

 

Нафига козе баян Зачем кста кубу это прерывание? Там своя ОС внутри уже что-ль? :wacko:

 

Классика. Пастернака не читал, но осуждаю. Извините.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Классика. Пастернака не читал, но осуждаю. Извините.

Я конечно извиняю за ваше незнание Пастернака. Но какое он имеет отношение к моему вопросу? :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...