diff --git a/conf/messages.xml b/conf/messages.xml index 8a610824c1..456a1cd8ab 100644 --- a/conf/messages.xml +++ b/conf/messages.xml @@ -255,6 +255,8 @@ + + diff --git a/sw/airborne/modules/core/sys_mon.c b/sw/airborne/modules/core/sys_mon.c index c4d3239ccd..5f76e17395 100644 --- a/sw/airborne/modules/core/sys_mon.c +++ b/sw/airborne/modules/core/sys_mon.c @@ -27,24 +27,26 @@ #include "mcu_periph/usb_serial.h" #endif -/* Global system monitor data (averaged over 1 sec) */ +/** Global system monitor data (averaged over 1 sec) */ struct SysMon sys_mon; /* Local vars */ -uint16_t n_periodic; -uint16_t n_event; -uint32_t periodic_timer; -uint32_t periodic_cycle; -uint32_t event_timer; -uint32_t sum_time_periodic; ///< in usec -uint32_t sum_cycle_periodic; ///< in usec -uint32_t sum_time_event; ///< in usec -uint32_t min_time_event; ///< in usec -uint32_t sum_n_event; +static uint16_t n_periodic; +static uint16_t n_event; +static uint32_t periodic_timer; +static uint32_t periodic_cycle; +static uint32_t event_timer; +static uint32_t sum_time_periodic; ///< in usec +static uint32_t sum_cycle_periodic; ///< in usec +static uint32_t sum_time_event; ///< in usec +static uint32_t min_time_event; ///< in usec +static uint32_t sum_n_event; void init_sysmon(void) { sys_mon.cpu_load = 0; sys_mon.periodic_time = 0; + sys_mon.periodic_time_min = 0xFFFF; + sys_mon.periodic_time_max = 0; sys_mon.periodic_cycle = 0; sys_mon.periodic_cycle_min = 0xFFFF; sys_mon.periodic_cycle_max = 0; @@ -75,13 +77,19 @@ void periodic_report_sysmon(void) { sys_mon.cpu_load = 100 * sys_mon.periodic_cycle / sys_mon.periodic_time; sys_mon.event_number = sum_n_event / n_periodic; - DOWNLINK_SEND_SYS_MON(DefaultChannel, DefaultDevice, &sys_mon.periodic_time, &sys_mon.periodic_cycle, &sys_mon.periodic_cycle_min, &sys_mon.periodic_cycle_max, &sys_mon.event_number, &sys_mon.cpu_load); + DOWNLINK_SEND_SYS_MON(DefaultChannel, DefaultDevice, &sys_mon.periodic_time, + &sys_mon.periodic_time_min, &sys_mon.periodic_time_max, + &sys_mon.periodic_cycle, &sys_mon.periodic_cycle_min, + &sys_mon.periodic_cycle_max, &sys_mon.event_number, + &sys_mon.cpu_load); } n_periodic = 0; sum_time_periodic = 0; sum_cycle_periodic = 0; sum_n_event = 0; + sys_mon.periodic_time_min = 0xFFFF; + sys_mon.periodic_time_max = 0; sys_mon.periodic_cycle_min = 0xFFFF; sys_mon.periodic_cycle_max = 0; } @@ -96,6 +104,12 @@ void periodic_sysmon(void) { periodic_cycle = periodic_usec - n_event * min_time_event; sum_cycle_periodic += periodic_cycle; + /* remember min and max periodic times */ + if (periodic_usec < sys_mon.periodic_time_min) + sys_mon.periodic_time_min = periodic_usec; + if (periodic_usec > sys_mon.periodic_time_max) + sys_mon.periodic_time_max = periodic_usec; + /* remember min and max periodic cycle times */ if (periodic_cycle < sys_mon.periodic_cycle_min) sys_mon.periodic_cycle_min = periodic_cycle; diff --git a/sw/airborne/modules/core/sys_mon.h b/sw/airborne/modules/core/sys_mon.h index 0496f9b970..aec9286d7b 100644 --- a/sw/airborne/modules/core/sys_mon.h +++ b/sw/airborne/modules/core/sys_mon.h @@ -34,6 +34,8 @@ struct SysMon { uint8_t cpu_load; uint16_t periodic_time; ///< in usec + uint16_t periodic_time_min; ///< in usec + uint16_t periodic_time_max; ///< in usec uint16_t periodic_cycle; ///< in usec uint16_t periodic_cycle_min; ///< in usec uint16_t periodic_cycle_max; ///< in usec