mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

UserRevisionLine numberNew contents of line
be_bryan 0:b74591d5ab33 1 #include "mbed_stats.h"
be_bryan 0:b74591d5ab33 2 #include <string.h>
be_bryan 0:b74591d5ab33 3 #include <stdlib.h>
be_bryan 0:b74591d5ab33 4 #include "mbed_assert.h"
be_bryan 0:b74591d5ab33 5
be_bryan 0:b74591d5ab33 6 #if MBED_CONF_RTOS_PRESENT
be_bryan 0:b74591d5ab33 7 #include "cmsis_os2.h"
be_bryan 0:b74591d5ab33 8 #endif
be_bryan 0:b74591d5ab33 9
be_bryan 0:b74591d5ab33 10 // note: mbed_stats_heap_get defined in mbed_alloc_wrappers.cpp
be_bryan 0:b74591d5ab33 11
be_bryan 0:b74591d5ab33 12 void mbed_stats_stack_get(mbed_stats_stack_t *stats)
be_bryan 0:b74591d5ab33 13 {
be_bryan 0:b74591d5ab33 14 memset(stats, 0, sizeof(mbed_stats_stack_t));
be_bryan 0:b74591d5ab33 15
be_bryan 0:b74591d5ab33 16 #if MBED_STACK_STATS_ENABLED && MBED_CONF_RTOS_PRESENT
be_bryan 0:b74591d5ab33 17 uint32_t thread_n = osThreadGetCount();
be_bryan 0:b74591d5ab33 18 unsigned i;
be_bryan 0:b74591d5ab33 19 osThreadId_t *threads;
be_bryan 0:b74591d5ab33 20
be_bryan 0:b74591d5ab33 21 threads = malloc(sizeof(osThreadId_t) * thread_n);
be_bryan 0:b74591d5ab33 22 MBED_ASSERT(threads != NULL);
be_bryan 0:b74591d5ab33 23
be_bryan 0:b74591d5ab33 24 osKernelLock();
be_bryan 0:b74591d5ab33 25 thread_n = osThreadEnumerate(threads, thread_n);
be_bryan 0:b74591d5ab33 26
be_bryan 0:b74591d5ab33 27 for(i = 0; i < thread_n; i++) {
be_bryan 0:b74591d5ab33 28 uint32_t stack_size = osThreadGetStackSize(threads[i]);
be_bryan 0:b74591d5ab33 29 stats->max_size += stack_size - osThreadGetStackSpace(threads[i]);
be_bryan 0:b74591d5ab33 30 stats->reserved_size += stack_size;
be_bryan 0:b74591d5ab33 31 stats->stack_cnt++;
be_bryan 0:b74591d5ab33 32 }
be_bryan 0:b74591d5ab33 33 osKernelUnlock();
be_bryan 0:b74591d5ab33 34
be_bryan 0:b74591d5ab33 35 free(threads);
be_bryan 0:b74591d5ab33 36 #endif
be_bryan 0:b74591d5ab33 37 }
be_bryan 0:b74591d5ab33 38
be_bryan 0:b74591d5ab33 39 size_t mbed_stats_stack_get_each(mbed_stats_stack_t *stats, size_t count)
be_bryan 0:b74591d5ab33 40 {
be_bryan 0:b74591d5ab33 41 memset(stats, 0, count*sizeof(mbed_stats_stack_t));
be_bryan 0:b74591d5ab33 42 size_t i = 0;
be_bryan 0:b74591d5ab33 43
be_bryan 0:b74591d5ab33 44 #if MBED_STACK_STATS_ENABLED && MBED_CONF_RTOS_PRESENT
be_bryan 0:b74591d5ab33 45 osThreadId_t *threads;
be_bryan 0:b74591d5ab33 46
be_bryan 0:b74591d5ab33 47 threads = malloc(sizeof(osThreadId_t) * count);
be_bryan 0:b74591d5ab33 48 MBED_ASSERT(threads != NULL);
be_bryan 0:b74591d5ab33 49
be_bryan 0:b74591d5ab33 50 osKernelLock();
be_bryan 0:b74591d5ab33 51 count = osThreadEnumerate(threads, count);
be_bryan 0:b74591d5ab33 52
be_bryan 0:b74591d5ab33 53 for(i = 0; i < count; i++) {
be_bryan 0:b74591d5ab33 54 uint32_t stack_size = osThreadGetStackSize(threads[i]);
be_bryan 0:b74591d5ab33 55 stats[i].max_size = stack_size - osThreadGetStackSpace(threads[i]);
be_bryan 0:b74591d5ab33 56 stats[i].reserved_size = stack_size;
be_bryan 0:b74591d5ab33 57 stats[i].thread_id = (uint32_t)threads[i];
be_bryan 0:b74591d5ab33 58 stats[i].stack_cnt = 1;
be_bryan 0:b74591d5ab33 59 }
be_bryan 0:b74591d5ab33 60 osKernelUnlock();
be_bryan 0:b74591d5ab33 61
be_bryan 0:b74591d5ab33 62 free(threads);
be_bryan 0:b74591d5ab33 63 #endif
be_bryan 0:b74591d5ab33 64
be_bryan 0:b74591d5ab33 65 return i;
be_bryan 0:b74591d5ab33 66 }
be_bryan 0:b74591d5ab33 67
be_bryan 0:b74591d5ab33 68 #if MBED_STACK_STATS_ENABLED && !MBED_CONF_RTOS_PRESENT
be_bryan 0:b74591d5ab33 69 #warning Stack statistics are currently not supported without the rtos.
be_bryan 0:b74591d5ab33 70 #endif