187d99c0f7
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.
27 lines
963 B
C++
27 lines
963 B
C++
#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
|