summaryrefslogtreecommitdiff
path: root/src/SystemTask
diff options
context:
space:
mode:
Diffstat (limited to 'src/SystemTask')
-rw-r--r--src/SystemTask/SystemMonitor.h46
-rw-r--r--src/SystemTask/SystemTask.cpp2
-rw-r--r--src/SystemTask/SystemTask.h7
3 files changed, 55 insertions, 0 deletions
diff --git a/src/SystemTask/SystemMonitor.h b/src/SystemTask/SystemMonitor.h
new file mode 100644
index 00000000..50dd295a
--- /dev/null
+++ b/src/SystemTask/SystemMonitor.h
@@ -0,0 +1,46 @@
+#pragma once
+#include <FreeRTOS.h>
+#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> {
+ public:
+ void Process() const {}
+ };
+
+ template<>
+ class SystemMonitor<FreeRtosMonitor> {
+ public:
+ void Process() const {
+ if(xTaskGetTickCount() - lastTick > 10000) {
+ NRF_LOG_INFO("---------------------------------------\nFee heap : %d", xPortGetFreeHeapSize());
+ auto nb = uxTaskGetSystemState(tasksStatus, 10, NULL);
+ for (int 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();
+ }
+ }
+
+ private:
+ mutable TickType_t lastTick = 0;
+ mutable TaskStatus_t tasksStatus[10];
+ };
+ }
+} \ No newline at end of file
diff --git a/src/SystemTask/SystemTask.cpp b/src/SystemTask/SystemTask.cpp
index 61b3c638..1f01b1b5 100644
--- a/src/SystemTask/SystemTask.cpp
+++ b/src/SystemTask/SystemTask.cpp
@@ -169,6 +169,8 @@ void SystemTask::Work() {
dateTimeController.UpdateTime(systick_counter);
batteryController.Update();
+ monitor.Process();
+
if(!nrf_gpio_pin_read(pinButton))
watchdog.Kick();
}
diff --git a/src/SystemTask/SystemTask.h b/src/SystemTask/SystemTask.h
index ab5f7010..e006058f 100644
--- a/src/SystemTask/SystemTask.h
+++ b/src/SystemTask/SystemTask.h
@@ -10,6 +10,7 @@
#include <drivers/Watchdog.h>
#include <Components/Ble/NimbleController.h>
#include <drivers/SpiNorFlash.h>
+#include "SystemMonitor.h"
namespace Pinetime {
namespace System {
@@ -72,6 +73,12 @@ namespace Pinetime {
bool doNotGoToSleep = false;
void GoToRunning();
+
+#if configUSE_TRACE_FACILITY == 1
+ SystemMonitor<FreeRtosMonitor> monitor;
+#else
+ SystemMonitor<DummyMonitor> monitor;
+#endif
};
}
} \ No newline at end of file