L'ESP32 2 coeurs
cores/esp32/main.cpp
Le sketck s'exécute sur le cœur 1 par défaut.
Pour exécuter du code sur un cœur en particulier.
Dans l'exemple suivant le sketch lance 2 taches, une écrivant sur le port série et l'autre faisant clignoter une LED. Au bout de quelques secondes le sketch tue la tache de clignotement et laisse la LED éteinte.
//la carte ESP32 DEV KIT V1 a une LED intègré sur la sortie digitale 2 const int LED_BUILTIN = 2; bool killed = false; TaskHandle_t handler_blink_tsk; TaskHandle_t handler_speak_tsk; void setup() { Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); xTaskCreatePinnedToCore( blinkLED, // Nom de la fonction a executer comme tache "blink_task", // nom de la tâche (16 car. max) 1000, // taille de la pile pour la tâche NULL, // arguments pour la fonction 0, // priorité &handler_blink_tsk, // handler pour la tâche 0); // coeur a utiliser xTaskCreatePinnedToCore( speakToMe, // Nom de la fonction a executer comme tache "speak_task", // nom de la tâche (16 car. max) 1000, // taille de la pile pour la tâche NULL, // arguments pour la fonction 0, // priorité &handler_speak_tsk, // handler pour la tâche 1); // coeur a utiliser } void loop() { delay(10000); //apres 10 secondes on arrete le clignotement de la LED if(killed == false) { vTaskDelete(handler_blink_tsk); digitalWrite(LED_BUILTIN, LOW); killed = true; } } void blinkLED(void *arg){ while(true) { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); } } void speakToMe(void *arg){ while(true) { Serial.print('Nb taches: '); Serial .println(uxTaskGetNumberOfTasks()); delay(2000); } }
xTaskCreatePinnedToCore() | Creer un tache et la faire executer par un processeur particulier. |
---|---|
uxTaskGetNumberOfTasks() | Retourne le nombre total de tâches s'exécutant sur les 2 coeurs. |
vTaskDelete() | Tuer la tache dont un handle est passé en paramètre. |