RTOS (RTX OS) Mutex_Semaphore Probleem

L

LOSTISLAND

Guest
Hallo allemaal, ik dacht dat de enige verschillen tussen een Mutex en een semafoor zijn de count (Semaphore Capability) en prioritaire inversie (Mutex Capability). Vandaag heb ik iets vreemds tegengekomen die misschien gerelateerd is aan de prioriteit inversie mogelijkheid of iets anders. Het krijgen van en het vrijgeven van Mutex of Semaforen tussen verschillende taken is duidelijk, maar als ik ze te gebruiken in slechts een taak, hun gedrag is anders. Met behulp van semafoor de taak is gesloten, maar met behulp van Mutex de taak niet is vergrendeld. Stel je voor er is slechts een taak genoemd APP_TestTask
Code:
 __task leegte 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 leegte 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 ();}}
Is het iets natuurlijks of een bug? Alvast bedankt
 
Ik denk dat het probleem ligt bij de inherente definities van een semafoor en een mutex. Als u gebruik maakt van een taak dan kunnen we aannemen dat, naast het systeem inactief taak, dat je "APP_TestTask" is de hoogste prioriteit. Aangezien een mutex bevat prioriteit inversie, en je hebt ook maar een taak, zal de mutex altijd vallen op de "APP_TestTask". Een semafoor is echter voor problemen zorgt, omdat je probeert om zowel de weg te geven en neem de semafoor vanuit een taak, in wezen, je er de oorzaak van de taak tot stilstand. Ik heb nog nooit gebruik gemaakt van een semafoor als ik slechts een taak. Is er een specifieke reden waarom je dit doet? Met vriendelijke groet, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top