This shows you the differences between two versions of the page.
|
patr:laboratoare:08 [2022/01/06 14:49] alexandru.ionita99 |
patr:laboratoare:08 [2022/02/17 09:47] (current) alexandru.ionita99 |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Laboratorul 08. Timing & Timere ===== | + | ===== Laboratorul 08 - Timing & Timere ===== |
| ==== Timere Arduino ==== | ==== Timere Arduino ==== | ||
| Line 13: | Line 13: | ||
| ==== Software Timer API ==== | ==== Software Timer API ==== | ||
| - | Timerele menționate anterior sunt **hardware**, iar utilizarea lor nu este cea mai facilă. FreeRTOS simplifică acest lucru, printr-un API specializat în crearea de timere **software**. Aceste timere sunt mai ușor de utilizat, întrucât funcționează ca o punte între programator și circuitele electronice. | + | Timerele menționate anterior sunt **hardware**, iar utilizarea lor nu este cea mai facilă. FreeRTOS simplifică acest lucru, printr-un API specializat în crearea de timere **software**. Aceste timere sunt mai ușor de utilizat, întrucât funcționează ca o punte între programator și circuitele electronice. Pe lângă bilbioteca FreeRTOS, trebuie inclusă în proiect și biblioteca //timers.h// |
| În [[https://www.freertos.org/fr-content-src/uploads/2018/07/FreeRTOS_Reference_Manual_V10.0.0.pdf|documentația FreeRTOS]], informații despre acest API se găsesc începând cu pagina 253. | În [[https://www.freertos.org/fr-content-src/uploads/2018/07/FreeRTOS_Reference_Manual_V10.0.0.pdf|documentația FreeRTOS]], informații despre acest API se găsesc începând cu pagina 253. | ||
| - | === 1. Creare timer === | + | === 1. Crearea unui timer === |
| Pentru a crea un timer software, este utilizată funcția **TimerHandle_t xTimerCreate( const char *pcTimerName, const TickType_t xTimerPeriod, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction );**, care se apelează pentru un element de tipul **TimerHandle_t**. Parametrii funcției sunt: | Pentru a crea un timer software, este utilizată funcția **TimerHandle_t xTimerCreate( const char *pcTimerName, const TickType_t xTimerPeriod, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction );**, care se apelează pentru un element de tipul **TimerHandle_t**. Parametrii funcției sunt: | ||
| * *pcTimerName - Un nume atribuit timer-ului | * *pcTimerName - Un nume atribuit timer-ului | ||
| - | * xTimerPeriod - Numărul de **cicli procesor** după care timer-ul va expira | + | * xTimerPeriod - Numărul de **cicli de ceas** după care timer-ul va expira |
| * uxAutoReload - Specificăm dacă timer-ul va expira după perioada xTimerPeriod sau va fi automat rearmat | * uxAutoReload - Specificăm dacă timer-ul va expira după perioada xTimerPeriod sau va fi automat rearmat | ||
| * pvTimerID - un număr care să identifice în mod unic timer-ul | * pvTimerID - un număr care să identifice în mod unic timer-ul | ||
| Line 27: | Line 27: | ||
| Pentru orice valoare diferită de NULL întoarsă de funcție, timer-ul a fost creat cu succes | Pentru orice valoare diferită de NULL întoarsă de funcție, timer-ul a fost creat cu succes | ||
| - | <note important>Parametrul //xTimerPeriod// definește numărul de cicli procesor. Pentru a converti timpul din milisecunde în cicli procesor, utilizați funcția **pdMS_TO_TICKS()**</note> | + | <note important>Parametrul //xTimerPeriod// definește numărul de cicli de ceas. Pentru a converti timpul din milisecunde în cicli de ceas, utilizați funcția **pdMS_TO_TICKS()**</note> |
| **Exemplu:** | **Exemplu:** | ||
| <code c> | <code c> | ||
| + | #include <Arduino_FreeRTOS.h> | ||
| + | #include <timers.h> | ||
| + | |||
| // Declarare element de tipul TimerHandle_t | // Declarare element de tipul TimerHandle_t | ||
| TimerHandle_t xTimer; | TimerHandle_t xTimer; | ||
| Line 82: | Line 85: | ||
| else | else | ||
| { | { | ||
| - | // Timer creat cu succes. Se încearcă activarea acestuia. Se așteaptă maxim 10 cicli procesor pentru a fi activat. | + | // Timer creat cu succes. Se încearcă activarea acestuia. Se așteaptă maxim 10 cicli de ceas pentru a fi activat. |
| if( xTimerStart( xTimer, 10 ) != pdPASS ) | if( xTimerStart( xTimer, 10 ) != pdPASS ) | ||
| { | { | ||
| Line 133: | Line 136: | ||
| - | === 3. Funcții utile === | + | === 3. Alte funcții utile === |
| * **xTimerGetExpiryTime( TimerHandle_t xTimer)** - după cât timp (în cicli) va expira timer-ul **activ** specificat ca parametru? | * **xTimerGetExpiryTime( TimerHandle_t xTimer)** - după cât timp (în cicli) va expira timer-ul **activ** specificat ca parametru? | ||
| * **pcTimerGetName( TimerHandle_t xTimer )** - care este numele timer-ului? | * **pcTimerGetName( TimerHandle_t xTimer )** - care este numele timer-ului? | ||