summaryrefslogtreecommitdiff
path: root/src/systemtask/SystemMonitor.cpp
diff options
context:
space:
mode:
authorReinhold Gschweicher <pyro4hell@gmail.com>2022-01-27 22:10:59 (GMT)
committerJF <JF002@users.noreply.github.com>2022-03-08 19:28:54 (GMT)
commit187d99c0f710cf4827a026f02e41ebbd2b1271e2 (patch)
treea9b0ad6b065b70ba5be73db23cdd19414f64e88c /src/systemtask/SystemMonitor.cpp
parent5fe5cee9ef76fdb57810a4434517ebc6442393fb (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.cpp26
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