diff --git a/mongoose.c b/mongoose.c index af495f92..16380ac7 100644 --- a/mongoose.c +++ b/mongoose.c @@ -7291,9 +7291,11 @@ static void mg_mdash_rpc_get_info(struct mg_rpc_req *r) { } static void mg_mdash_rpc_mem_stats(struct mg_rpc_req *r) { - mg_rpc_ok(r, "{%m:%zu,%m:%zu}", // + mg_rpc_ok(r, "{%m:%zu,%m:%zu,%m:%zu,%m:%zu}", // MG_ESC("stack_used"), (size_t) MG_HEALTH_STACK_USED, // - MG_ESC("heap_used"), (size_t) MG_HEALTH_HEAP_USED); + MG_ESC("stack_total"), (size_t) MG_HEALTH_STACK_TOTAL, // + MG_ESC("heap_used"), (size_t) MG_HEALTH_HEAP_USED, // + MG_ESC("heap_total"), (size_t) MG_HEALTH_HEAP_TOTAL); } static void mg_mdash_rpc_ota_begin(struct mg_rpc_req *r) { diff --git a/src/mdash.c b/src/mdash.c index 244b01b8..f206d523 100644 --- a/src/mdash.c +++ b/src/mdash.c @@ -106,9 +106,11 @@ static void mg_mdash_rpc_get_info(struct mg_rpc_req *r) { } static void mg_mdash_rpc_mem_stats(struct mg_rpc_req *r) { - mg_rpc_ok(r, "{%m:%zu,%m:%zu}", // + mg_rpc_ok(r, "{%m:%zu,%m:%zu,%m:%zu,%m:%zu}", // MG_ESC("stack_used"), (size_t) MG_HEALTH_STACK_USED, // - MG_ESC("heap_used"), (size_t) MG_HEALTH_HEAP_USED); + MG_ESC("stack_total"), (size_t) MG_HEALTH_STACK_TOTAL, // + MG_ESC("heap_used"), (size_t) MG_HEALTH_HEAP_USED, // + MG_ESC("heap_total"), (size_t) MG_HEALTH_HEAP_TOTAL); } static void mg_mdash_rpc_ota_begin(struct mg_rpc_req *r) { diff --git a/tutorials/stm32/nucleo-h723zg/cubemx/Core/Src/main.c b/tutorials/stm32/nucleo-h723zg/cubemx/Core/Src/main.c index 9498d2b8..39a12166 100644 --- a/tutorials/stm32/nucleo-h723zg/cubemx/Core/Src/main.c +++ b/tutorials/stm32/nucleo-h723zg/cubemx/Core/Src/main.c @@ -84,6 +84,17 @@ static void MX_USART3_UART_Init(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ +size_t hal_get_heap(void) { + extern void *_sbrk(ptrdiff_t incr); + extern unsigned char _end; // Start of heap, see linker script + return (size_t) ((uintptr_t) _sbrk(0) - (uintptr_t) &_end); +} + +size_t hal_get_stack(void) { + extern unsigned char _estack; // Initial stack pointer, see linker script + return (size_t) ((uintptr_t) &_estack - (uintptr_t) __get_MSP()); +} + static void log_fn(char ch, void *param) { HAL_UART_Transmit(param, (unsigned char *) &ch, 1, HAL_MAX_DELAY); } diff --git a/tutorials/stm32/nucleo-h723zg/cubemx/mongoose/mongoose_config.h b/tutorials/stm32/nucleo-h723zg/cubemx/mongoose/mongoose_config.h index 6fe59481..83e79e14 100644 --- a/tutorials/stm32/nucleo-h723zg/cubemx/mongoose/mongoose_config.h +++ b/tutorials/stm32/nucleo-h723zg/cubemx/mongoose/mongoose_config.h @@ -1,6 +1,21 @@ #pragma once +#include +#include + #define MG_ARCH MG_ARCH_CUBE +// Current memory usage in bytes +size_t hal_get_heap(void); +size_t hal_get_stack(void); +#define MG_HEALTH_HEAP_USED hal_get_heap() +#define MG_HEALTH_STACK_USED hal_get_stack() + +extern uint32_t _Min_Stack_Size; +extern unsigned char _end, _sstack; +#define MG_HEALTH_STACK_TOTAL ((size_t) (uintptr_t) &_Min_Stack_Size) +#define MG_HEALTH_HEAP_TOTAL \ + ((size_t) ((uintptr_t) &_sstack - (uintptr_t) &_end)) + // Ethernet driver tunables: // #define MG_DRIVER_MDC_CR 4 // RMII MDC clock divider, from 0 to 5 // #define MG_TCPIP_PHY_ADDR 0 // PHY address