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:
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");