Introduction to RTOS Part 2 - Getting Started with FreeRTOS | Digi-Key Electronics
Introduction to FreeRTOS on ESP32
Overview of the Series
- The series will cover general RTOS concepts and demonstrate their implementation using FreeRTOS on an ESP32.
- The Arduino IDE will be used for simplicity, starting with downloading the FreeRTOS source code.
Getting Started with FreeRTOS
- Visit freeRTOS.org to download the source code; documentation is available under Kernel > Getting Started for building demo applications.
- Including FreeRTOS in a project requires specific C and header files, along with selecting a heap management file. A microcontroller timer must be assigned as the RTOS tick timer.
Resources for Learning FreeRTOS
Recommended Reading
- For assistance, download "Mastering the FreeRTOS Real-Time Kernel" and the reference manual from the books link on freeRTOS.org.
Understanding Library Structure
- The FreeRTOS library functions as a scheduler; additional drivers are included in the FreeRTOS Plus library primarily for networking (TCP/UDP).
- Example projects can be found in the demo folder, which includes config files defining important variables necessary for your project setup.
ESP32 Specific Considerations
Modified Version of FreeRTOS
- The ESP32 uses a modified version of FreeRTOS within its ESP-IDF framework to support its dual-core processor architecture (SMP).
Limiting Core Usage
- This series will limit tasks to one core for simplicity; understanding multi-core support can be explored later through ESP32 documentation.
Setting Up Arduino IDE for ESP32
Installation Steps
- Install Arduino IDE and add Espressif's board manager URL:
https://dl.espressif.com/dl/package_esp32_index.json.
Configuring Board Settings
- Search and install the latest version of Espressif Systems' ESP32 package via Tools > Board > Board Manager.
FreeRTOS Configuration on ESP32
Accessing Configuration Files
- Locate
FreeRTOS config.hfile in your Arduino board packages directory to understand how FreeRTOS is configured specifically for ESP32.
Key Configuration Insights
- The configuration allows up to 25 priority levels and sets a minimum task stack size of 768 bytes. Use this file as a reference when adjusting settings.
Creating Tasks in FreeRTOS
Defining Tasks
- Define constants that restrict task creation to one core; typically not recommended but useful for learning purposes.
Implementing Blinky Program
Understanding RTOS and Task Management in FreeRTOS
Tick Timer and Task Scheduling
- Most Real-Time Operating Systems (RTOS) utilize a tick timer, which is a hardware timer that interrupts the processor at regular intervals.
- The interval of these interrupts is referred to as a "tick," allowing the scheduler to determine which task should run during each tick.
- In FreeRTOS, the default tick period is set to one millisecond, with
portTICK_PERIOD_MSdefined as one.
Creating Tasks in FreeRTOS
- The function
vTaskDelayrequires ticks for delay rather than milliseconds; thus, desired milliseconds must be divided by the tick period.
- To create tasks,
xTaskCreatePinnedToCorecan be used to specify which core will execute the task; this function is not available in Vanilla FreeRTOS.
- While
xTaskCreateworks in ESP-IDF, it allows the scheduler to choose any core for task execution.
Task Parameters and Configuration
- When creating a task, parameters include specifying the function to call, naming the task, setting stack size (minimum 768 bytes), and defining priority levels (0 being lowest).
- A pointer or handle can be assigned for managing tasks from other tasks or loops; this helps monitor status and memory usage.
Execution Flow in ESP32 Environment
- In Arduino framework for ESP32, setup and loop functions operate within their own tasks separate from main program entry points.
- New tasks begin executing automatically without needing to call
vTaskStartScheduler, as it has already been invoked prior to setup.
Practical Application: LED Blinking Challenge
- After configuring everything correctly, an LED should blink once per second as a basic outcome of the setup process.