Hola en este post voy a subir el firmware. El mismo fue desarrollado con el compilador C provisto por FreeScale [CodeWarrior 6.1] que permite generar hasta 32Kbytes en forma gratuita. El CodeWarrior posee una herramienta visual llamada Process Expert que permite generar código para el acceso a casi todos los perifericos del micro. Normalmente cuando arranco un proyecto nuevo genero dos versiones, una digamos usando el Process Expert que me asiste en las cosas donde hago agua que es el manejo de clocks, baud rates, etc, una vez generado el còdigo por esta herramienta copio o traduzco las lineas que me interesan al otro proyecto que suelo llamar Stand Alone, una vez que el seteo de todos los perifericos es hecho no uso más el expert.
Si bien el process expert es una herramienta poderosa y el código generado es de muy buena calidad desisto de usar esto por las siguientes razones:
- Genera un archivo por cada recurso de hardware, algo que me parece inecesario ya que uno llega rapidamente al limite de archivos que puede manejar la tool en forma gratuita
- Las alocaciones a memoria son normalmente estaticas al módulo, yo normalmente analizo el uso de la memoria y utilizo unions para hacer un uso más eficiente de la misma, sobretodo en micros donde el recurso de RAM es escaso.
Descripción de los módulosMicrologger.cEste es el archivo de más alto nivel, en el mismo de inicia todo el hardware, se monta el medio ( MMC/SD Card ), se lee el archivo de configuracion y se abre la UART con la velocidad obtenida del mismo, después queda en loop infinito esperando caracteres por el serie y escribiendolo a la tarjeta a medida que van llegando. La otra funcion es la que maneja los errores criticos, todas las funciones del módulo que es propiamente el file system devuelen un enumerado como retorno, si se trata
de un critical error se hace parpadear al LED tantas veces como indique su valor, de esta manera se puede monitorear cual fue el error.
Misc.c/Misc.hEn este módulo se implementan algunas funciones de manejo que no son nativas del compilador, tambien las funciones que toman los parámetros del archivo de configuración que tiene una similitud a los arhivos INI de Windows.
FS.c/FS.h Este el archivo donde se maneja todo el acceso a la FAT, como comente antes, es solo un subset de un file system completo, tambien realize algunas restricciones como limitar el tamaño máximo de 512 para las operaciones de escritura y lectura que con ello me facilitaron el trabajo de la implementación de la misma. Por último el módulo es endian independiente.
Card.c/Card.hEste módulo es el que interfacea directamente con la memoria.
MCU.c/MCU.hEste es el único módulo que es hardware dependiente, es un mix entre C y assembler y seria el único que deberia implementar si migro MicroLogger a otra plataforma.
El archivo que adjunto es el proyecto completo en CodeWarrior para el que lo necesite, en otro post voy a explicar las cosas a tener en cuenta para migrar a otra plataforma y tambien solo los archivos C y H.
Saludos !