Trabajo práctico para las materias RTOS I y PCSE de la Carrera de Especialización en Sistemas Embebidos de la UBA.
El firmware corre sobre la placa de desarrollo EDU-CIAA-NXP, y para compilar es necesario utilizar Firmware v3.
El objetivo del firmware es simular una línea de comandos simple mediante la UART, corriendo en FreeRTOS. El funcionamiento planeado originalmente se describe en el documento de propuesta de TP.
La documentación se puede generar con el comando doxygen Doxyfile
.
Los módulos (pares de archivos .c
y .h
) principales son:
terminal.c
controla la entrada/salida de texto mediante la UART.cli.c
controla la línea de comandos.commands.c
contiene la lista de comandos incluidos.echo.c
implementa el comandoecho
.sleep.c
implementa el comandosleep
.loop.c
implementa el comandoloop
, que permite lanzar una tarea que ejecuta otro comando en un ciclo infinito.gpio.c
implementa el comandogpio
, que permite leer/escribir en puertos GPIO.irq.c
implementa el comandoirq
, que permite ejecutar un comando arbitrario cuando un GPIO lanza una interrupción.i2c.c
implementa el comandoi2c
, que permite interactuar con cualquier dispositivo en el bus I2C.
Hay 4 tipos de tareas definidas, y sus prioridades están en el
archivo task_priorities.h
. De mayor a menor prioridad:
terminal_tx_task
: Se lanza al inicio. Controla la salida de la terminal, leyendo de una colatxQueue
.loop_task
: Puede haber hasta 4 instancias. Se lanza una cada vez que se ejecuta el comandoloop start
.irq_subcommand_task
: Puede haber hasta 4 instancias. Se lanza una con el comandoirq
.cli_task
: Es la tarea principal, que muestra la línea de comandos y ejecuta los comandos recibidos.
Además hay dos manejadores de interrupcion:
- Un ISR en el módulo
terminal
llamadouart_rx_isr
que controla la entrada de la UART y envía los datos recibidos a la colarxQueue
. - Cuatro ISRs en el módulo
irq
(GPIO<n>_IRQHandler
), que se ejecutan mediante los puertos GPIO.