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

 
 
> проблема захватить семафор более приоритетной ниткой, слабая нитка не уступает процессор более сильной
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
Ответов
AlexRayne
сообщение May 19 2017, 17:36
Сообщение #2


Местный
***

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



Спасибо народ что отреагировали!
Уточню задачу чтобы было меньше непоняток что происходит:
есть процесс который - слабый - который регулярно пишет много секторов на Сдкарту.
есть сильный процесс (больше приоритет) - который с этой же карты должен срочно считать несколько секторов после того как из прерывания придет сообщение - ЦАП все проиграл, давай больше данных.

я поправил в настройках фриРТОСЫ приоритет нитки таймера (оказывается есть такая) сделал ее максимально возможной. это слегка помогло - сигнал от прерывания стал бодро приходить сильной нитке.
оказывается во фриРТОС ГруппаСигналов из прерывания почемуто активирует целевую нитку не напрямую а сигнал ловит нитка таймера, и она уже разруливает внутренние очереди фрюхи, и активирует сильный процесс.

что я вижу ныне на осцилографе:
1) запускается запись сильным проценссом - долго она идет
2) в это время прилетает несколько сигнало от прерывания сильной нитке, и она даже активируется.
3) она может удачно хватануть мутекс, и захватить Сдкарту, сделать все дела и уснуть. А может и не хватануть, а долго дожидаться пока слабая нитка не закончит свои дела.
при этом я уверен что в процессе ожидания мутеха, слаба нитка успевает провести неколько операций с СДкартой.

пока что заборол мою беду тем что сделал больше буфер в сильном процессе.

neiver:
Инверсия приоритетов - имхо тут не причем, она помогает ускорить слабый процесс, но при конкуренции за мутекс она причем?

razrab83:
при отпускании мутеха вполне надежно вызывается yield, может он и не хочет переключать. но отловить ситуацию которая меня интересует в отладчике сложно. надо както выловить момент когда конкурируют 2 независимых процесса. надо тестбенч чтоли какойто делать.



Цитата(ViKo @ May 18 2017, 19:06) *
P.S. А в заголовке - семафор. laughing.gif

А исправить загогловок можно?

А с семаформаи такая подляна бывает, или они бодрее реагируют?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 12:54
Рейтинг@Mail.ru


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