tdse-tf_3-02

Controlador PID para derretidor de miel con control local via botones y remoto via WiFi
Index Commits Files Refs Submodules README
commit 30f2809802d04b6875a40a9574b0d4097b4b85ea
parent 7a05ba63cff5fa8de6cb2b75ecae7f91825b1013
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Sun,  7 Jun 2026 14:44:04 -0300

Agregar diagrama de bloques del firmware

Diffstat:
MMEMORIA.md | 62+++++++++++++++++++++++++++++++++++++++++---------------------
Aimg/diagrama_de_bloques_firmware_nucleo_TA134.png | 0
2 files changed, 41 insertions(+), 21 deletions(-)
diff --git a/MEMORIA.md b/MEMORIA.md
@@ -73,8 +73,6 @@ pruebas realizadas.
     - [3.2.9 Tarea Remote](#329-tarea-remote)
     - [3.2.10 Medición de WCET](#3210-medición-de-wcet)
 
-
-
 # 1. Introducción general
 
 ## 1.1. Alcance
@@ -585,25 +583,40 @@ de estados en firmware (50 ms de filtro).
 
 ## 3.2 Firmware del sistema
 
-### 3.2.1 Ejecutor cíclico
+El firmware de la placa NUCLEO se compone de una aplicación que implementa un
+ejecutor cíclico con 8 tareas asociadas. Estas tareas se organizan de acuerdo al
+rol que cumplen: actuador, sensor o lógica del sistema.
 
-El firmware implementa un ejecutor cíclico con tick de 1 ms generado por el
-SysTick del microcontrolador. En cada tick, la función `app_update()` recorre
-secuencialmente las ocho tareas registradas, ejecutando tantas iteraciones como
-ticks estén pendientes. De cualquier forma, en operación normal, se cumple
-que la función `app_update()` no se bloquea más que 1 ms, por lo que en cada
-tick del SysTick no debería haber más de una operación pendiente.
+A continuación en la figura 3.9 se muestra un diagrama de bloques de las tareas
+del sistema y como interactúan entre ellas. La interacción puede ser a traves de
+eventos o mediante la estructura global compartida `shared_data`.
+
+
+<div align="center">
+    <img src="img/diagrama_de_bloques_firmware_nucleo_TA134.png" style="padding: 10px" align=center width="650px">
+    <p><em>Figura 3.9: Diagrama de bloques firmware del sistema.</em></p>
+</div>
 
-Cada tarea sigue el patrón:
+<!--
+Esta aplicacion tiene como principal caracteristica ser no bloqueante.
+-->
 
-1. Consulta su contador de ticks (incrementado por `HAL_SYSTICK_Callback`).
-2. Si hay ticks pendientes, ejecuta su máquina de estados o logica
-   correspondiente.
-3. Al finalizar, mide el tiempo de ejecución mediante el contador de ciclos del
-   DWT.
+### 3.2.1 Ejecutor cíclico
 
-En particular en el archivo `app.c` interesa mostrar la lista de tareas que se
-asocian a la aplicación el arreglo siguiente: 
+El ejecutor cíclico se implementa en el archivo `app.c`. Este ejecutor ciclico
+posee un tick de 1 ms generado por el timer SysTick propio del microcontrolador.
+En cada tick, la función `app_update()` recorre secuencialmente las ocho tareas
+asociadas, ejecutando tantas iteraciones como ticks estén pendientes. En
+operación normal, se cumple que la función `app_update()` no se bloquea por más
+de 1 ms, por lo que en cada tick no debería haber más de una operación pendiente
+en cada tarea.
+
+En particular del archivo `app.c` se destaca a continuación la lista de tareas
+que se asocian a la aplicación. Las tareas son: `task_system`, `task_buttons`,
+`task_buzzer`, `task_leds`, `task_menu`, `task_temp_ctrl`, `task_temp_sensor` y
+`task_remote`. Cada tarea tiene asociada una función de inicialización y una
+función de actualización, denotadas por el sufijo `_init` y `_update`,
+respectivamente.
 
 ```c
 const task_cfg_t task_cfg_list[] = {
@@ -618,11 +631,18 @@ const task_cfg_t task_cfg_list[] = {
 };
 ```
 
-Las tareas se comunican entre sí mediante dos mecanismos:
+La función de actualización de cada tarea sigue el mismo patrón: consulta su
+contador de ticks (incrementado en cada tick de `SysTick`) y si hay ticks
+pendientes, se decrementa el contadora en una unidad y se ejecuta su máquina de
+estados o lógica correspondiente, si no hay ticks pendientes no hace nada.
+
+Las tareas se comunican entre sí mediante dos mecanismos: eventos, a través de
+buffers circulares con una interfaz dedicada para cada tarea; o mediante la
+estructura global compartida `shared_data`. Que mecanismo utiliza cada tarea se
+puede observar en la figura 3.9, en la cual las flechas con lineas punteadas
+indican el mecanismo de acceso a la variable compartida y las flechas con lineas
+continuas indican el mecanismo de eventos.
 
-- Eventos: A través de colas circulares con interfaz dedicada.
-- Datos compartidos: A través de la estructura global `shared_data`, que
-  contiene el set point, temperatura actual, duty cycle y puntero al timer.
 
 ### 3.2.2 Tarea System
 
diff --git a/img/diagrama_de_bloques_firmware_nucleo_TA134.png b/img/diagrama_de_bloques_firmware_nucleo_TA134.png
Binary files differ.