RTOS (RTX OS) Mutex_Semaphore Problém

L

LOSTISLAND

Guest
Ahoj všem, jsem si myslel, že jediné rozdíly mezi Mutex a semafor je count (Semafor Capability) a inverze priorit (Mutex Capability). Dnes, jsem se setkal něco divného, ​​které možná souvisí s možností inverze priorit, nebo něco jiného. Získání a uvolnění mutex nebo semafory mezi různými úkoly, je jasné, ale když jsem je použít jen v jednom úkolu, jejich chování je odlišné. Použití semafor úkol zamčené, ale pomocí Mutex úkol není uzamčena. Představte si, že tam je jen jedna úloha nazývá 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 něco přirozeného, ​​nebo chyba? Díky pokročilé
 
Domnívám se, že problém spočívá inherentních definic, semafor a mutex. Pokud používáte jeden úkol, pak můžeme předpokládat, že kromě systému nečinná úloha, že vaše "APP_TestTask" je nejvyšší prioritou. Vzhledem k tomu, mutex obsahuje inverze priorit, a také jen jeden úkol, bude mutex vždy spadají do "APP_TestTask". Semafor, nicméně, je příčinou problémů, protože se snažíte jak dát pryč a vzít semafor v rámci úkolu, v podstatě, jste příčinou úkol stání. Nikdy jsem nepoužíval semafor, když mám jen jeden úkol. Je zvláštní důvod, proč děláte to? S pozdravem, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top