L
LOSTISLAND
Guest
Witam wszystkich, myślałem, że jedyne różnice między mutex i semafora to count (Capability Semaphore) i inwersji priorytet (Capability Mutex). Dzisiaj, z jaką się spotkałem coś dziwnego co może jest związane z możliwością inwersji priorytetu lub coś innego. Uzyskanie i zwolnienie Mutex lub semafory pomiędzy różnymi zadaniami jest jasne, ale kiedy ich używać tylko w jednym zadaniu, ich zachowanie jest inne. Korzystanie semafora zadaniem jest zablokowany, ale przy użyciu Mutex zadanie nie jest zablokowana. Wyobraź sobie, że jest tylko jedno zadanie nazywa APP_TestTask
Czy to jest coś naturalnego lub błąd? Podziękowania w zaawansowanych
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 ();}}