RTOS (RTX OS) Mutex_Semaphore Problemă

L

LOSTISLAND

Guest
Bună tuturor, am crezut ca numai diferențele dintre un mutex și un semafor sunt count (Capability Semafor) și inversiune prioritate (mutex Capability). Astăzi, am întâlnit ceva ciudat, care poate este legat de capacitatea de inversiune prioritate sau altceva. Noțiuni de bază și eliberarea mutex sau semafoare între diferite sarcini este clar, dar când le-am folosi în doar o singură sarcină, comportamentul lor este diferit. Using semafor sarcina este blocat, dar folosind mutex sarcina nu este blocat. Imaginați-vă că este doar o sarcină sunat APP_TestTask
Code:
 __task nule APP_TestTask (void) {pentru (; ;) {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 ();}}
[COD] _task nule APP_TestTask (void) {pentru (; ;) {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 ();}} [/CODE] E ceva natural sau un bug? Multumesc în avansate
 
Eu cred că problema se află cu definițiile inerente ale unui semafor și un mutex. Dacă utilizați o singură sarcină, atunci putem presupune că, în afară de sarcină de sistem inactiv, că dvs. "APP_TestTask" este cea mai mare prioritate. Din moment ce un mutex încorporează inversiune prioritate, și tu, de asemenea, doar o singură sarcină, mutex-ul va cădea întotdeauna la "APP_TestTask". Un semafor, cu toate acestea, este cauzează probleme deoarece sunteți încearcă să dea atât la distanță și să ia semafor din interiorul unei sarcini, în esență, să vă provoacă la standul sarcina. Nu am folosit un semafor cand am doar o singură sarcină. Există un motiv specific pentru ce faci asta? Salutari, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top