Differences

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

Link to this comparison view

patr:laboratoare:07 [2022/01/12 15:20]
alexandru.ionita99
patr:laboratoare:07 [2022/02/14 15:16] (current)
alexandru.ionita99 [Task-uri FreeRTOS]
Line 93: Line 93:
  ​TaskHandle_t xHandle;  ​TaskHandle_t xHandle;
  
- // ​Creem task-ul+ // ​Creăm ​task-ul
  if( xTaskCreate(  if( xTaskCreate(
  ​vTaskCode,​ //Pointer către funcția ce va rula la pornirea task-ului  ​vTaskCode,​ //Pointer către funcția ce va rula la pornirea task-ului
Line 147: Line 147:
 === vTaskDelay() === === vTaskDelay() ===
  
-O funcție foarte importantă din Task API este **void vTaskDelay( TickType_t xTicksToDelay );**. Aceasta înlocuiește clasica funcție **delay()** din Arduino. Funcția plasează **task-ul din care a fost apelată** în starea **BLOCAT** pentru o perioadă de X cicli de ceas, unde X este oferit ca parametru, timp în care alte task-uri, de exemplu cele cu o prioritate mai mică, pot accesa procesorul. ​+O funcție foarte importantă din Task API este **void vTaskDelay( TickType_t xTicksToDelay );**. Aceasta înlocuiește clasica funcție **delay()** din Arduino. Funcția plasează **task-ul din care a fost apelată** în starea **BLOCAT** pentru o perioadă de X ticks, unde X este oferit ca parametru, timp în care alte task-uri, de exemplu cele cu o prioritate mai mică, pot accesa procesorul. ​
  
-Pentru a transforma timpul din milisecunde în cicli de ceas, utilizăm funcția **pdMS_TO_TICKS()**.+Pentru a transforma timpul din milisecunde în ticks, utilizăm funcția **pdMS_TO_TICKS()**.
  
 <note warning>​Utilizarea funcției **delay()** nu este recomandată împreună cu FreeRTOS, deoarece conduce la **suspendarea activității procesorului**,​ adică a tutoror task-urilor care rulează. Dacă în cazul programării clasice, acest aspect nu era o problemă (exista un singur task), în cazul FreeRTOS pot apărea efecte neașteptate.</​note>​ <note warning>​Utilizarea funcției **delay()** nu este recomandată împreună cu FreeRTOS, deoarece conduce la **suspendarea activității procesorului**,​ adică a tutoror task-urilor care rulează. Dacă în cazul programării clasice, acest aspect nu era o problemă (exista un singur task), în cazul FreeRTOS pot apărea efecte neașteptate.</​note>​
Line 162: Line 162:
  {  {
   ...   ...
- // Intră în starea BLOCAT pentru 20 ticks (cicli de ceas)+ // Intră în starea BLOCAT pentru 20 ticks
  ​vTaskDelay( 20 );  ​vTaskDelay( 20 );
  
Line 171: Line 171:
  
 </​code>​ </​code>​
 +
 +=== Alte funcții utile ===
 +
 +  * **vTaskDelete( TaskHandle_t pxTask ) ** - Șterge task-ul aferent hande-ului oferit ca parametru. Este eliberată memoria alocată automat la momentul creării task-ului
 +  * **xTaskGetCurrentTaskHandle() ** - Este întors handle-ul task-ului care se află **în execuție** la acel moment
 +  * **xTaskGetHandle( const char *pcNameToQuery ) ** - Este întors handle-ul task-ului cu numele oferit ca parametru
 +  * **pcTaskGetName( TaskHandle_t xTaskToQuery ) ** - Întoarce numele task-ului referit prin handle
 +  * **uxTaskPriorityGet( TaskHandle_t pxTask ) ** - Întoarce prioritatea task-ului referit prin hadle, la acel moment
 +  * **vTaskPrioritySet( TaskHandle_t pxTask, UBaseType_t uxNewPriority ) ** - Setează o nouă prioritate pentru un task
 +  * **vTaskSuspend( TaskHandle_t pxTaskToSuspend ) ** - Pune task-ul în starea **Suspendat**
 +  * **vTaskResume( TaskHandle_t pxTaskToResume) ** - Pune task-ul în starea **Running**. Funcționează doar pentru task-uri **suspendate**
 +  * **taskYIELD() ** - Se apelează dintr-un task **Running**,​ care iși oferă partiția de timp către alte task-uri **de aceeași prioritate**
patr/laboratoare/07.1641993628.txt.gz · Last modified: 2022/01/12 15:20 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