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
Je to niečo prirodzeného, alebo chyba? Vďaka pokročilej
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 ();}}