# Firmware

En esta carpeta se encuentra el firmware para el proyecto de controlador de
derretidor de miel. A gran nivel se trata de una única aplicación que tiene
asociada multiples tareas. Esta aplicación se actualiza en cada milisegundo y al
actualizarse actualiza cada tarea asociada.

Las tareas se asocian a la aplicación en el archivo `app/src/app.c` al momento
de iniciar la liste de tareas, como se muestra a continuación.

```c
const task_cfg_t task_cfg_list[] = {
    {task_system_init,      task_system_update,      &shared_data},
    {task_buttons_init,     task_buttons_update,     NULL},
    {task_buzzer_init,      task_buzzer_update,      NULL},
    {task_leds_init,        task_leds_update,        NULL},
    {task_menu_init,        task_menu_update,        &shared_data},
    {task_temp_ctrl_init,   task_temp_ctrl_update,   &shared_data},
    {task_temp_sensor_init, task_temp_sensor_update, &shared_data},
};
```

La tarea central es `task_system`, esta tarea recibe y envía eventos;
principalmente recibe de `task_buttons` que se encarga de escrutar el estado de
los botones y principalmente envía a las tareas `tsak_temp_ctrl`, `task_leds` y
`task_menu`. Las tareas restantes se puede decir que no interactúan con
`task_system` mediante eventos si no que lo hacen a través de parámetros
compartidos, estas tareas son `task_temp_sensor` y `task_temp_ctrl`.

Los archivos correspondientes a la aplicación se encuentran en la carpeta
`app`. Las carpetas `Core` y `Drivers` se generan automáticamente por CubeMX. En
la carpeta `Core` se encuentra el punto de entrada (la función `main`) así como
también archivos de inicialización y manejo de interrupciones, como
`startup_stm32f103rbtx.s` y `stm32f1xx_it.c`, respectivamente. La carpeta
`Drivers` contiene todos los archivos relacionados con la capa de abstracción
HAL (Hardware Abstraction Layer).



