diff options
| author | Reinhold Gschweicher <pyro4hell@gmail.com> | 2022-01-27 22:10:59 (GMT) |
|---|---|---|
| committer | JF <JF002@users.noreply.github.com> | 2022-03-08 19:28:54 (GMT) |
| commit | 187d99c0f710cf4827a026f02e41ebbd2b1271e2 (patch) | |
| tree | a9b0ad6b065b70ba5be73db23cdd19414f64e88c /src/systemtask/SystemMonitor.cpp | |
| parent | 5fe5cee9ef76fdb57810a4434517ebc6442393fb (diff) | |
SystemMonitor: implement FreeRtosMonitor only if trace facility is set
Split SystemMonitor into h and cpp file and move the logging code of the
`Process` function into the cpp file.
Depending of the `configUSE_TRACE_FACILITY` define from
`src/FreeRTOSConfig.h` create either a "FreeRtosMonitor" or a
"DummyMonitor".
Make the `Process()` function non-const, as the FreeRtosMonitor changes
the member variable `lastTick`.
In `SystemTask.h` we then only need to use `SystemMonitor`, without
knowledge of the `configUSE_TRACE_FACILITY` define.
Diffstat (limited to 'src/systemtask/SystemMonitor.cpp')
| -rw-r--r-- | src/systemtask/SystemMonitor.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/systemtask/SystemMonitor.cpp b/src/systemtask/SystemMonitor.cpp new file mode 100644 index 0000000..90765e3 --- /dev/null +++ b/src/systemtask/SystemMonitor.cpp @@ -0,0 +1,26 @@ +#include "systemtask/SystemTask.h" +#if configUSE_TRACE_FACILITY == 1 +// FreeRtosMonitor +#include <FreeRTOS.h> +#include <task.h> +#include <nrf_log.h> + +void Pinetime::System::SystemMonitor::Process() { + if (xTaskGetTickCount() - lastTick > 10000) { + NRF_LOG_INFO("---------------------------------------\nFree heap : %d", xPortGetFreeHeapSize()); + TaskStatus_t tasksStatus[10]; + auto nb = uxTaskGetSystemState(tasksStatus, 10, nullptr); + for (uint32_t i = 0; i < nb; i++) { + NRF_LOG_INFO("Task [%s] - %d", tasksStatus[i].pcTaskName, tasksStatus[i].usStackHighWaterMark); + if (tasksStatus[i].usStackHighWaterMark < 20) + NRF_LOG_INFO("WARNING!!! Task %s task is nearly full, only %dB available", + tasksStatus[i].pcTaskName, + tasksStatus[i].usStackHighWaterMark * 4); + } + lastTick = xTaskGetTickCount(); + } +} +#else +// DummyMonitor +void Pinetime::System::SystemMonitor::Process() {} +#endif |
