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

 
 
9 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> FreeRTOS - минимальное время тика?
Forger
сообщение May 22 2018, 17:56
Сообщение #16


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

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



Цитата(maxntf @ May 22 2018, 12:36) *
Меняю это значение на 10000Hz....
МК STM32L152rc работает на 16MHz
В чем может быть дело?

cranky.gif

Даже в толстых проектах никогда не ставлю больше 1000, а обычно вполне хватает 100.
Все остальные более точные времена и задержки следует реализовывать через аппаратные таймера и будить задачи из прерываний флагами или семафорами.

Цитата
Шедуллер перестает работать вовсе - vApplicationTickHook перестает вызываться и задачи не переключаются.

Вангую - в таком режиме либо не хватает основного стека (см. MSP) либо "кончается" стек одной из задач (PSP).
Ставьте контроль стека в настойках freeRTOS, и соотв. ловушки.

Зы. Как stress-test подобный "садизм" с таких космическим соотношением: 16МГц / 10кГц - имхо, вполне годное решение, возьму на вооружение smile3046.gif


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


Гуру
******

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



Тоже никогда не делал меньше 1 мс. Зачем вам это понадобилось?
Go to the top of the page
 
+Quote Post
k155la3
сообщение May 23 2018, 08:55
Сообщение #18


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(uriy @ May 23 2018, 07:19) *
Тоже никогда не делал меньше 1 мс. Зачем вам это понадобилось?
Задачи обработки информации и событий "разложены" недостаточно неэффективно.
может так ?
приоритет High - "RealtimeTask" + IRQ
приоритет Middle - "DriverTask"
приоритет Low - "ApplicationTask"
приоритет LowLow - "GUI_keyb_console_Task"
Go to the top of the page
 
+Quote Post
Forger
сообщение May 23 2018, 09:01
Сообщение #19


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

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



Цитата(k155la3 @ May 23 2018, 11:55) *
Задачи обработки информации и событий "разложены" недостаточно неэффективно.

Длительность системного такта не имеет отношения к этому.
Если загрузка СPU достигает 100% (ни разу не запускается IDLE задача), то нужно либо поднимать таковую частоту ядра, либо уменьшать частоту системного таймера ОС.
А правильнее - искать виновника: какая из задач "гадит в общую кастрюлю".
Слепая игра с приоритетами - это как молитвы о спасении умирающему: в самом лучшем случае лишь немного отсрочат неизбежную "кончину" laughing.gif


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


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

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



Цитата(haker_fox @ May 22 2018, 16:08) *
Кстати, автору топика рекомендую включить ловушки на нехватку памяти (настройки оси), использовать configASSERT'ы (настройки ОСИ), а также повесить обработчик на hardfault. Все эти вещи НЕ РАЗ выручали меня при отладке проекта.


С памятью все ок!
Ловушки хоть и примитивные - бесконечный цикл (для отладки сгодится) везде стоят: vApplicationStackOverflowHook, HardFault_Handler и т.д.

Цитата(uriy @ May 23 2018, 07:19) *
Тоже никогда не делал меньше 1 мс. Зачем вам это понадобилось?

Я не проект готовый делаю, а только разбираюсь. С STM и FreeRTOS, ранее не работал. Нужно было сделать захват сигнала с частотой 10мкс. Думал попробовать на таймере ОС, вот и поднял частоту. То оказалась глупая затея, а вот баг вылез. Вот и хочу разобраться, чтоб потом таких грабель не было.
Go to the top of the page
 
+Quote Post
maxntf
сообщение May 23 2018, 12:16
Сообщение #21


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

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



Нашел костыль.
В функции обработка кнопок есть дефайн отключения а потом включения прерываний.
Там осталось от оригинала управление SysTick:
Код
#define enableInterrupts()  {SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;}
#define disableInterrupts() {SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;}

, а я кручу тайминг на TIM3.
Только пока не могу понять как это приводит к полному отключению прерываний. Проверил все места где disableInterrupts применяется, всегда есть обратный на включение enableInterrupts, а пока SysTick отключен, планировщик ведь не может передать управление. Дело в том что функция в которой SysTick включается/отключается вызывается из задачи 1, а когда происходит баг, программа весит в задаче 2.

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


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

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



Цитата(maxntf @ May 23 2018, 15:16) *
Нашел костыль.

Это еще мягко сказано! Это настоящие грабли! smile3046.gif
Впервые вижу такую дичь cranky.gif

Берите готовые решения от FreeRTOS, там есть нужные макросы.


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


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

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



Цитата(Forger @ May 23 2018, 15:25) *
Это еще мягко сказано! Это настоящие грабли! smile3046.gif
Впервые вижу такую дичь cranky.gif

Берите готовые решения от FreeRTOS, там есть нужные макросы.


Нужные макросы чего?
Просто эта библиотека TouchSensorLib была заточена под SysTick. Ее нужно перебирать. Только хрена было ее делать под хардтимер не понятно.
Там и так хренова куча настроек, ну добавили бы еще одну по выбору и настройке таймера. Тем более что там нужно только мсек и сек считать и все!

Заделал такое:
Код
#define enableInterrupts()    {NVIC->ISER[TIM3_IRQn >> 0x05] = (uint32_t)0x01 << (TIM3_IRQn & (uint8_t)0x1F);}
#define disableInterrupts()     {NVIC->ICER[TIM3_IRQn >> 0x05] = (uint32_t)0x01 << (TIM3_IRQn & (uint8_t)0x1F);}

Все вроде работает.
Осталось проверить чтоб теперь TIM3 не вис. Если будет виснуть, тогда косяк где то в TouchSensorLib.

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


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

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



Цитата(maxntf @ May 23 2018, 15:46) *
Нужные макросы чего?

Как чего? Критических секций: пара disableInterrupts/enableInterrupts именно для этого и тут и создана.

Цитата
Просто эта библиотека TouchSensorLib была заточена под SysTick. Ее нужно перебирать.

Ясень пень, что влоб такие вещи не решаются, иначе получается именно такой результат, как в "шапке" темы.
Или искать эту библиотеку, уже переделанную под FreeRTOS, где-нить на гитхабе или типа того


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


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

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



Цитата(maxntf @ May 23 2018, 15:16) *
Нашел костыль.


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


Цитата(maxntf @ May 23 2018, 15:16) *
Только пока не могу понять как это приводит к полному отключению прерываний. Проверил все места где disableInterrupts применяется, всегда есть обратный на включение enableInterrupts, а пока SysTick отключен, планировщик ведь не может передать управление. Дело в том что функция в которой SysTick включается/отключается вызывается из задачи 1, а когда происходит баг, программа весит в задаче 2.

Например, если задача 2 более высокоприоритетная, и устроена как-то следующим образом:
while (1) {
wait_mutex(); // queue/...
do_job();
sleep(N);
}
а это внешний мьютекс или элемент из очереди привязан не к SysTick'у, а к какому-то внешнему воздействию, она может проснуться в т.ч. и в тот момент, когда задача 1 находится внутри критической секции. И всё - из sleep'а мы никогда не выйдем...


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


Гуру
******

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



Цитата(maxntf @ May 23 2018, 15:16) *
, а я кручу тайминг на TIM3.

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

Цитата(esaulenka @ May 23 2018, 22:46) *
она может проснуться в т.ч. и в тот момент, когда задача 1 находится внутри критической секции. И всё - из sleep'а мы никогда не выйдем...

Почему?
Go to the top of the page
 
+Quote Post
volodya
сообщение May 24 2018, 04:27
Сообщение #27


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

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



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


Почему?


Вот не копал глубоко - при использовании мастера CubeMX + FreeRtos
ПО советует использовать другой кроме SysTic таймер.
"Явление открыл - причин не измышляю"(Ломоносов).


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 24 2018, 06:17
Сообщение #28


Гуру
******

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



Цитата(volodya @ May 24 2018, 07:27) *
Вот не копал глубоко - при использовании мастера CubeMX + FreeRtos

хммм.... Если это так, то это причина не заменить таймер, а выбросить нафиг куб вместе с фриртос-ом (или его кривым портом). laughing.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение May 24 2018, 06:27
Сообщение #29


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

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



Цитата(jcxz @ May 24 2018, 09:17) *
вместе с фриртос-ом (или его кривым портом). laughing.gif

Фриртос вполне годная вещь, и порты в целом годные, но в погоне за универсальностью (поддержка огромного числа платформ) вся ось стала монстроподобной и потому не самой шустрой и удобной.
Но запускается с полпинка и вполне годно работает, но при условии: делать все правильно и не заниматься самодеятельностью (как это делает ТС).


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


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



FreeRTOS работает хорошо и правильно, если с ней правильно работать...
А вот прикручивать таймеры общего назначения вместо специально интегрированного в ядро Cortex-Mx SysTick - ИМХО попахивает аттавизмом из 8-битных микроконтроллеров, где и другого выбора-то не было.
Go to the top of the page
 
+Quote Post

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

 


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


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