RTOS (RTX OS) Mutex_Semaphore Problém

L

LOSTISLAND

Guest
Ahoj všetkým, som si myslel, že jediné rozdiely medzi Mutex a semafor je count (Semafor Capability) a inverzia priorít (Mutex Capability). Dnes, som sa stretol niečo divného, ​​ktoré možno súvisia s možnosťou inverzie priorít, alebo niečo iné. Získanie a uvoľnenie mutex alebo semafory medzi rôznymi úlohami, je jasné, ale keď som sa použiť len v jednom úlohy, ich správanie je odlišné. Použitie semafor úloha zamknuté, ale pomocou Mutex úloha nie je uzamknutá. Predstavte si, že tam je len jedna úloha nazýva 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 ();}}
Je to niečo prirodzeného, ​​alebo chyba? Vďaka pokročilej
 
Domnievam sa, že problém spočíva inherentných definícií, semafor a mutex. Ak používate jednu úlohu, potom môžeme predpokladať, že okrem systému nečinná úloha, že vaše "APP_TestTask" je najvyššou prioritou. Vzhľadom k tomu, mutex obsahuje inverzie priorít, a tiež len jednu úlohu, bude mutex vždy spadajú do "APP_TestTask". Semafor, však, je príčinou problémov, pretože sa snažíte ako dať preč a vziať semafor v rámci úlohy, v podstate, ste príčinou úlohu státie. Nikdy som nepoužíval semafor, keď mám len jednu úlohu. Je osobitný dôvod, prečo robíte to? S pozdravom, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top