summaryrefslogtreecommitdiff
path: root/src/systemtask
diff options
context:
space:
mode:
authorReinhold Gschweicher <pyro4hell@gmail.com>2022-01-27 23:10:59 +0100
committerJF <JF002@users.noreply.github.com>2022-03-08 20:28:54 +0100
commit187d99c0f710cf4827a026f02e41ebbd2b1271e2 (patch)
treea9b0ad6b065b70ba5be73db23cdd19414f64e88c /src/systemtask
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')
-rw-r--r--src/systemtask/SystemMonitor.cpp26
-rw-r--r--src/systemtask/SystemMonitor.h40
-rw-r--r--src/systemtask/SystemTask.h6
3 files changed, 33 insertions, 39 deletions
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 <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
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 <FreeRTOS.h>
+#include <FreeRTOS.h> // declares configUSE_TRACE_FACILITY
#include <task.h>
-#include <nrf_log.h>
namespace Pinetime {
namespace System {
- struct DummyMonitor {};
- struct FreeRtosMonitor {};
-
- template <class T> class SystemMonitor {
- public:
- SystemMonitor() = delete;
- };
-
- template <> class SystemMonitor<DummyMonitor> {
+ class SystemMonitor {
public:
- void Process() const {
- }
- };
-
- template <> class SystemMonitor<FreeRtosMonitor> {
- 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<FreeRtosMonitor> monitor;
-#else
- SystemMonitor<DummyMonitor> monitor;
-#endif
+ SystemMonitor monitor;
};
}
}