Biomimetics MBED Library w/ Added Support for CAN3

Dependents:   CAN_TEST SPIne_Plus_DYNO_SENSORS SPIne_Plus_v2 SPIne_Plus_Dyno_v2

Committer:
adimmit
Date:
Tue Mar 09 20:33:24 2021 +0000
Revision:
3:993b4d6ff61e
Parent:
0:083111ae2a11
added CAN3

Who changed what in which revision?

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