Viene creato un task generico che fa un solo loop e poi si autodistrugge (vTaskDelete(NULL)) mentre il loop principale continua a rimanere in esecuzione.
-------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
delay(1000);
Serial.print("Setup: Executing on core ");
Serial.println(xPortGetCoreID());
xTaskCreate(
genericTask, /* Task function. */
"genericTask", /* String with name of task. */
10000, /* Stack size in words. */
NULL, /* Parameter passed as input of the task */
2, /* Priority of the task. */
NULL); /* Task handle. */
delay(2000);
}
void loop() {
Serial.print("Main Loop: Executing on core ");
Serial.println(xPortGetCoreID());
delay(1000);
}
void genericTask( void * parameter ){
Serial.print("Created task: Executing on core ");
Serial.println(xPortGetCoreID());
vTaskDelete(NULL);
}
-----------------------------------------------------------------------------------------
Setup: Executing on core 1
Created task: Executing on core 0
Main Loop: Executing on core 1
Main Loop: Executing on core 1
Main Loop: Executing on core 1
Se si usa #include <Arduino_FreeRTOS.h> si vedra' che non esiste nemmeno la funzione xprtoGetCoreID perche' ATMega328 e' un processore single core...i task vengono eseguiti su un unico core dividendo i tick del processore tra i vari task come un time sharing
Le cose non cambiano con la serie Arduino MKR che montano SAM D21 Cortex M0-+ (solo alcuni Cortex di fascia alta sono multi core)
Nessun commento:
Posta un commento