martes, 31 de marzo de 2015

Port de FreeRTOS para ATMega328 y estructura del proyecto

Ya he completado el "port" de FreeRTOS para el ATMega328 (repo). Además he creado la estructura básica para el código del firmware y he configurado la compilación usando CMake.
FreeRTOS haciendo parpadear un LED en un ATMega328p

 

Port FreeRTOS

FreeRTOS es un sistema operativo de tiempo real de open source ligero que puede caber en microcontroladores pequeños, como es el caso del ATMega328. Como es lógico, el código de FreeRTOS no es independiente del hardware dónde se vaya a usar, adaptarlo a uno específico es lo que se suele llamar "port".

Portar FreeRTOS se reduce a implementar/modificar dos archivos:
  • port.c: Donde se implementan las funciones de cambio de contexto, gestión del stack y configuración del timer del sistema, entre otras.
  • portmacro.h: Aquí se defines algunas macros dependientes del hardware para la habilitación/desabilitación de las interrupciones y definición de tipos.
  • heap_#.c: Los archivos heap_1.c, heap_2.c, etc implementan las funcionalidades de reserva dinámica de memoria. FreeRTOS tiene varios sistemas de gestión de memoria, en nuestro caso hemos elegido el más simple por ser el más eficiente (heap_1.c).
En nuestro caso, FreeRTOS nos proporciona un port oficial para el ATMega323, que es un micro muy parecido al ATMega328, por lo que hemos partido de ese port. Con pocas modificaciones y usando de guía otro port para ATMega328 encontrado aquí, se ha conseguido portar sin mayor problema FreeRTOS.

 

Estructura y CMake

Se ha optado por CMake como herramienta de compilación. Además de comprobar las si se disponen de las herramientas necesarias y generar el makefile para compilar, se ha creado un "target" para facilitar la programación de la placa. De forma que, al hacer make, se compila el firmware y se prepara el binario para programar el microcontrolador. Y al hacer make program grabamos este binario en el microcontrolador.

La programación del micro se puede hacer de distintas formas en función de la placa de desarrollo y el programador/depurador del que se disponga. Para establecer una configuración específica basta con modificar las variables en CMakeLists.txt dispuesta para ello.

No hay comentarios:

Publicar un comentario