From be081ac02674ea42a94f7fed3bb33c455f6eb91f Mon Sep 17 00:00:00 2001 From: Muhammad Lutfi Santoso Date: Mon, 17 Dec 2018 00:09:57 +0700 Subject: [PATCH] Add FreeRTOS multi-thread example (#2067) * Add FreeRTOS exsample * Update Code * Change stack size * Fix LED_BUILTIN not defined Fix LED_BUILTIN not defined --- libraries/FreeRTOS/FreeRTOS.ino | 97 +++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 libraries/FreeRTOS/FreeRTOS.ino diff --git a/libraries/FreeRTOS/FreeRTOS.ino b/libraries/FreeRTOS/FreeRTOS.ino new file mode 100644 index 00000000000..b120f29268a --- /dev/null +++ b/libraries/FreeRTOS/FreeRTOS.ino @@ -0,0 +1,97 @@ +#if CONFIG_FREERTOS_UNICORE +#define ARDUINO_RUNNING_CORE 0 +#else +#define ARDUINO_RUNNING_CORE 1 +#endif + +#ifndef LED_BUILTIN +#define LED_BUILTIN 13 +#endif + +// define two tasks for Blink & AnalogRead +void TaskBlink( void *pvParameters ); +void TaskAnalogReadA3( void *pvParameters ); + +// the setup function runs once when you press reset or power the board +void setup() { + + // initialize serial communication at 115200 bits per second: + Serial.begin(115200); + + // Now set up two tasks to run independently. + xTaskCreatePinnedToCore( + TaskBlink + , "TaskBlink" // A name just for humans + , 1024 // This stack size can be checked & adjusted by reading the Stack Highwater + , NULL + , 2 // Priority, with 3 (configMAX_PRIORITIES - 1) being the highest, and 0 being the lowest. + , NULL + , ARDUINO_RUNNING_CORE); + + xTaskCreatePinnedToCore( + TaskAnalogReadA3 + , "AnalogReadA3" + , 1024 // Stack size + , NULL + , 1 // Priority + , NULL + , ARDUINO_RUNNING_CORE); + + // Now the task scheduler, which takes over control of scheduling individual tasks, is automatically started. +} + +void loop() +{ + // Empty. Things are done in Tasks. +} + +/*--------------------------------------------------*/ +/*---------------------- Tasks ---------------------*/ +/*--------------------------------------------------*/ + +void TaskBlink(void *pvParameters) // This is a task. +{ + (void) pvParameters; + +/* + Blink + Turns on an LED on for one second, then off for one second, repeatedly. + + If you want to know what pin the on-board LED is connected to on your ESP32 model, check + the Technical Specs of your board. +*/ + + // initialize digital LED_BUILTIN on pin 13 as an output. + pinMode(LED_BUILTIN, OUTPUT); + + for (;;) // A Task shall never return or exit. + { + digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) + vTaskDelay(100); // one tick delay (15ms) in between reads for stability + digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW + vTaskDelay(100); // one tick delay (15ms) in between reads for stability + } +} + +void TaskAnalogReadA3(void *pvParameters) // This is a task. +{ + (void) pvParameters; + +/* + AnalogReadSerial + Reads an analog input on pin A3, prints the result to the serial monitor. + Graphical representation is available using serial plotter (Tools > Serial Plotter menu) + Attach the center pin of a potentiometer to pin A3, and the outside pins to +5V and ground. + + This example code is in the public domain. +*/ + + for (;;) + { + // read the input on analog pin A3: + int sensorValueA3 = analogRead(A3); + // print out the value you read: + Serial.println(sensorValueA3); + vTaskDelay(10); // one tick delay (15ms) in between reads for stability + } +}