Skip to content

Commit

Permalink
SystemMonitor: implement FreeRtosMonitor only if trace facility is set
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
NeroBurner authored and JF002 committed Mar 8, 2022
1 parent 5fe5cee commit 187d99c
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 39 deletions.
2 changes: 2 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
26 changes: 26 additions & 0 deletions src/systemtask/SystemMonitor.cpp
Original file line number Diff line number Diff line change
@@ -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
40 changes: 6 additions & 34 deletions src/systemtask/SystemMonitor.h
Original file line number Diff line number Diff line change
@@ -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
};
}
}
}
6 changes: 1 addition & 5 deletions src/systemtask/SystemTask.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
}
}

0 comments on commit 187d99c

Please sign in to comment.