2016-10-04 20:02:44 +00:00
/** \addtogroup platform */
/** @{*/
2017-10-24 15:05:45 +00:00
/**
* \ defgroup platform_stats stats functions
* @ {
*/
2016-08-13 22:12:03 +00:00
/* mbed Microcontroller Library
2018-07-06 16:29:56 +00:00
* Copyright ( c ) 2016 - 2018 ARM Limited
2018-11-09 11:31:20 +00:00
* SPDX - License - Identifier : Apache - 2.0
2016-08-13 22:12:03 +00:00
*
* Licensed under the Apache License , Version 2.0 ( the " License " ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an " AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
# ifndef MBED_STATS_H
# define MBED_STATS_H
2016-10-26 22:06:08 +00:00
# include <stdint.h>
2016-10-27 15:30:45 +00:00
# include <stddef.h>
2018-05-15 16:06:21 +00:00
# include "hal/ticker_api.h"
2016-08-13 22:12:03 +00:00
# ifdef __cplusplus
extern " C " {
# endif
2018-05-02 16:35:45 +00:00
# ifdef MBED_ALL_STATS_ENABLED
2018-11-15 21:13:37 +00:00
# ifndef MBED_SYS_STATS_ENABLED
2018-05-03 21:10:48 +00:00
# define MBED_SYS_STATS_ENABLED 1
2018-11-15 21:13:37 +00:00
# endif
# ifndef MBED_STACK_STATS_ENABLED
2018-05-02 16:35:45 +00:00
# define MBED_STACK_STATS_ENABLED 1
2018-11-15 21:13:37 +00:00
# endif
# ifndef MBED_CPU_STATS_ENABLED
2018-05-07 21:10:06 +00:00
# define MBED_CPU_STATS_ENABLED 1
2018-11-15 21:13:37 +00:00
# endif
# ifndef MBED_HEAP_STATS_ENABLED
2018-05-02 16:35:45 +00:00
# define MBED_HEAP_STATS_ENABLED 1
2018-11-15 21:13:37 +00:00
# endif
# ifndef MBED_THREAD_STATS_ENABLED
2018-05-01 18:43:10 +00:00
# define MBED_THREAD_STATS_ENABLED 1
2018-05-02 16:35:45 +00:00
# endif
2018-11-15 21:13:37 +00:00
# endif // MBED_ALL_STATS_ENABLED
2018-11-05 20:39:37 +00:00
/** Maximum memory regions reported by mbed-os memory statistics */
# define MBED_MAX_MEM_REGIONS 4
2017-10-24 15:05:45 +00:00
/**
* struct mbed_stats_heap_t definition
*/
2016-08-13 22:12:03 +00:00
typedef struct {
2018-10-11 22:39:49 +00:00
uint32_t current_size ; /**< Bytes currently allocated on the heap */
uint32_t max_size ; /**< Maximum bytes allocated on the heap at one time since reset */
uint32_t total_size ; /**< Cumulative sum of bytes allocated on the heap that have not been freed */
uint32_t reserved_size ; /**< Current number of bytes reserved for the heap */
uint32_t alloc_cnt ; /**< Current number of allocations that have not been freed since reset */
uint32_t alloc_fail_cnt ; /**< Number of failed allocations since reset */
uint32_t overhead_size ; /**< Number of bytes used to store heap statistics. This overhead takes up space on the heap, reducing the available heap space */
2016-08-13 22:12:03 +00:00
} mbed_stats_heap_t ;
/**
2018-10-11 22:39:49 +00:00
* Fill the passed in heap stat structure with the heap statistics .
2016-10-28 16:20:12 +00:00
*
* @ param stats A pointer to the mbed_stats_heap_t structure to fill
2016-08-13 22:12:03 +00:00
*/
void mbed_stats_heap_get ( mbed_stats_heap_t * stats ) ;
2017-10-24 15:05:45 +00:00
/**
* struct mbed_stats_stack_t definition
*/
2016-10-26 22:06:08 +00:00
typedef struct {
2018-10-11 22:39:49 +00:00
uint32_t thread_id ; /**< Identifier for the thread that owns the stack or 0 if representing accumulated statistics */
uint32_t max_size ; /**< Maximum number of bytes used on the stack since the thread was started */
uint32_t reserved_size ; /**< Current number of bytes reserved for the stack */
2018-11-01 16:57:44 +00:00
uint32_t stack_cnt ; /**< The number of stacks represented in the accumulated statistics or 1 if representing a single stack */
2016-10-26 22:06:08 +00:00
} mbed_stats_stack_t ;
/**
2018-10-11 22:39:49 +00:00
* Fill the passed in structure with stack statistics accumulated for all threads . The thread_id will be 0
2017-07-20 14:56:20 +00:00
* and stack_cnt will represent number of threads .
2016-10-28 16:20:12 +00:00
*
* @ param stats A pointer to the mbed_stats_stack_t structure to fill
2016-10-26 22:06:08 +00:00
*/
void mbed_stats_stack_get ( mbed_stats_stack_t * stats ) ;
2016-10-27 15:30:45 +00:00
/**
2018-10-11 22:39:49 +00:00
* Fill the passed array of structures with the stack statistics for each available thread .
2016-10-28 16:20:12 +00:00
*
* @ param stats A pointer to an array of mbed_stats_stack_t structures to fill
* @ param count The number of mbed_stats_stack_t structures in the provided array
2018-10-11 22:39:49 +00:00
* @ return The number of mbed_stats_stack_t structures that have been filled .
* If the number of stacks on the system is less than or equal to count , it will equal the number of stacks on the system .
* If the number of stacks on the system is greater than count , it will equal count .
2016-10-27 15:30:45 +00:00
*/
size_t mbed_stats_stack_get_each ( mbed_stats_stack_t * stats , size_t count ) ;
2018-05-07 21:10:06 +00:00
/**
* struct mbed_stats_cpu_t definition
*/
typedef struct {
2018-10-11 22:39:49 +00:00
us_timestamp_t uptime ; /**< Time since the system has started */
us_timestamp_t idle_time ; /**< Time spent in the idle thread since the system has started */
us_timestamp_t sleep_time ; /**< Time spent in sleep since the system has started */
us_timestamp_t deep_sleep_time ; /**< Time spent in deep sleep since the system has started */
2018-05-07 21:10:06 +00:00
} mbed_stats_cpu_t ;
/**
* Fill the passed in CPU stat structure with CPU statistics .
*
* @ param stats A pointer to the mbed_stats_cpu_t structure to fill
*/
void mbed_stats_cpu_get ( mbed_stats_cpu_t * stats ) ;
2018-05-03 16:50:01 +00:00
/**
* struct mbed_stats_thread_t definition
*/
typedef struct {
2018-10-12 16:08:01 +00:00
uint32_t id ; /**< ID of the thread */
2018-10-11 22:39:49 +00:00
uint32_t state ; /**< State of the thread */
uint32_t priority ; /**< Priority of the thread (higher number indicates higher priority) */
uint32_t stack_size ; /**< Current number of bytes reserved for the stack */
uint32_t stack_space ; /**< Current number of free bytes remaining on the stack */
const char * name ; /**< Name of the thread */
2018-05-03 16:50:01 +00:00
} mbed_stats_thread_t ;
2018-05-01 18:43:10 +00:00
/**
2018-10-11 22:39:49 +00:00
* Fill the passed array of stat structures with the thread statistics for each available thread .
2018-05-01 18:43:10 +00:00
*
* @ param stats A pointer to an array of mbed_stats_thread_t structures to fill
* @ param count The number of mbed_stats_thread_t structures in the provided array
2018-10-11 22:39:49 +00:00
* @ return The number of mbed_stats_thread_t structures that have been filled .
* If the number of threads on the system is less than or equal to count , it will equal the number of threads on the system .
* If the number of threads on the system is greater than count , it will equal count .
2018-05-01 18:43:10 +00:00
*/
size_t mbed_stats_thread_get_each ( mbed_stats_thread_t * stats , size_t count ) ;
2018-05-03 21:10:48 +00:00
/**
* enum mbed_compiler_id_t definition
*/
typedef enum {
ARM = 1 , /**< ARM */
GCC_ARM , /**< GNU ARM */
IAR /**< IAR */
} mbed_compiler_id_t ;
/**
* struct mbed_stats_sys_t definition
*/
typedef struct {
2018-11-28 00:06:26 +00:00
uint32_t os_version ; /**< Mbed OS version (populated only for tagged releases) */
uint32_t cpu_id ; /**< CPUID register data (Cortex-M only supported) */
mbed_compiler_id_t compiler_id ; /**< Compiler ID \ref mbed_compiler_id_t */
uint32_t compiler_version ; /**< Compiler version */
uint32_t ram_start [ MBED_MAX_MEM_REGIONS ] ; /**< Start addresses of all internal RAM memories */
uint32_t ram_size [ MBED_MAX_MEM_REGIONS ] ; /**< Size of all internal RAM memories in target */
uint32_t rom_start [ MBED_MAX_MEM_REGIONS ] ; /**< Start addresses of all internal ROM memories */
uint32_t rom_size [ MBED_MAX_MEM_REGIONS ] ; /**< Size of all internal ROM memories in target */
2018-05-03 21:10:48 +00:00
} mbed_stats_sys_t ;
/**
2018-10-11 22:39:49 +00:00
* Fill the passed in system stat structure with system statistics .
2018-05-03 21:10:48 +00:00
*
* @ param stats A pointer to the mbed_stats_sys_t structure to fill
*/
void mbed_stats_sys_get ( mbed_stats_sys_t * stats ) ;
2016-08-13 22:12:03 +00:00
# ifdef __cplusplus
}
# endif
# endif
2016-10-04 20:02:44 +00:00
/** @}*/
2017-10-24 15:05:45 +00:00
/** @}*/