
Escribir firmware para los interiores de la electrónica integrada moderna es prácticamente imposible de escribir desde cero. Simplemente no dan tiempo para esto. Por lo tanto, el software para sistemas integrados se basa en
plataformas de software listas para usar - marcos. Cuanto más desarrollado sea el marco, más rápido será el desarrollo. Aquí hablaremos sobre el marco que creé específicamente para los módulos de control de motores y que se ha utilizado con éxito durante algún tiempo.
La arquitectura del marco.
El marco está diseñado para funcionar en la plataforma abierta del módulo de control de motor universal
DMC v2.0 .
La arquitectura lógica del marco se puede representar como un diagrama de bloques, como se muestra a continuación. En el diagrama de flujo, se omite una lista completa de todos los componentes del marco, ya que esto dañaría la claridad, pero para una idea general, creo, la granularidad es suficiente.

(Click para ampliar)El marco no tiene versiones, está en constante desarrollo, y aquí solo intenté arreglar su estado actual, que está publicado en GitHub.
Desde el punto de vista de los módulos de software, el marco contiene las siguientes partes clave:
- Un conjunto de módulos de soporte a nivel de aplicación
- Sistema operativo en tiempo real
MQX .
- Middleware:
sistema de archivos, shell de comandos, pilas de protocolos de comunicación , etc.
- Un paquete de soporte de placa de bajo nivel (BSP), que incluye el
acceso a los periféricos de las placas del módulo BLEZ66V1 y el módulo de alimentación.
- Paquete de software para
monitoreo, depuración y diagnóstico -
FreeMaster .
- Herramientas de depuración que incluyen
RTT , rastreo de herramientas
ITM , registradores, terminal
VT100 .
- Módulo para
generar archivos de parámetros.
- Módulos de códigos fuente generados basados en algoritmos en
Matlab .
¿Por qué se selecciona MQX?
El sistema operativo en tiempo real (RTOS) MQX se conoce desde hace mucho tiempo, pero
apareció en el dominio público hace un par de años. Freescal subió este sistema operativo antes de que NXP los comprara. RTOS inicialmente tenía una licencia solo para su uso en microcontroladores Freescale, ahora la licencia también se extiende a los productos NXP. RTOS sobrevivió a la explosiva popularidad, pasó por varias actualizaciones a la versión 4.2, después de lo cual Freescale decidió volver a comercializar sus versiones posteriores. Entonces resultaron dos versiones, una abierta y congelada en desarrollo llamada MQX Classic (también conocida como MQX v4.2) y una MQX 5.0 comercial cerrada.
En el marco descrito, se utiliza la rama MQX Classic v4.2. Esta es una versión estable y bien probada. La licencia permite al desarrollador modificar el código fuente de MQX Classic y usarlo en productos comerciales, sin embargo, no permite la publicación de MQX Classic en forma de fuente. Pero esto no debería ser un problema, ya que MQX Classic está disponible para descarga gratuita.
La estructura de RTOS en términos generales se ve así:

¿Por qué necesito RTOS?
Una aplicación compleja donde, en particular, se requiere control motor es bastante compleja y consta de muchas tareas asincrónicas, cada una con su propio ciclo de repetición y sus eventos de activación y detención. Si realizamos todas estas tareas en un superciclo, inevitablemente nos encontramos con el problema de retrasar la ejecución de algunas tareas por otras tareas.
Usando RTOS, como MQX, es posible deshacerse de la interdependencia de tareas individuales en el eje de tiempo sin reescribirlas o incluso mirar sus códigos fuente.
Por ejemplo, nuestra tarea de registro puede tratar de escribir un mensaje durante el tiempo que desee en una tarjeta SD esperando su respuesta, la tarea de USB puede pasar a transferir una gran cantidad de datos a una computadora, pero al mismo tiempo la tarea PID del algoritmo del motor se realizará estrictamente en un intervalo específico, y la tarea de medición de velocidad la rotación no perderá un solo evento de cambio de señal del codificador.
Aunque debo admitirlo, hay otra forma cada vez más popular de deshacerse de la complejidad en un chip: cambiar a multiprocesamiento, pero en este caso RTOS proporcionará un buen servicio.
Las principales ventajas de RTOS MQX.
- El núcleo del sistema viene con una amplia gama de middleware que incluye un sistema de archivos, pila TCP / IP, pila USB, shell de comandos, etc. Todo en el código fuente.
- Conjuntos BSP listos para usar para diferentes placas, eliminando la necesidad de escribir sus propias bibliotecas de trabajo periférico.
- Documentación detallada en archivos pdf con fácil navegación.
- La presencia de un complemento para el banco de trabajo integrado IDE IAR con información muy detallada sobre las estructuras internas de RTOS es mucho más detallada que para otros RTOS conocidos: uCOS y FreeRTOS.
- Muchos ejemplos de aplicaciones RTOS y casos de prueba.
Cuando se habla de RTOS, siempre enfatizan su capacidad para completar tareas a tiempo, pero las estimaciones cuantitativas a menudo no se dan o se dan para algunas plataformas de terceros seleccionadas por separado. Claramente, esto no es suficiente para implementar un control en tiempo real mediante RTOS. Y para controlar los motores necesita exactamente un tiempo real difícil.
MQX tiene un maravilloso caso de prueba a este respecto, que le permite obtener una tabla detallada del tiempo de ejecución de todos los servicios en la plataforma en la que inició la prueba.
A continuación se muestra una tabla del tiempo de ejecución de los servicios en el microcontrolador de nuestro módulo de control del motor, con la optimización máxima para la velocidad de ejecución del código incluida en el compilador.
Tiempo de ejecución del servicio RTOS MQX Classic La tabla también da una idea de qué servicios son compatibles con RTOS y qué opciones de kernel están disponibles. El proyecto de prueba en IDE IAR se incluye en el marco publicado.
Composición del directorio de proyectos
El directorio raíz del marco se ve así:
APP_SRC : un directorio que contiene todas las fuentes, excepto las que pertenecen a la distribución MQX.
FreeMaster_apps : archivos de proyecto para su ejecución en el entorno
FreeMaster .
IAR_proj : espacio de trabajo y archivos de proyecto para el entorno de trabajo integrado IAR para el entorno ARM v7.70.2. En este entorno, la aplicación final se compila y se depura.
MQX_SRC es un directorio que contiene todas las fuentes de MQX y middleware suministrados con MQX. Como la licencia no permite la publicación de código abierto desde la distribución MQX, no hay archivos '
.s' y '
.s' en este directorio. Pero aquellos que aceptan los términos de la licencia NXP pueden recibir los archivos que faltan.
ParametersManager - directorio del programa administrador de parámetros. Con este programa, se crean listas de parámetros de la aplicación y se generan archivos '
.s' y '
.h' con declaraciones de parámetros para incrustar en la aplicación.
PRUEBAS - un directorio con proyectos de prueba marco. Aquí está el proyecto
MQX_benchmark para generar un informe con tiempos MQX.
Los archivos
MQX_LIBRARY_O0.a y
MQX_LIBRARY_O3.a son los contenidos del directorio
MQX_SRC compilados en bibliotecas con una optimización mínima y una optimización máxima, respectivamente.
El contenido del directorio IAR_proj
Los archivos
U3HB_full.eww y
U3HB_MQXLib.eww son los archivos del
espacio de trabajo IAR .
Mientras no haya fuentes en el directorio MQX, solo funcionará el archivo
U3HB_MQXLib.eww . Este espacio de trabajo utiliza bibliotecas MQX compiladas. En el
espacio de trabajo U3HB_full.eww, se compilan las fuentes MQX completas. El directorio
OUT sirve como el lugar donde el IAR coloca sus productos de trabajo, en particular mapas y archivos hexadecimales.
El directorio de
configuración es creado automáticamente por el IAR. Almacena específicamente la configuración del depurador. Si algo no se puede configurar durante la depuración en el IAR, entonces a veces vale la pena borrar este directorio.
El archivo
INT_FLASH_MK66FX1M0LVQ18.icf es un archivo de configuración del vinculador IAR. Determina las direcciones de las regiones de memoria donde el enlazador coloca código, datos, vectores de interrupción, pilas, etc.
El contenido del directorio MQX_SRC
Los archivos del espacio de trabajo
MQX_LIBRARY.eww se utilizan para crear bibliotecas MQX. Hasta que los archivos '
.s ' y '
.s' se coloquen en los directorios, este proyecto no se compilará.
config : el directorio con los archivos de configuración MQX. La composición de los servicios y controladores MQX se especifica en el
archivo de configuración
user_config.h .
mfs : sistema de archivos MQX, incluye FAT32 y RAM FS
mqx : el núcleo MQX incluye los siguientes subdirectorios:
rtcs : pila TCP / IP. Incluye los siguientes subdirectorios:
shell : un directorio con archivos shell.
usb - directorio con archivos de pila USB
La funcionalidad de cada módulo de software MQX está bien documentada por el fabricante. Como ejemplo, proporcionaré enlaces a dos documentos:
→
Instrucciones para usar el MQX .
→
Guía de referencia de MQX.El resto debe buscarse en la distribución,
que está disponible en el sitio web de NXP .
El marco en sí está en el repositorio
aquí .
Puede encontrar una descripción más detallada sobre cómo trabajar con software y ejemplos de aplicaciones en los siguientes artículos.