RTOS (RTX OS) Mutex_Semaphore Problem

L

LOSTISLAND

Guest
Hej alle, jeg troede de eneste forskelle mellem en Mutex og en Semaforens er count (Semaphore Capability) og prioriteret inversion (Mutex Capability). I dag har jeg stødt på noget mærkeligt, som måske er relateret til prioritet inversion evne eller noget andet. Kom og frigive Mutex eller semaforer mellem forskellige opgaver er klart, men når jeg bruger dem i bare én opgave, deres adfærd er anderledes. Brug Semaforens opgaven er låst, men bruger Mutex opgaven ikke er låst. Forestil dig at der er kun én opgave kaldet 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 ();}}
Er det noget naturligt eller en fejl? Takket være avanceret
 
Jeg mener, at problemet ligger hos de iboende definitioner af en Semaforens og en mutex. Hvis du bruger en opgave, så kan vi antage, at ud over at systemet tomgang opgave, at din "APP_TestTask" er den højeste prioritet. Da en mutex inkorporerer prioriteret inversion, og du har også kun én opgave, vil mutex altid falde til "APP_TestTask". En Semaforens imidlertid skaber problemer, da du forsøger at både give væk og tage Semaforens fra en opgave, det væsentlige, er du får til opgave at stall. Jeg har aldrig brugt en Semaforens, når jeg har bare én opgave. Er der en særlig grund til, hvorfor du gør dette? Regards, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top