Introduction to RTOS Part 2 - Getting Started with FreeRTOS | Digi-Key Electronics
Introducción a FreeRTOS en ESP32
Conceptos Generales de RTOS
- En esta serie, se abordarán conceptos generales de RTOS y su implementación usando FreeRTOS en un ESP32, utilizando el Arduino IDE para simplificar el proceso.
- Se recomienda visitar la documentación de FreeRTOS para entender cómo construir y ejecutar aplicaciones demo que vienen con el código fuente.
Integración de FreeRTOS en Proyectos
- Incluir FreeRTOS en un proyecto es sencillo; se deben incluir archivos C y encabezados específicos, además de elegir un archivo de gestión de heap.
- Es importante asignar uno de los temporizadores del microcontrolador como el temporizador tick del RTOS.
Recursos Adicionales para Aprender sobre FreeRTOS
Documentación y Libros Recomendados
- Se sugiere descargar "Mastering the FreeRTOS Real-Time Kernel" y el manual de referencia para facilitar la navegación por FreeRTOS.
- La biblioteca FreeRTOS es solo un programador; la biblioteca FreeRTOS Plus incluye controladores adicionales, principalmente para redes como TCP y UDP.
Ejemplos Prácticos
- Al explorar ejemplos, se debe prestar atención al archivo config que define variables importantes.
- El ESP32 utiliza una versión modificada de FreeRTOS dentro del marco ESP-IDF, soportando arquitectura SMP (multiprocesamiento simétrico).
Configuraciones Específicas del ESP32
Instalación del Entorno Arduino
- Para usar el ESP32 con Arduino IDE, se deben agregar URLs específicas en las preferencias del gestor de placas.
- Los ajustes en un archivo config.h son cruciales; este archivo determina configuraciones como niveles de prioridad y tamaño mínimo del stack.
Definición y Creación de Tareas
- Al definir tareas, es esencial informar al programador sobre ellas para que pueda priorizarlas adecuadamente. Las funciones deben devolver nada y aceptar un puntero void como parámetro.
Implementación Práctica: Programa Blinky
Creando el Programa Clásico Blinky
- En este ejemplo clásico, se encenderá un LED durante 500 ms y luego se apagará durante 500 ms.
¿Cómo funcionan los RTOS y la creación de tareas en FreeRTOS?
Introducción a los RTOS y el temporizador de ticks
- La mayoría de los sistemas operativos en tiempo real (RTOS) utilizan un temporizador de ticks, que es un temporizador de hardware del microcontrolador que interrumpe al procesador a intervalos específicos.
- El período de interrupción se conoce como "tick", y el planificador tiene la oportunidad de determinar qué tarea debe ejecutarse en cada tick.
- FreeRTOS establece por defecto el período del tick en un milisegundo, definiendo
portTICK_PERIOD_MScomo uno.
Creación y configuración de tareas
- La función
vTaskDelayespera el número de ticks para retrasar, no el número de milisegundos; por lo tanto, se debe dividir los milisegundos deseados por el período del tick.
- Al usar
xTaskCreatePinnedToCore, se indica al planificador que la tarea debe ejecutarse solo en uno de los núcleos disponibles. Esta función no está presente en Vanilla FreeRTOS; se utilizaríaxTaskCreateen su lugar.
Parámetros importantes para las tareas
- Se deben especificar varios parámetros: la función a llamar para la tarea, un nombre para la tarea como cadena, y el tamaño del stack en bytes (mínimo 768 bytes).
- La prioridad de la tarea puede variar entre cero (baja prioridad) y 24 (alta prioridad), siendo 25 el máximo configurado por defecto.
Ejecución y gestión de tareas
- En Arduino con ESP32, las funciones
setupyloopexisten dentro de su propia tarea separada del punto principal del programa.
- Las funciones corren con una prioridad establecida (uno en este caso), lo que puede afectar otras tareas si tienen menor prioridad.
Desafío práctico