Cómo seleccionar el RTOS correcto y la plataforma de microcontroladores para la IoT
Colaboración de Editores de DigiKey de América del Norte
2019-06-12
Desarrollar un dispositivo de Internet de las cosas (IoT) puede ser más desafiante de lo que muchos desarrolladores o empresas creen. El mero hecho de conectar un sistema integrado a la nube aumenta dramáticamente la complejidad de sincronización para el sistema. Un aumento en la complejidad de sincronización significa que los desarrolladores necesitan una mejor manera de administrar cómo su software decidirá qué código debe ejecutarse y en qué momento. La mejor manera de evitar escribir programadores personalizados o lidiar con la sincronización en el nivel más bajo es utilizar un sistema operativo en tiempo real (RTOS) para administrar las complejidades de sincronización.
Un desafío con el uso de un RTOS hoy en día es que muchos desarrolladores provienen de un entorno simple sin un sistema operativo (OS), y seleccionar el RTOS correcto para una aplicación determinada puede ser desafiante. Una encuesta rápida del mercado en línea de RTOS encontraría que hay más de 100 RTOS disponibles que los desarrolladores pueden usar y que varían desde el código abierto hasta los RTOS comerciales certificados. Entonces, ¿cómo se hace para seleccionar un RTOS y comenzar?
En este artículo, veremos cómo evaluar qué RTOS es mejor para su aplicación y luego examinaremos las plataformas de desarrollo de STMicroelectronics y Renesas que se pueden utilizar para comenzar.
Factores que considerar al seleccionar un RTOS
Los sistemas operativos en tiempo real forman la base sobre la cual los desarrolladores construyen su código de aplicación. Seleccionar el RTOS correcto es fundamental para garantizar que la aplicación se esté construyendo sobre una base sólida y comprobada. Sin embargo, a menudo ocurre que la selección de RTOS se basa en un solo parámetro: el costo.
Si bien el costo es un factor importante que considerar, no debe ser el único. Un equipo de desarrollo podría gastar fácilmente diez veces el costo de un RTOS comercial si tiene dificultades para transportar o implementar, o si carece de soporte para el RTOS que seleccione, sin mencionar el tiempo que se puede perder en un proyecto. En general, hay ocho categorías diferentes que un equipo de desarrollo debe tener en cuenta al seleccionar un RTOS para su aplicación. Entre ellos se incluyen:
- Responsabilidad legal y exposición
- Rendimiento
- Características
- Costo
- Ecosistema
- Middleware
- Proveedor de RTOS
- Preferencia de ingeniería
Dentro de cada categoría puede haber varios criterios que deberían evaluarse para cada RTOS. Por ejemplo, en la categoría de responsabilidad legal, puede que los equipos deseen considerar lo siguiente:
- Responsabilidad por infracción de RTOS
- Indemnización
- Garantía
- La necesidad de que el RTOS se revise desde un punto de vista legal
En la categoría de rendimiento, los desarrolladores pueden considerar lo siguiente:
- Espacio de memoria ejecutable
- Espacio RAM
- El grado más alto de determinismo
- Eficiencia en tiempo de ejecución
Cada categoría principal puede ser examinada por el equipo ejecutivo y de desarrollo para determinar para qué criterios deben evaluarse los ROTS. Una vez que se establecen los criterios, se pueden evaluar varios RTOS diferentes utilizando una matriz de Kepner-Tregoe (KT). Este es un modelo racional para la toma de decisiones que ayuda a recopilar, priorizar y evaluar información con un énfasis en la evaluación y la priorización de riesgo. Elimina la polarización personal del proceso de toma de decisiones y ayuda a llegar a la mejor opción posible con consecuencias negativas mínimas. Examinemos cómo podemos utilizar una matriz KT para seleccionar un RTOS.
Utilizar una matriz KT para seleccionar un RTOS
La matriz KT de selección de RTOS se puede configurar como se muestra en la Figura 1 y la Figura 2. La idea es que para cada una de nuestras categorías de selección identifiquemos nuestros criterios de selección y los enumeremos en una sola columna. Podemos identificar un puntaje para cada criterio que clasifique la importancia de ese criterio para nosotros en una escala del 1 al 5, donde 5 significa que es sumamente importante (p. ej., costo) y 1 significa que no es tan importante (p. ej., responsabilidad legal). Luego, se pueden crear columnas para que cada miembro del equipo clasifique la importancia de cada criterio para cada RTOS en consideración. Luego, cada criterio se puede ponderar y sumar, y se generará un resultado numérico no sesgado. El RTOS con el valor más alto es el RTOS que mejor se ajusta a los criterios.
Figura 1: La mitad superior de la matriz KT de selección de RTOS. Esto incluye la evaluación de la exposición de responsabilidad, el rendimiento de RTOS, las características y el costo. (Fuente de la imagen: Beningo Embedded Group).
Figura 2: La mitad inferior de la matriz KT de selección de RTOS, que incluye evaluar el ecosistema, el middleware, el proveedor y el negocio. (Fuente de la imagen: Beningo Embedded Group).
En los ejemplos mostrados en las Figuras 1 y 2 hay un número de criterios bastante extenso en evaluación. Probablemente, esto va más allá de lo que la mayoría de los equipos de desarrollo estarían interesados en evaluar, pero la cantidad de criterios se puede eliminar fácilmente configurando la ponderación en 0 u ocultando la fila en la hoja de cálculo.
Plataformas en las que lanzar el desarrollo de RTOS
Un área en la que los desarrolladores pueden tener dificultades para evaluar un RTOS es determinar si satisface sus necesidades de rendimiento y capacidades. En muchos casos, un desarrollador no lo sabrá a menos que profundice en su evaluación y se ponga a trabajar utilizando el RTOS. Resulta que una manera extremadamente fácil y económica de evaluar y probar un RTOS es aprovechar una plataforma de desarrollo existente que lo utilice. Veamos algunas plataformas que admiten los populares sistemas operativos de código abierto ThreadX de Express Logic y FreeRTOS.
La primera plataforma que examinaremos es la plataforma STM32Cube de STMicroelectronics. La plataforma STM32Cube admite FreeRTOS como parte de los entornos de desarrollo STM32CubeMx y STM32CubeIDE de STMicroelectronics. Estas herramientas permiten que un desarrollador habilite FreeRTOS simplemente marcando la casilla FreeRTOS y luego utilizando una herramienta de configuración de FreeRTOS para establecer todos los valores de configuración dentro de ella. Esto permite que el desarrollador comience a utilizar FreeRTOS muy rápidamente para empezar a evaluar sus características y rasgos de rendimiento.
Dentro de la cadena de herramientas de STMicroelectronics hay muchas placas de desarrollo diferentes para elegir. Una de las placas de desarrollo probadas y verdaderas que ha sido extremadamente popular a lo largo de los años es la placa STM32F429 Discovery (STM32F429I-DISC1) (Figura 3).
El STM32F429 es un procesador Arm® Cortex®-M4 que funciona a velocidades de hasta 168 megahercios (MHz). El microcontrolador admite 2 megabytes (Mbytes) de flash y 256 kilobytes (Kbytes) de SRAM, que es suficiente código y memoria para desarrollar una aplicación bastante avanzada. La placa de desarrollo también incluye un LCD, varios LED y E/S expansibles.
Figura 3: La placa STM32F429I Discovery es una placa de desarrollo de bajo costo que utiliza un procesador Arm Cortex-M4 para proporcionar una gran potencia de procesamiento a los desarrolladores que buscan evaluar un RTOS. (Fuente de la imagen: STMicroelectronics).
Para los desarrolladores que trabajan con dispositivos periféricos IoT basados en RTOS que también necesiten realizar un aprendizaje automático, la placa STM32F7 Discovery (STM32F746G-DISCO) sería una mejor opción (Figura 4). La placa STM32F7 Discovery se basa en un procesador Arm Cortex-M7, que incluye una caché, funciona a velocidades de reloj de hasta 216 MHz e incluye 1 Mbyte de flash y 340 Kbytes de SRAM. La placa de desarrollo también incluye una pantalla de 4.3 pulgadas de 480 x 272 píxeles, Ethernet, ranura SD, USB y micrófono, y conexiones de altavoces, entre otras características.
Figura 4: La placa STM32F746G Discovery es una placa de desarrollo de bajo costo que utiliza un procesador Arm Cortex-M7 para permitir que los desarrolladores no solo evalúen un RTOS, sino también las inferencias de aprendizaje automático que puedan necesitar en su dispositivo periférico IoT. (Fuente de la imagen: STMicroelectronics).
Una última placa de desarrollo que debe considerarse es la placa Nucleo STM32L0 (NUCLEO-L073RZ) (Figura 5). La placa Nucleo STM32L0 se basa en el Arm Cortex-M0+, que está diseñado para tener el menor consumo de energía posible, algo que lo hace perfecto para dispositivos periféricos de IoT de baja potencia que funcionan con baterías. El microcontrolador STM32L0 funciona a velocidades de reloj de hasta 24 MHz e incluye 192 Kbytes de flash y 20 Kbytes de SRAM. Esto está muy cerca de las características mínimas que cualquiera desearía si tuviera que ejecutar un RTOS. La placa de desarrollo es simple, con un solo interruptor de usuario y un LED.
Figura 5: La placa de desarrollo NUCLEO-L073RZ STM32L0 se basa en un procesador Arm Cortex-M0+ diseñado para proporcionar un alto rendimiento para dispositivos de baja potencia. (Fuente de la imagen: STMicroelectronics).
La segunda plataforma que examinaremos es la plataforma Synergy™ de Renesas. Es única en la industria integrada porque viene con un amplio software de terceros y herramientas de desarrollo de proveedores establecidos.
Por ejemplo, si alguien usara una placa de desarrollo STMicroelectronics y quisiera utilizar ThreadX RTOS de Express Logic con el entorno de desarrollo y compilador de IAR Systems Embedded Workbench, necesitaría acercarse a IAR para el compilador y Express Logic para el RTOS y comprar licencias para usarlos. Sin embargo, si un desarrollador compra un solo microcontrolador que forma parte de la plataforma Synergy de Renesas, automáticamente obtiene estas herramientas y los RTOS para trabajar, además de otros middleware.
Para los desarrolladores que buscan probar ThreadX en un procesador de gama alta, la placa de desarrollo SK-S7G2 Synergy de Renesas (YSSKS7G2E30) es una excelente opción (Figura 6). El SK-S7G2 se basa en un procesador Arm Cortex-M4 que funciona a 240 MHz e incluye 3 Mbytes de flash y 640 Kbytes de RAM. Esta placa de desarrollo viene cargada, incluye un LCD, muchos LED, expansión de E/S, CAN, expansión de PMOD y fácil acceso a puertos seriales y E/S adicionales.
Figura 6: La placa de desarrollo SK-S7G2 Synergy de Renesas viene con herramientas de desarrollo comercial que incluyen los RTOS Express Logic ThreadX. (Fuente de la imagen: Renesas).
Una placa de desarrollo alternativa que se puede utilizar para probar ThreadX es TB-S5D5 Synergy de Renesas (YSTBS5D5E10) (Figura 7). La placa TB-S5D5 es una placa de desarrollo de bajo costo que incluye un procesador Arm Cortex-M4 que funciona a 120 MHz con 1 Mbyte de flash y 384 Kbytes de SRAM. La placa de desarrollo tiene características mínimas para minimizar el costo. Incluye un botón de usuario, tecnología táctil capacitiva y un LED.
Figura 7: La placa de desarrollo TB-S5D5 Synergy de Renesas proporciona a los desarrolladores 1 Mbyte de código flash y 384 Kbytes de SRAM para probar ThreadX. (Fuente de la imagen: Renesas).
Otras opciones interesantes para los desarrolladores, especialmente para aquellos que están interesados en las aplicaciones de IoT, son el kit de IoT AE-Cloud1 Synergy de Renesas, YSAECLOUD1 (Figura 8), y el kit de IoT celular AE-Cloud2 Synergy de Renesas, YSAECLOUD2 (Figura 9).
El kit de IoT Cloud1 Synergy brinda a los desarrolladores la capacidad de conectarse a la nube a través de Wi-Fi, mientras que el kit celular Cloud2 le permite al desarrollador conectarse también a través de una red celular. Ambas placas de desarrollo se basan en el procesador S5D9 e incluyen sensores integrados y LED que se pueden monitorear y controlar desde la nube. Los kits también vienen con software preinstalado que incluye ThreadX y permite que un desarrollador pruebe una solución de conectividad completa con su RTOS. (Esto puede ayudar al desarrollador a que evalúe la sección de middleware de la matriz KT discutida anteriormente).
Figura 8: El kit de IoT AE-Cloud1 Synergy de Renesas es una placa de desarrollo diseñada específicamente para dispositivos de IoT que se conectarán a la nube a través de Wi-Fi. Incluye la capacidad de controlar los LED y monitorear los valores de los sensores de un proveedor en la nube como Amazon Web Services (AWS) o Microsoft Azure. (Fuente de la imagen: Renesas).
Figura 9: El kit de IoT celular AE-Cloud2 Synergy de Renesas es una placa de desarrollo diseñada para dispositivos de IoT que se conectarán a la nube a través de Wi-Fi o celular. Incluye la capacidad de controlar los LED y monitorear los valores de los sensores de un proveedor de la nube como AWS o Azure. (Fuente de la imagen: Renesas).
Una nota importante sobre plataformas: Al evaluar un RTOS en una, asegúrese de que está realizando una comparación equivalente. Por ejemplo, si evalúa FreeRTOS en la placa STM32F429 Discovery que se ejecuta a 168 MHz, asegúrese de usar la misma placa de desarrollo o una que se ejecute a la misma velocidad de reloj para evaluar sus otros RTOS.
Consejos y trucos para utilizar un RTOS
Cada RTOS tiene sus propios “consejos y trucos”, pero hay varias reglas de oro que se pueden aplicar a los RTOS de forma genérica:
- Asignar estáticamente tareas y objetos RTOS. La asignación dinámica de tareas y objetos requiere el uso de la asignación de memoria (malloc()), que no es determinista y puede causar muchos problemas de fragmentación del montón que conducen a un rendimiento deficiente o incluso a fallas del sistema en el peor de los casos.
- Cambiar el tamaño de pila predeterminado según las necesidades de su aplicación. Muchos RTOS proporcionan un valor de pila predeterminado que está sobredimensionado para la mayoría de las tareas, lo que da como resultado una memoria RAM desperdiciada. Configure manualmente el tamaño de pila predeterminado, pero también asegúrese de ajustar el tamaño de pila para cada tarea según su función y necesidades.
- Las funciones que se llaman desde una tarea deben ser reentrantes. Esto garantiza que si se llama a la función desde múltiples tareas no habrá riesgo de corromper los datos de la otra tarea si fue interrumpida por una tarea de mayor prioridad.
- Utilice grupos de bloques de memoria si están disponibles. Un grupo de bloques de memoria es un grupo de memoria que tiene un comportamiento determinista y se puede usar durante el tiempo de ejecución para asignar memoria dinámicamente. Esta es una opción mejor que usar malloc(), pero la mayoría de los sistemas operativos de código abierto no incluyen esta capacidad de administración de memoria.
- Minimiza el número de tareas utilizadas en la aplicación. Si bien es tentador crear muchas tareas a través de un RTOS, la creación de tareas innecesarias puede reducir drásticamente la memoria disponible debido a la necesidad del bloque de control de tareas y el espacio de pila separado asociado con él.
Conclusión
A medida que la IoT impulsa la necesidad de aumentar la complejidad del software en los sistemas integrados, el uso de un RTOS se ha convertido en un requisito para ayudar a los desarrolladores a lidiar con esta complejidad y abstraerla. El truco, sin embargo, no es seleccionar cualquier RTOS. Dado que no todos los RTOS se crean de la misma manera, se puede desperdiciar mucho tiempo y esfuerzo si el RTOS está luchando contra los propósitos de los desarrolladores.
En su lugar, los desarrolladores deben adoptar un enfoque proactivo para su selección de RTOS y evaluar cuidadosamente todos los aspectos diferentes no solo del RTOS, sino también de las consideraciones periféricas como el proveedor del RTOS y el soporte disponible cuando se presentan problemas. Un enfoque efectivo es comenzar con una matriz KT para evaluar cuidadosamente los RTOS que se están considerando, y luego ejecutar el RTOS de elección en plataformas de microcontroladores que puedan admitirlo por completo para asegurarse de que sea el adecuado para la aplicación.
Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.




