stats - Added stack stats api

Matched heap stats api
- void mbed_stats_heap_get(mbed_stats_heap_t *)
- void mbed_stats_stack_get(mbed_stats_stack_t *)
pull/3141/head
Christopher Haster 2016-10-26 17:06:08 -05:00
parent 03b8ae1811
commit b6e8f44c0d
2 changed files with 49 additions and 0 deletions

37
platform/mbed_stats.c Normal file
View File

@ -0,0 +1,37 @@
#include "mbed_stats.h"
#include <string.h>
#if MBED_CONF_RTOS_PRESENT
#include "cmsis_os.h"
#endif
// note: mbed_stats_heap_get defined in mbed_alloc_wrappers.cpp
void mbed_stats_stack_get(mbed_stats_stack_t *stats)
{
memset(stats, 0, sizeof(mbed_stats_stack_t));
#if MBED_STACK_STATS_ENABLED && MBED_CONF_RTOS_PRESENT
osThreadEnumId enumid = _osThreadsEnumStart();
osThreadId threadid;
while ((threadid = _osThreadEnumNext(enumid))) {
osEvent e;
e = _osThreadGetInfo(threadid, osThreadInfoStackMax);
if (e.status == osOK) {
stats->max_size += (uint32_t)e.value.p;
}
e = _osThreadGetInfo(threadid, osThreadInfoStackSize);
if (e.status == osOK) {
stats->reserved_size += (uint32_t)e.value.p;
}
stats->stack_cnt += 1;
}
#elif MBED_STACK_STATS_ENABLED
#warning Stack statistics are not supported without the rtos.
#endif
}

View File

@ -18,6 +18,7 @@
*/ */
#ifndef MBED_STATS_H #ifndef MBED_STATS_H
#define MBED_STATS_H #define MBED_STATS_H
#include <stdint.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -36,6 +37,17 @@ typedef struct {
*/ */
void mbed_stats_heap_get(mbed_stats_heap_t *stats); void mbed_stats_heap_get(mbed_stats_heap_t *stats);
typedef struct {
uint32_t max_size; /**< Sum of the maximum number of bytes used in each stack. */
uint32_t reserved_size; /**< Current number of bytes allocated for all stacks. */
uint32_t stack_cnt; /**< Number of stacks currently allocated. */
} mbed_stats_stack_t;
/**
* Fill the passed in structure with stack stats.
*/
void mbed_stats_stack_get(mbed_stats_stack_t *stats);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif