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

 
 
9 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> FreeRTOS - минимальное время тика?
maxntf
сообщение May 24 2018, 08:26
Сообщение #31


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



Цитата(esaulenka @ May 23 2018, 22:46) *
Сообщения #11 и #15 в этом топике не читали? ладно, следующий раз постараюсь более внятно излагать свои мысли.

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

Это все хорошо.
Только мне не понятен один момент, откинув всю лирику о приоритетах задач, концепции FreeRTOS и т.д.
Планировщик, очень сокращенно - это функция которая управляет регистром PC, то есть выбирает куда перекинуть ход выполнения программы.
Он вызывается по прерыванию таймера на котором он работает - SysTick, или через API функции FreeRTOSа.
У меня 3 задачи, не в одной нет никаких API функций, даже делай.
1-я вызывает функцию, которая отключает SysTick и по какой то причине он не включается. Каким образом моя программа оказывается во второй задачи и там висит, потому как SysTick отключен и планировщик больше не вызывается, а API функций в задачах нет, чтоб вызвать планировщик.

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

Сообщение отредактировал maxntf - May 24 2018, 08:33
Go to the top of the page
 
+Quote Post
Baser
сообщение May 24 2018, 08:34
Сообщение #32


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(jcxz @ May 24 2018, 01:31) *
А какой смысл в замене SysTick на TIM3? В Ваш МК SysTick впаять забыли? biggrin.gif

Цитата(volodya @ May 24 2018, 07:27) *
Вот не копал глубоко - при использовании мастера 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(), то он будет неправильно считать время.
Go to the top of the page
 
+Quote Post
maxntf
сообщение May 24 2018, 09:14
Сообщение #33


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



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

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

Сообщение отредактировал maxntf - May 24 2018, 09:25
Go to the top of the page
 
+Quote Post
Forger
сообщение May 24 2018, 09:59
Сообщение #34


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(maxntf @ May 24 2018, 11:26) *
Только мне не понятен один момент ....

Судя по всему у вас нет не хватает знаний по RTOS, читайте матчасть, она есть на сайте freeRTOS.
В частности примеры применения.
Тогда не придется гадать на кофейной гуще ))



--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 24 2018, 11:11
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Forger @ May 24 2018, 09:27) *
вся ось стала монстроподобной и потому не самой шустрой и удобной.

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

Цитата(maxntf @ May 24 2018, 11:26) *
Он вызывается по прерыванию таймера на котором он работает - SysTick, или через API функции FreeRTOSа.

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

Цитата(Baser @ May 24 2018, 11:34) *
При использовании STMовского HAL (CubeMX) + FreeRTOS нужно назначать системный таймер HALа (который формирует сетку 1 мс) на любой другой свободный таймер кроме SysTick. Потому что SysTick монопольно занимает FreeRTOS.

Ну так можно вызвать нужную функцию этого куба из ISR FreeRTOS. Выставить для FreeRTOS 1КГЦ и вызывать.
Нафига козе баян Зачем кста кубу это прерывание? Там своя ОС внутри уже что-ль? wacko.gif

Цитата(maxntf @ May 24 2018, 11:26) *
Планировщик, очень сокращенно - это функция которая управляет регистром PC, то есть выбирает куда перекинуть ход выполнения программы.

Кста: не планировщик (шедулер) перекидывает ход выполнения программы, а переключатель контекста. Если уж на то пошло.
Шедулер только выбирает и назначает какая задача будет выполняться следующей, и возбуждает PendSV, в котором собственно контекст и переключается. Без PendSV ничего никуда не перекинется.
Go to the top of the page
 
+Quote Post
Forger
сообщение May 24 2018, 12:03
Сообщение #36


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(jcxz @ May 24 2018, 14:11) *
Мне тоже она показалась слишком монстроидальной. Поэтому пользую uCOS-II - она полегче.

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


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Turnaev Sergey
сообщение May 24 2018, 13:25
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 562
Регистрация: 25-07-06
Из: Зеленоград, Новосибирск
Пользователь №: 19 088



Цитата(Baser @ May 24 2018, 11:34) *
А по минимальному тику FreeRTOS тоже встречал рекомендации не делать частоту больше 1000 гц
Из доки на FreeRTOS v9.0 :

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

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

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

Цитата(maxntf @ May 24 2018, 11:26) *
Это все хорошо.
Только мне не понятен один момент, откинув всю лирику о приоритетах задач, концепции FreeRTOS и т.д.
Планировщик, очень сокращенно - это функция которая управляет регистром PC, то есть выбирает куда перекинуть ход выполнения программы.
Он вызывается по прерыванию таймера на котором он работает - SysTick, или через API функции FreeRTOSа.
У меня 3 задачи, не в одной нет никаких API функций, даже делай.
1-я вызывает функцию, которая отключает SysTick и по какой то причине он не включается. Каким образом моя программа оказывается во второй задачи и там висит, потому как SysTick отключен и планировщик больше не вызывается, а API функций в задачах нет, чтоб вызвать планировщик.

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

Я правильно понял, что в задачах нет вызовов vTaskDelay()?
В таком случае они всегда будут подвешивать планировщик.
vTaskDelay() обязателен в любой задаче FreeRTOS.
Хотя вру, не обязателен, вместо него может быть ожидание очереди или семафора, но что-то подобное обязано быть внутри бесконечного цикла каждой задачи.


--------------------
"Отсутствие вашей судимости - это не ваша заслуга, а наша недоработка."
Ф.Дзержинский.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 24 2018, 13:59
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Forger @ May 24 2018, 15:03) *
Работает несколько быстрее FreeRTOS, размера занимает немного меньше. Сравнивал на одном и том же проекте.

Что значит "несколько быстрее"? Изменилась загрузка CPU? И на сколько (в %)?
Go to the top of the page
 
+Quote Post
Forger
сообщение May 24 2018, 14:14
Сообщение #39


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(jcxz @ May 24 2018, 16:59) *
Что значит "несколько быстрее"? Изменилась загрузка CPU? И на сколько (в %)?

Да, загрузка меньше, буквально проценты, но конкретное значение сильно зависит от проекта.
Т.е. если использутся очень много сервисов, то разница получается более заметная.
Полагаю, что все дело в более оптимальной работе шедулера и самих сервисов.
Точные замеры (профилирование) я не делал, ибо такой задачи себе не ставил.
Просто, было принято решение выбора: соскакивать с FreeRTOS или остаться. Выбор пал на первое ))


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

Но есть и минус (для меня): пока что нет у Segger порта для их SystemView под эту ось, но дойдут руки сам сделаю или на край дождусь пока на это созреет Segger.
Порты SystemView на FreeRTOS и uCOS есть в комплекте, вполне рабочие. Правда порт SystemView под FreeRTOS пришлось немного допиливать - сыроват он был на тот момент ((


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
uriy
сообщение May 25 2018, 05:04
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
Но есть и минус (для меня): пока что нет у Segger порта для их SystemView под эту ось
А про эту штуку знаете https://electronix.ru/forum/index.php?showtopic=127646 ? Вроде и под ucos ее уже сделали
Go to the top of the page
 
+Quote Post
Forger
сообщение May 25 2018, 05:14
Сообщение #41


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(uriy @ May 25 2018, 08:04) *
А про эту штуку знаете?

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


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
uriy
сообщение May 25 2018, 06:12
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



У меня было такое же мнение о вертикальной прокрутке.
Но сейчас у меня противоложное мнение.
Цитата
нет нормальной FREE версии
А J-link у вас настоящий? Тогда какая разница?
Как в горизонтальной прокрутке вывести столько инфы:
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Forger
сообщение May 25 2018, 06:17
Сообщение #43


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(uriy @ May 25 2018, 09:12) *
А J-link у вас настоящий? Тогда какая разница?

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

Цитата
Как в горизонтальной прокрутке вывести столько инфы:
В SystemView все события (текст) точно также выводятся c вертикальной прокруткой.
Если щелкнуть на любое событие в окне терминала или событий, то на графике автоматом будет указано место.
Удобно и главное - привычно: ось времени - X, слева направо. Никакой самодеятельности ))

Прикрепленное изображение


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
esaulenka
сообщение May 25 2018, 07:31
Сообщение #44


Профессионал
*****

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



Цитата(Turnaev Sergey @ May 24 2018, 16:25) *
Я правильно понял, что в задачах нет вызовов vTaskDelay()?
В таком случае они всегда будут подвешивать планировщик.

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

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

Цитата(jcxz @ May 24 2018, 14:11) *
Нафига козе баян Зачем кста кубу это прерывание? Там своя ОС внутри уже что-ль? wacko.gif


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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 25 2018, 19:29
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(esaulenka @ May 25 2018, 10:31) *
Классика. Пастернака не читал, но осуждаю. Извините.

Я конечно извиняю за ваше незнание Пастернака. Но какое он имеет отношение к моему вопросу? wacko.gif
Go to the top of the page
 
+Quote Post

9 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 18:04
Рейтинг@Mail.ru


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