Me preguntaba cómo puedo demorar más tiempo usando la función vTaskDelay () de freertos. Debido a que el número más grande que puede almacenar en un entero sin signo de 16 bits es 65535, el más largo que puedo demorar es un poco menos de 2 horas. Actualmente he implementado un método que utiliza un contador. ¿Es este enfoque el mejor o hay otra manera?
void vSomeTask(void) {
static int16_t counter = 0;
// DO SOMETHING
//WAIT 24 Hours
while (counter != 23) {
vTaskDelay((1000*3600) / portTICK_RATE_MS);
counter++
}
counter = 0;
//DO SOMETHING ELSE AFTER ONE DAY DELAY
vTaskDelete(NULL);
}
EDIT: Acabo de darme cuenta de que, debido a que vTaskDelay es relativo, no tiene en cuenta el tiempo que transcurre después de que finaliza el retraso si otras tareas de mayor prioridad siguen ejecutándose. Por lo tanto, un enfoque más refinado sería obtener la hora actual y, en su lugar, utilizar vTaskDelayUntil () porque se basa en el tiempo absoluto.