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.
This commit is contained in:
parent
5fe5cee9ef
commit
187d99c0f7
|
@ -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
|
||||
|
|
26
src/systemtask/SystemMonitor.cpp
Normal file
26
src/systemtask/SystemMonitor.cpp
Normal file
|
@ -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
|
|
@ -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 {
|
||||
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("---------------------------------------\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
|
||||
};
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue