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
4 changed files with 35 additions and 39 deletions
|
@ -516,6 +516,7 @@ list(APPEND SOURCE_FILES
|
||||||
displayapp/lv_pinetime_theme.c
|
displayapp/lv_pinetime_theme.c
|
||||||
|
|
||||||
systemtask/SystemTask.cpp
|
systemtask/SystemTask.cpp
|
||||||
|
systemtask/SystemMonitor.cpp
|
||||||
drivers/TwiMaster.cpp
|
drivers/TwiMaster.cpp
|
||||||
|
|
||||||
heartratetask/HeartRateTask.cpp
|
heartratetask/HeartRateTask.cpp
|
||||||
|
@ -577,6 +578,7 @@ list(APPEND RECOVERY_SOURCE_FILES
|
||||||
FreeRTOS/port_cmsis.c
|
FreeRTOS/port_cmsis.c
|
||||||
|
|
||||||
systemtask/SystemTask.cpp
|
systemtask/SystemTask.cpp
|
||||||
|
systemtask/SystemMonitor.cpp
|
||||||
drivers/TwiMaster.cpp
|
drivers/TwiMaster.cpp
|
||||||
components/gfx/Gfx.cpp
|
components/gfx/Gfx.cpp
|
||||||
components/rle/RleDecoder.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
|
#pragma once
|
||||||
#include <FreeRTOS.h>
|
#include <FreeRTOS.h> // declares configUSE_TRACE_FACILITY
|
||||||
#include <task.h>
|
#include <task.h>
|
||||||
#include <nrf_log.h>
|
|
||||||
|
|
||||||
namespace Pinetime {
|
namespace Pinetime {
|
||||||
namespace System {
|
namespace System {
|
||||||
struct DummyMonitor {};
|
class SystemMonitor {
|
||||||
struct FreeRtosMonitor {};
|
|
||||||
|
|
||||||
template <class T> class SystemMonitor {
|
|
||||||
public:
|
public:
|
||||||
SystemMonitor() = delete;
|
void Process();
|
||||||
};
|
#if configUSE_TRACE_FACILITY == 1
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
mutable TickType_t lastTick = 0;
|
mutable TickType_t lastTick = 0;
|
||||||
mutable TaskStatus_t tasksStatus[10];
|
#endif
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -148,11 +148,7 @@ namespace Pinetime {
|
||||||
bool stepCounterMustBeReset = false;
|
bool stepCounterMustBeReset = false;
|
||||||
static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000);
|
static constexpr TickType_t batteryMeasurementPeriod = pdMS_TO_TICKS(10 * 60 * 1000);
|
||||||
|
|
||||||
#if configUSE_TRACE_FACILITY == 1
|
SystemMonitor monitor;
|
||||||
SystemMonitor<FreeRtosMonitor> monitor;
|
|
||||||
#else
|
|
||||||
SystemMonitor<DummyMonitor> monitor;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue