RTOS (RTX OS) Problem Mutex_Semaphore

L

LOSTISLAND

Guest
Witam wszystkich, myślałem, że jedyne różnice między mutex i semafora to count (Capability Semaphore) i inwersji priorytet (Capability Mutex). Dzisiaj, z jaką się spotkałem coś dziwnego co może jest związane z możliwością inwersji priorytetu lub coś innego. Uzyskanie i zwolnienie Mutex lub semafory pomiędzy różnymi zadaniami jest jasne, ale kiedy ich używać tylko w jednym zadaniu, ich zachowanie jest inne. Korzystanie semafora zadaniem jest zablokowany, ale przy użyciu Mutex zadanie nie jest zablokowana. Wyobraź sobie, że jest tylko jedno zadanie nazywa APP_TestTask
Code:
 __task void APP_TestTask (void) {for (; ;) {os_dly_wait (20); os_sem_wait (Sem_Test, 0xffff); os_sem_send (Sem_Test); os_sem_wait (Sem_Test, 0xffff); os_sem_wait ( Sem_Test, 0xffff); Test_Function ();}}
Code:
 _Task void APP_TestTask (void) {for (; ;) {os_dly_wait (20); os_mut_wait (Mut_Test, 0xffff); os_mut_release (Mut_Test); os_mut_wait ( Mut_Test, 0xffff); os_mut_wait (Mut_Test, 0xffff); Test_Function ();}}
Czy to jest coś naturalnego lub błąd? Podziękowania w zaawansowanych
 
Uważam, że problem leży po nieodłącznych definicji semafor i mutex. Jeśli używasz jednego zadania to możemy założyć, że oprócz systemu zadania bezczynności, że Twój "APP_TestTask" jest najwyższym priorytetem. Od mutex zawiera odwrócenie priorytetów, i również mają tylko jedno zadanie, mutex zawsze spada na "APP_TestTask". Semafor, jest jednak przyczyną problemów ponieważ próbują zarówno oddać i wziąć semafor z poziomu zadania, zasadniczo, jesteś powodując zadanie straganie. I nigdy nie używane semafora, gdy mam tylko jedno zadanie. Czy istnieje konkretny powód, dlaczego to robisz? Regards, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top