• FreeRTOS

Software Timer

Relógios de software são funções de callbacks que são executados pelo RTOS, os callbacks podem ser executados de forma recorrente ou uma única vez (quando o tempo tiver passado).

Para usarmos um timer de software é necessário:

  1. Criar a variável global que representará o timer
    • TimerHandle_t xTimer
  2. Criar a função de callback: void vTimerCallback(TimerHandle_t xTimer) { ... }
  3. Na task, criar o timer:
    • xTimer = xTimerCreate("Timer", 100, pdTRUE, 0, vTimerCallback);
  4. E então ativar o timer:
    • xTimerStart(xTimer, 0);

A função possui os seguintes argumentos: xTimerCreate(pcTimerName, xTimerPeriod, uxAutoReload, pvTimerID, pxCallbackFunction).

  • pcTimerName: É um nome único para o Timer (string).
  • xTimerPeriod: É o período em ticks que o timer vai executar. Ex: 100 executa a aproximadamente 100ms
  • uxAutoReload: pdTRUE se o timer for recorrente e pdFALSE se for executar uma única vez
  • pvTimerID: Não faco ideia.. =)
  • pxCallbackFunction: Função que será chamada quando o timer estourar.

Código exemplo:

TimerHandle_t xTimer;

void vTimerCallback(TimerHandle_t xTimer) {
    printf("estourou \n");
}

static void task_foo(void *pvParameters) {
    xTimer = xTimerCreate("Timer", 100, pdTRUE, 0, vTimerCallback);

    while(1) {
        vtaskDelay(1000);
    }
}