Differences

This shows you the differences between two versions of the page.

Link to this comparison view

patr:laboratoare:10 [2022/01/12 15:21]
alexandru.ionita99
patr:laboratoare:10 [2022/01/13 14:00] (current)
alexandru.ionita99
Line 7: Line 7:
 FreeRTOS utilizează următoarele tipuri de semafoare, pe care le vom detalia în continuare: FreeRTOS utilizează următoarele tipuri de semafoare, pe care le vom detalia în continuare:
   * Semafoare binare   * Semafoare binare
 +  * Semafoare generalizate
   * Mutexuri   * Mutexuri
-  * Semafoare generalizate 
- 
-Semafoarele binare și mutexurile sunt similare, dar prezintă două diferențe principale: 
-  * Task-ul care a blocat mutexul trebuie obligatoriu să îl și deblocheze pentru a permite accesul altor task-uri la mutex 
-  * Mutexul oferă un mecanism de prioritizare:​ 
-       * Dacă un task cu prioritate mai mare vrea să blocheze un mutex deja folosit, task-ul care utilizează în prezent mutexul va avea crescută temporar prioritatea 
-       * Este implementată o coadă cu priorități pentru task-urile care vor să blocheze un mutex 
- 
  
-În schimb, semafoarele binare ​blocate pot fi deblocate de orice alt task și nu există un mecanism de prioritizare+În cadrul acestui laboratorvom discuta despre ​semafoarele binare și cele generalizate,​ urmând ca în următorul să fie prezentate mutexurile.
  
 Toate tipurile de semafore, similar altor elemente din FreeRTOS, sunt referite cu ajutorul **handle-urilor**. În plus, pentru a le utiliza, este necesară declararea bilbiotecii **semphr.h**,​ alături de clasica **Arduino_FreeRTOS.h**. ​ Toate tipurile de semafore, similar altor elemente din FreeRTOS, sunt referite cu ajutorul **handle-urilor**. În plus, pentru a le utiliza, este necesară declararea bilbiotecii **semphr.h**,​ alături de clasica **Arduino_FreeRTOS.h**. ​
Line 38: Line 31:
 === Semafoare binare === === Semafoare binare ===
  
-După cum am specificat anterior, există câteva diferențe între ​semafoarele binare ​și mutexuri. Întrucât pot fi deblocate de orice task, semafoarele binare sunt mai potrivite atunci când avem nevoie de o sincronizare ​a două taskuri. De exemplu, un task mai rapid poate fi blocat la un semafor până când un task mai lent ajunge într-un punct în care îl deblochează. \\+O situație în care semafoarele binare ​se pretează este sincronizarea ​a două task-uri. De exemplu, un task mai rapid poate fi blocat la un semafor până când un task mai lent ajunge într-un punct în care îl deblochează. \\
  
 +Diferențele dintre mutexuri și semafoarele binare vor fi prezentate în cadrul laboratorului viitor. Momentan, ne vom orienta atenția către crearea semafoarelor binare. ​
  
 Pentru a crea un semafor binar, este utilizată funcția ** xSemaphoreCreateBinary() **. Aceasta alocă spațiu în heap pentru semaforul binar și îl creează, cu starea inițială este "​blocat"​. Dacă valoarea întoarsă este NULL, nu există suficientă memorie disponibilă. \\ Pentru a crea un semafor binar, este utilizată funcția ** xSemaphoreCreateBinary() **. Aceasta alocă spațiu în heap pentru semaforul binar și îl creează, cu starea inițială este "​blocat"​. Dacă valoarea întoarsă este NULL, nu există suficientă memorie disponibilă. \\
Line 79: Line 73:
  
 În exemplul de mai sus, handle-ul a fost declarat în interiorul unui task și nu sub formă de variabilă globală. ​ În exemplul de mai sus, handle-ul a fost declarat în interiorul unui task și nu sub formă de variabilă globală. ​
-=== Mutexuri === 
  
-Utilizate în principal pentru gestionarea accesului la o resursă partajată, mutexurile sunt create cu ajutorul funcției ** xSemaphoreCreateMutex()**. ​ 
- 
-**Exemplu:​** 
-<code c> 
-SemaphoreHandle_t xSemaphore; 
-void vATask( void * pvParameters ) 
-{ 
- ​xSemaphore = xSemaphoreCreateMutex();​ // Apelare funcție creare mutex 
- if( xSemaphore == NULL ) 
- { 
- /* Spațiu de memorie insuficient */ 
- } 
- else 
- { 
- /* Mutexul poate fi utilizat */ 
- } 
-} 
- 
-</​code>​ 
  
  
patr/laboratoare/10.1641993701.txt.gz · Last modified: 2022/01/12 15:21 by alexandru.ionita99
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0