This is an old revision of the document!
Platforma Ardunio utilizează microcontrollere din familia Atmel megaAVR, ce conțin un număr de timere hardware:
În modul de lucru clasic, timer0 este utilizat de funcțiile delay(), millis() și micros(). În plus, timerele controlează și pinii PWM ai plăcuțelor Arduino.
Timerele pot fi modificate manual, în funcție de comportamentul dorit, prin regiștrii corespunzători. Pentru a găsi acești regiștri și biții ce trebuie modificați, trebuie să consultați documentația microcontroller-ului. De exemplu, pentru ATmega328, documentația poate fi găsită aici. La pagina 74 puteți găsi informații despre timer-ul pe 8 biți și regiștrii acestuia.
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.
În documentația FreeRTOS, informații despre acest API se găsesc începând cu pagina 253.
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 orice valoare diferită de NULL întoarsă de funcție, timer-ul a fost creat cu succes
Exemplu:
// Declarare element de tipul TimerHandle_t TimerHandle_t xTimer; void setup() { // Creare timer cu numele "Timer", care expiră la fiecare 100ms și apelează funcția vTimerCallback xTimer = xTimerCreate("Timer", pdMS_TO_TICKS(100), pdTRUE, ( void * ) 0, vTimerCallback ); if( xTimer == NULL) { // Timer-ul nu a fost creat } else { // Timer creat cu succes } } // Declarare funcție ce va fi apelată la epirarea timer-ului. Necesită TimerHandle_t ca parametru pentru a recunoaște timer-ul care a apelat funcția void vTimerCallback( TimerHandle_t X ) { ... }