diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 025fc330..ff0c9b0c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -516,6 +516,7 @@ list(APPEND SOURCE_FILES displayapp/lv_pinetime_theme.c systemtask/SystemTask.cpp + systemtask/SystemMonitor.cpp drivers/TwiMaster.cpp heartratetask/HeartRateTask.cpp @@ -577,6 +578,7 @@ list(APPEND RECOVERY_SOURCE_FILES FreeRTOS/port_cmsis.c systemtask/SystemTask.cpp + systemtask/SystemMonitor.cpp drivers/TwiMaster.cpp components/gfx/Gfx.cpp components/rle/RleDecoder.cpp diff --git a/src/systemtask/SystemMonitor.cpp b/src/systemtask/SystemMonitor.cpp new file mode 100644 index 00000000..90765e30 --- /dev/null +++ b/src/systemtask/SystemMonitor.cpp @@ -0,0 +1,26 @@ +#include "systemtask/SystemTask.h" +#if configUSE_TRACE_FACILITY == 1 +// FreeRtosMonitor +#include +#include +#include + +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 diff --git a/src/systemtask/SystemMonitor.h b/src/systemtask/SystemMonitor.h index 45c02c2c..08c87401 100644 --- a/src/systemtask/SystemMonitor.h +++ b/src/systemtask/SystemMonitor.h @@ -1,44 +1,16 @@ #pragma once -#include +#include // declares configUSE_TRACE_FACILITY #include -#include namespace Pinetime { namespace System { - struct DummyMonitor {}; - struct FreeRtosMonitor {}; - - template class SystemMonitor { + class SystemMonitor { public: - SystemMonitor() = delete; - }; - - template <> class SystemMonitor { - public: - void Process() const { - } - }; - - template <> class SystemMonitor { - public: - void Process() const { - if (xTaskGetTickCount() - lastTick > 10000) { - NRF_LOG_INFO("---------------------------------------\nFree heap : %d", xPortGetFreeHeapSize()); - 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(); - } - } - + void Process(); +#if configUSE_TRACE_FACILITY == 1 private: mutable TickType_t lastTick = 0; - mutable TaskStatus_t tasksStatus[10]; +#endif }; } -} \ No newline at end of file +} diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 517ed1ae..c5b03792 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -148,11 +148,7 @@ namespace Pinetime { bool stepCounterMustBeReset = false; static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000); -#if configUSE_TRACE_FACILITY == 1 - SystemMonitor monitor; -#else - SystemMonitor monitor; -#endif + SystemMonitor monitor; }; } }