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 22e1e4639a3c30c283b0cdf625a1a455ceff0413
parent be246fae835fbc466411657718e46e3a1a981138
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Sat, 28 Mar 2026 01:47:42 -0300

Analizar WCET de un intervalo de tiempo en cada tarea

De esta forma se puede analizar el peor tiempo de ejecución de cada
tarea en los ultimos 5 segundos, por ejemplo.

Diffstat:
Mfirmware/app/src/app.c | 27+++++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/firmware/app/src/app.c b/firmware/app/src/app.c
@@ -22,9 +22,10 @@
 #define G_APP_TICK_CNT_INI  0ul
 #define G_APP_WCET_INI      0ul
 
-#define TASK_X_WCET_INI     0ul
-#define TASK_X_TICK_INI     0ul
-#define TASK_X_DELAY_MIN    0ul
+#define TASK_X_WCET_INI            0ul
+#define TASK_X_WCET_SAMPLE_TIME_MS 5000ul
+#define TASK_X_TICK_INI            0ul
+#define TASK_X_DELAY_MIN           0ul
 
 typedef struct {
     void (*task_init)(void *);
@@ -45,9 +46,12 @@ const task_cfg_t task_cfg_list[] = {
 
 typedef struct {
     uint32_t WCET; // Task worst-case execution time (microseconds)
+
+    uint32_t WCET_interval; // WCET in last `WCET_sample_ticks` sample time in ms
+    uint32_t WCET_sample_ticks;
 } task_dta_t;
 
-task_dta_t task_dta_list[TASK_QTY];
+task_dta_t task_dta_list[TASK_QTY] = {0};
 
 uint32_t g_app_runtime_us;
 uint32_t g_app_WCET_us; // Worst case execution time historically
@@ -99,6 +103,16 @@ void app_update(void)
         {
             cycle_counter_reset();
 
+            if (0 == task_dta_list[index].WCET_sample_ticks)
+            {
+                task_dta_list[index].WCET_sample_ticks = TASK_X_WCET_SAMPLE_TIME_MS;
+                task_dta_list[index].WCET_interval = 0;
+            }
+            else
+            {
+                task_dta_list[index].WCET_sample_ticks--;
+            }
+
             (*task_cfg_list[index].task_update)(task_cfg_list[index].parameters);
 
             cycle_counter_time_us = cycle_counter_get_time_us();
@@ -113,6 +127,11 @@ void app_update(void)
             {
                 task_dta_list[index].WCET = cycle_counter_time_us;
             }
+
+            if (task_dta_list[index].WCET_interval< cycle_counter_time_us)
+            {
+                task_dta_list[index].WCET_interval = cycle_counter_time_us;
+            }
         }
 
         __asm("CPSID i");