Ciao, sto provando freeRTOS con una mega2560 pro mini.
Il programma di prova dovrebbe far accendere il led integrato (pin13) per 20ms, ad intervalli di x millisecondi.
Finchè l'intervallo di lampeggio sta sotto i 1000ms tutto ok, sopra i 1000ms il comportamento è bizzarro. Se imposto 1100 ms ottengo una frequenza di 30Hz(invece di 0.9Hz), se imposto 1500ms ottengo 2.23Hz (invece di 0.66Hz), se imposto 2000ms ottengo 1.04Hz (invece di 0.5Hz)
Non riesco a capire dove sta l'inghippo, uso la funzione vTaskDelayUntil() e pdMS_TO_TICKS()
il codice
#include <Arduino_FreeRTOS.h>
void TaskBlink(void *pvParameters);
void setup() {
xTaskCreate(TaskBlink, (const portCHAR *)"Blink", 128, NULL, 2, NULL);
}
void loop() {
// put your main code here, to run repeatedly:
}
void TaskBlink(void *pvParameters) // This is a task.
{
pinMode(LED_BUILTIN, OUTPUT);
TickType_t xLastWakeTime;
const TickType_t xPeriod = pdMS_TO_TICKS(2000);
xLastWakeTime = xTaskGetTickCount();
for (;;) // A Task shall never return or exit.
{
vTaskDelayUntil( &xLastWakeTime, xPeriod );
digitalWrite(LED_BUILTIN, HIGH);
vTaskDelay( pdMS_TO_TICKS( 20 ) );
digitalWrite(LED_BUILTIN, LOW);
}
}
mi servirebbe una dritta (magari da un mod a caso, che mi pare sia esperto )