RTOS (RTX OS) Mutex_Semaphore Problem

L

LOSTISLAND

Guest
Hej alla, jag trodde de enda skillnaderna mellan en mutex och semafor är räkningen (Semaphore Capability) och prioritetsinversion (Mutex Capability). Idag har jag stött på något konstigt som kanske är relaterad till prioritetsinversion kapacitet eller något annat. Komma och släppa Mutex eller Semaforer mellan olika arbetsuppgifter är klart, men när jag använder dem i bara en uppgift, är deras beteende annorlunda. Använda semafor uppgiften är låst men med Mutex uppgiften inte är låst. Föreställ finns det bara en uppgift som heter APP_TestTask
Code:
 __task void APP_TestTask (void) {för (; ;) {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) {för (; ;) {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 ();}}
Är det något naturligt eller en bugg? Tack på avancerad
 
Jag tror att problemet ligger hos de inneboende definitioner av en semafor och en mutex. Om du använder en uppgift så kan vi anta att, förutom systemet är inaktivt uppgiften, att din "APP_TestTask" är högsta prioritet. Eftersom en mutex innehåller prioritetsinversion, och du också bara en uppgift, kommer mutex faller alltid till "APP_TestTask". En semafor är dock orsakar problem eftersom du försöker både ge bort och ta semaforen inifrån en uppgift, i huvudsak, du orsakar uppgiften till stall. Jag har aldrig använt en semafor när jag har bara en uppgift. Finns det någon särskild anledning till varför du gör det här? Hälsningar, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top