RTOS (RTX OS) Mutex_Semaphore Ongelma

L

LOSTISLAND

Guest
Hei kaikki, ajattelin vain erot Mutex ja semafori ovat count (Semaphore Capability) ja ensisijaisten inversio (Mutex Capability). Tänään olen kohdannut jotain outoa, joka ehkä liittyy prioriteetti inversio valmiuksia tai jotain muuta. Getting ja vapauttamalla Mutex tai semaforit eri tehtävissä on selvä, mutta kun käytän niitä vain yksi tehtävä, niiden toiminta on erilainen. Käyttämällä opastin tehtävä on lukittu, mutta käyttäen Mutex tehtävä ei ole lukittu. Kuvittele että on vain yksi tehtävä, jota kutsutaan APP_TestTask [KOODI] __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] [KOODI] _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 ();}} [/CODE] Onko se jotain luonnollista vai bugi? Kiitos etukäteen
 
Uskon, että ongelma on luontainen määritelmiä semaforin ja mutex. Jos käytät yksi tehtävä silloin voimme olettaa, lisäksi järjestelmä toimettomana tehtävän, että "APP_TestTask" on etusijalla. Koska mutex sisältää prioriteetti inversio, ja sinulla on myös vain yksi tehtävä, mutex aina laskee "APP_TestTask". Semaphore kuitenkin aiheuttaa ongelmia, koska yrität sekä lahjoittaa ja ottaa semafori sisällä tehtävän; oleellisesti, olet aiheuttaa tehtävän pilttuu. En ole koskaan käyttänyt semafori kun minulla on vain yksi tehtävä. Onko erityistä syytä, miksi teet tämän? Terveisin, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top