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

 
 
> проблема захватить семафор более приоритетной ниткой, слабая нитка не уступает процессор более сильной
AlexRayne
сообщение May 18 2017, 13:02
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877



Использую freeRTOS8.2.1
есть мутех за который борются две нитки с разным приоритетом.
слабая нитка стартует и делает много захватов и отпускания мутеха.
пока она работает, в более сильную нитку приходит событие, и она пытается захватить мутех.
но такое ощущение что слабая нитка както не очень хочет уступить более сильной процессор - она может отпустить и тутже захватить мутех снова, а более сильная так и остается в ожидании.
Почему так происходит? как побороть?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lagman
сообщение May 19 2017, 19:45
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Возможно где то не отдаете семафор-мутекс, возможно у задач приоритет не такой, возможно приоритет прерывания "выше" чем системный тик, возможно в прерывании не хватает portYIELD_FROM_ISR. Короче проблем может быть много, но можно сказать одно, если все правильно спроектировано то работать будет правильно. Без исходников много можно чего насоветовать.

Сделайте у задач одинаковый приоритет и посмотрите что получится, вставить в низкоприоритетной задаче vTaskDelay на несколько тиков после того как отдаете мутекс, может freertos не успевает понизить приоритет во время перехода мутекса.
Go to the top of the page
 
+Quote Post
AlexRayne
сообщение May 20 2017, 10:08
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877



Цитата(Lagman @ May 19 2017, 22:45) *
Возможно где то не отдаете семафор-мутекс
возможно у задач приоритет не такой

это было проверено первым

Цитата(Lagman @ May 19 2017, 22:45) *
возможно приоритет прерывания "выше" чем системный тик

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

Цитата(Lagman @ May 19 2017, 22:45) *
возможно приоритет прерывания "выше" чем системный тик, возможно в прерывании не хватает portYIELD_FROM_ISR

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

Цитата(Lagman @ May 19 2017, 22:45) *
Сделайте у задач одинаковый приоритет и посмотрите что получится, вставить в низкоприоритетной задаче vTaskDelay на несколько тиков после того как отдаете мутекс, может freertos не успевает понизить приоритет во время перехода мутекса.

Да, к этой мысли я подхожу уже. но по мне - она не слишком радикальна. видимо стоит сделать более навороченный мутех, поддерживающие приоритет запросчика (возможно не связанный с приоритетом нитки). может чтото такое уже у когото есть? плюсовой код приветствуется.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 11:41
Рейтинг@Mail.ru


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