RTOS (RTX OS) Mutex_Semaphore Problema

L

LOSTISLAND

Guest
Hola a tots, em va semblar que les úniques diferències entre un mutex i un semàfor és el recompte (Capacitat de Semaphore) i la inversió de prioritats (Capacitat de mutex). Avui m'he trobat una cosa estranya que potser es relaciona amb la capacitat d'inversió de prioritat o alguna cosa més. Obtenir i alliberar mutex o semàfors entre les diferents tasques és clar, però quan els ús en una sola tasca, el seu comportament és diferent. L'ús de semàfors de la tasca està bloquejada però usant mutex la tasca no està bloquejat. Imagina que no és només una tasca anomenada APP_TestTask
Code:
 __ tasques APP_TestTask buit (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 APP_TestTask buit (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 ();}}
És una cosa natural o un error? Gràcies per endavant
 
Crec que el problema radica en les definicions pròpies d'un semàfor i un mutex. Si utilitzeu una tasca, llavors podem suposar que, a més de la tasca d'inactivitat del sistema, que la seva "APP_TestTask" és la més alta prioritat. Des d'un mutex incorpora la inversió de prioritats, i també només té una tasca, el mutex sempre caurà al "APP_TestTask". Un semàfor, però, està causant problemes, ja que tots dos estan tractant de donar i prendre el semàfor des de l'interior d'una tasca, en essència, que està causant la tasca s'aturi. Mai he fet servir un semàfor quan tinc una sola tasca. Hi ha alguna raó específica de per què està fent això? Regards, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top