Leyendo matrices 2D en un microcontrolador [cerrado]

1

Tengo un escenario en el que tengo matrices 2D de tamaños variables y varios tipos de datos (doble y booleano a partir de ahora). Estos arreglos deben ser leídos y procesados por un microcontrolador que tiene 256KB de SRAM.

En mi configuración planeo transferir estos arreglos de la tarjeta SD (almacenada como archivos) a la SRAM para su procesamiento. Actualmente puedo pensar en seguir posibles enfoques

  1. Estas matrices son en realidad matrices de MATLAB. Así que tengo la intención de guardar las variables de MATLAB como .mat y reutilizar el código de matimport.c
  2. Guarde los datos contenidos en las variables en un archivo xml. Use un analizador XML para el microcontrolador de destino
  3. Crea archivos binarios personalizados con metadatos asociados. Así que el programa en el microcontrolador lee los metadatos (filas, columnas, tipo de datos) sobre el archivo binario y extrae la variable en función de los datos de desplazamiento calculados a partir de los metadatos

Sol 1 parece fácil y directo. Pero, creo que necesito usar ciertas bibliotecas externas de MATLAB y supongo que estas bibliotecas precompiladas (como libmat.lib, libmx.lib) no están disponibles para ARM.

Sol 2 es fácil si hay un buen analizador escrito para un microcontrolador. Las sugerencias de analizador XML son bienvenidas

Sol 3 implica un poco más de trabajo. Para este método, tengo la intención de escribir una aplicación en C que lea los archivos .mat y crear un archivo binario personalizado con metadatos y datos reales. Y tiene otra función de importación idéntica en el microcontrolador.

El tamaño total de todas las variables combinadas es el rango de 20 KB a 40 KB. Por lo tanto, la tarjeta SD se utiliza en el sistema.

¿Cuál de estas técnicas es adecuada para una solución integrada de bajo tamaño? Mi objetivo es elegir e ir con una solución que utilice la menor cantidad de memoria y una que sea más flexible para la expansión. Por supuesto, sugiera otros enfoques para resolver este problema.

PS. El dispositivo no está basado en Arduino. Pero, sin embargo, lo agregué ya que Arduino Development entra en el ámbito de esta pregunta.

    
pregunta

1 respuesta

3

Sugiero poner la complejidad en el lado de la PC y no en el lado del microcontrolador.

Debe almacenar el archivo en la tarjeta sd como una imagen binaria del contenido de la memoria que le gustaría obtener en el microcontrolador. El almacenamiento en un formato binario definido debe poder realizarse directamente desde Matlab.

Todo lo que debe hacer es copiar byte tras byte el contenido de su tarjeta SD en un área predefinida en la SRAM.

Una forma aún más simple sería evitar el uso de un sistema de archivos y utilizar la tarjeta SD como medio sin formato. Evento más fácil en el lado del microcontrolador ...

Tener la complejidad en el lado de la PC hace esto mucho más fácil:

  • Puede usar el lenguaje de programación que desee y no está restringido a lo que está disponible en la MCU. Yo usaría Python para esto, pero esa es una preferencia personal.
  • Es fácil depurar el software de la PC en comparación con MCU one.
  • Su MCU tendría menos cosas que hacer y, por lo tanto, más tiempo computacional disponible para hacer otra cosa (o irse a dormir para ahorrar baterías)
respondido por el Blup1980

Lea otras preguntas en las etiquetas