Enable malloc error and stack overflow error detection in FreeRTOS. Count them and display them in the SystemInfo app.
This commit is contained in:
parent
1911e2d928
commit
611e0ff768
|
@ -79,8 +79,8 @@
|
|||
/* Hook function related definitions. */
|
||||
#define configUSE_IDLE_HOOK 0
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 0
|
||||
#define configUSE_MALLOC_FAILED_HOOK 0
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 1
|
||||
#define configUSE_MALLOC_FAILED_HOOK 1
|
||||
|
||||
/* Run time and task stats gathering related definitions. */
|
||||
#define configGENERATE_RUN_TIME_STATS 0
|
||||
|
|
|
@ -177,6 +177,8 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen2() {
|
|||
return std::make_unique<Screens::Label>(1, 5, label);
|
||||
}
|
||||
|
||||
extern int mallocFailedCount;
|
||||
extern int stackOverflowCount;
|
||||
std::unique_ptr<Screen> SystemInfo::CreateScreen3() {
|
||||
lv_mem_monitor_t mon;
|
||||
lv_mem_monitor(&mon);
|
||||
|
@ -188,22 +190,23 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen3() {
|
|||
"#808080 BLE MAC#\n"
|
||||
" %02x:%02x:%02x:%02x:%02x:%02x"
|
||||
"\n"
|
||||
"#808080 LVGL Memory#\n"
|
||||
" #808080 used# %d (%d%%)\n"
|
||||
" #808080 max used# %lu\n"
|
||||
" #808080 frag# %d%%\n"
|
||||
" #808080 free# %d",
|
||||
"\n"
|
||||
"#808080 Memory heap#\n"
|
||||
" #808080 Free# %d\n"
|
||||
" #808080 Min free# %d\n"
|
||||
" #808080 Alloc err# %d\n"
|
||||
" #808080 Ovrfl err# %d\n",
|
||||
bleAddr[5],
|
||||
bleAddr[4],
|
||||
bleAddr[3],
|
||||
bleAddr[2],
|
||||
bleAddr[1],
|
||||
bleAddr[0],
|
||||
static_cast<int>(mon.total_size - mon.free_size),
|
||||
mon.used_pct,
|
||||
mon.max_used,
|
||||
mon.frag_pct,
|
||||
static_cast<int>(mon.free_biggest_size));
|
||||
xPortGetFreeHeapSize(),
|
||||
xPortGetMinimumEverFreeHeapSize(),
|
||||
mallocFailedCount,
|
||||
stackOverflowCount
|
||||
);
|
||||
lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0);
|
||||
return std::make_unique<Screens::Label>(2, 5, label);
|
||||
}
|
||||
|
|
11
src/main.cpp
11
src/main.cpp
|
@ -83,6 +83,7 @@ Pinetime::Drivers::Cst816S touchPanel {twiMaster, touchPanelTwiAddress};
|
|||
#include "displayapp/DisplayAppRecovery.h"
|
||||
#else
|
||||
#include "displayapp/DisplayApp.h"
|
||||
#include "main.h"
|
||||
#endif
|
||||
Pinetime::Drivers::Bma421 motionSensor {twiMaster, motionSensorTwiAddress};
|
||||
Pinetime::Drivers::Hrs3300 heartRateSensor {twiMaster, heartRateSensorTwiAddress};
|
||||
|
@ -144,7 +145,17 @@ Pinetime::System::SystemTask systemTask(spi,
|
|||
fs,
|
||||
touchHandler,
|
||||
buttonHandler);
|
||||
int mallocFailedCount = 0;
|
||||
int stackOverflowCount = 0;
|
||||
extern "C" {
|
||||
void vApplicationMallocFailedHook() {
|
||||
mallocFailedCount++;
|
||||
}
|
||||
|
||||
void vApplicationStackOverflowHook(TaskHandle_t /*xTask*/, char */*pcTaskName*/) {
|
||||
stackOverflowCount++;
|
||||
}
|
||||
}
|
||||
/* Variable Declarations for variables in noinit SRAM
|
||||
Increment NoInit_MagicValue upon adding variables to this area
|
||||
*/
|
||||
|
|
|
@ -5,4 +5,7 @@
|
|||
#include <nrfx_gpiote.h>
|
||||
|
||||
void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action);
|
||||
void DebounceTimerCallback(TimerHandle_t xTimer);
|
||||
void DebounceTimerCallback(TimerHandle_t xTimer);
|
||||
|
||||
extern int mallocFailedCount;
|
||||
extern int stackOverflowCount;
|
|
@ -139,6 +139,18 @@ void DisplayProgressBar(uint8_t percent, uint16_t color) {
|
|||
}
|
||||
}
|
||||
|
||||
int mallocFailedCount = 0;
|
||||
int stackOverflowCount = 0;
|
||||
extern "C" {
|
||||
void vApplicationMallocFailedHook() {
|
||||
mallocFailedCount++;
|
||||
}
|
||||
|
||||
void vApplicationStackOverflowHook(TaskHandle_t /*xTask*/, char */*pcTaskName*/) {
|
||||
stackOverflowCount++;
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
TaskHandle_t taskHandle;
|
||||
RefreshWatchdog();
|
||||
|
|
Loading…
Reference in a new issue