mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
Anna Bridge
Date:
Fri Jun 22 16:45:37 2018 +0100
Revision:
186:707f6e361f3e
Parent:
167:e84263d55307
Child:
187:0387e8f68319
mbed-dev library. Release version 162

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anna Bridge 186:707f6e361f3e 1 #include "mbed_assert.h"
<> 152:9a67f0b066fc 2 #include "mbed_stats.h"
Anna Bridge 186:707f6e361f3e 3 #include "mbed_power_mgmt.h"
<> 152:9a67f0b066fc 4 #include <string.h>
AnnaBridge 167:e84263d55307 5 #include <stdlib.h>
Anna Bridge 186:707f6e361f3e 6
Anna Bridge 186:707f6e361f3e 7 #include "device.h"
Anna Bridge 186:707f6e361f3e 8 #ifdef MBED_CONF_RTOS_PRESENT
Anna Bridge 186:707f6e361f3e 9 #include "cmsis_os2.h"
Anna Bridge 186:707f6e361f3e 10 #include "rtos_idle.h"
Anna Bridge 186:707f6e361f3e 11 #elif defined(MBED_STACK_STATS_ENABLED) || defined(MBED_THREAD_STATS_ENABLED) || defined(MBED_CPU_STATS_ENABLED)
Anna Bridge 186:707f6e361f3e 12 #warning Statistics are currently not supported without the rtos.
Anna Bridge 186:707f6e361f3e 13 #endif
<> 152:9a67f0b066fc 14
Anna Bridge 186:707f6e361f3e 15 #if defined(MBED_CPU_STATS_ENABLED) && (!defined(DEVICE_LPTICKER) || !defined(DEVICE_SLEEP))
Anna Bridge 186:707f6e361f3e 16 #warning CPU statistics are not supported without low power timer support.
<> 152:9a67f0b066fc 17 #endif
<> 152:9a67f0b066fc 18
Anna Bridge 186:707f6e361f3e 19 void mbed_stats_cpu_get(mbed_stats_cpu_t *stats)
Anna Bridge 186:707f6e361f3e 20 {
Anna Bridge 186:707f6e361f3e 21 MBED_ASSERT(stats != NULL);
Anna Bridge 186:707f6e361f3e 22 memset(stats, 0, sizeof(mbed_stats_cpu_t));
Anna Bridge 186:707f6e361f3e 23 #if defined(MBED_CPU_STATS_ENABLED) && defined(DEVICE_LPTICKER) && defined(DEVICE_SLEEP)
Anna Bridge 186:707f6e361f3e 24 stats->uptime = mbed_uptime();
Anna Bridge 186:707f6e361f3e 25 stats->idle_time = mbed_time_idle();
Anna Bridge 186:707f6e361f3e 26 stats->sleep_time = mbed_time_sleep();
Anna Bridge 186:707f6e361f3e 27 stats->deep_sleep_time = mbed_time_deepsleep();
Anna Bridge 186:707f6e361f3e 28 #endif
Anna Bridge 186:707f6e361f3e 29 }
Anna Bridge 186:707f6e361f3e 30
<> 152:9a67f0b066fc 31 // note: mbed_stats_heap_get defined in mbed_alloc_wrappers.cpp
<> 152:9a67f0b066fc 32 void mbed_stats_stack_get(mbed_stats_stack_t *stats)
<> 152:9a67f0b066fc 33 {
Anna Bridge 186:707f6e361f3e 34 MBED_ASSERT(stats != NULL);
<> 152:9a67f0b066fc 35 memset(stats, 0, sizeof(mbed_stats_stack_t));
<> 152:9a67f0b066fc 36
Anna Bridge 186:707f6e361f3e 37 #if defined(MBED_STACK_STATS_ENABLED) && defined(MBED_CONF_RTOS_PRESENT)
AnnaBridge 167:e84263d55307 38 uint32_t thread_n = osThreadGetCount();
AnnaBridge 167:e84263d55307 39 unsigned i;
AnnaBridge 167:e84263d55307 40 osThreadId_t *threads;
<> 152:9a67f0b066fc 41
AnnaBridge 167:e84263d55307 42 threads = malloc(sizeof(osThreadId_t) * thread_n);
AnnaBridge 167:e84263d55307 43 MBED_ASSERT(threads != NULL);
AnnaBridge 167:e84263d55307 44
AnnaBridge 167:e84263d55307 45 osKernelLock();
AnnaBridge 167:e84263d55307 46 thread_n = osThreadEnumerate(threads, thread_n);
<> 152:9a67f0b066fc 47
Anna Bridge 186:707f6e361f3e 48 for (i = 0; i < thread_n; i++) {
AnnaBridge 167:e84263d55307 49 uint32_t stack_size = osThreadGetStackSize(threads[i]);
AnnaBridge 167:e84263d55307 50 stats->max_size += stack_size - osThreadGetStackSpace(threads[i]);
AnnaBridge 167:e84263d55307 51 stats->reserved_size += stack_size;
AnnaBridge 167:e84263d55307 52 stats->stack_cnt++;
AnnaBridge 167:e84263d55307 53 }
AnnaBridge 167:e84263d55307 54 osKernelUnlock();
<> 152:9a67f0b066fc 55
AnnaBridge 167:e84263d55307 56 free(threads);
<> 152:9a67f0b066fc 57 #endif
<> 152:9a67f0b066fc 58 }
<> 152:9a67f0b066fc 59
<> 152:9a67f0b066fc 60 size_t mbed_stats_stack_get_each(mbed_stats_stack_t *stats, size_t count)
<> 152:9a67f0b066fc 61 {
Anna Bridge 186:707f6e361f3e 62 MBED_ASSERT(stats != NULL);
Anna Bridge 186:707f6e361f3e 63 memset(stats, 0, count * sizeof(mbed_stats_stack_t));
Anna Bridge 186:707f6e361f3e 64
<> 152:9a67f0b066fc 65 size_t i = 0;
<> 152:9a67f0b066fc 66
Anna Bridge 186:707f6e361f3e 67 #if defined(MBED_STACK_STATS_ENABLED) && defined(MBED_CONF_RTOS_PRESENT)
AnnaBridge 167:e84263d55307 68 osThreadId_t *threads;
<> 152:9a67f0b066fc 69
AnnaBridge 167:e84263d55307 70 threads = malloc(sizeof(osThreadId_t) * count);
AnnaBridge 167:e84263d55307 71 MBED_ASSERT(threads != NULL);
AnnaBridge 167:e84263d55307 72
AnnaBridge 167:e84263d55307 73 osKernelLock();
AnnaBridge 167:e84263d55307 74 count = osThreadEnumerate(threads, count);
<> 152:9a67f0b066fc 75
Anna Bridge 186:707f6e361f3e 76 for (i = 0; i < count; i++) {
AnnaBridge 167:e84263d55307 77 uint32_t stack_size = osThreadGetStackSize(threads[i]);
AnnaBridge 167:e84263d55307 78 stats[i].max_size = stack_size - osThreadGetStackSpace(threads[i]);
AnnaBridge 167:e84263d55307 79 stats[i].reserved_size = stack_size;
AnnaBridge 167:e84263d55307 80 stats[i].thread_id = (uint32_t)threads[i];
AnnaBridge 167:e84263d55307 81 stats[i].stack_cnt = 1;
AnnaBridge 167:e84263d55307 82 }
AnnaBridge 167:e84263d55307 83 osKernelUnlock();
<> 152:9a67f0b066fc 84
AnnaBridge 167:e84263d55307 85 free(threads);
<> 152:9a67f0b066fc 86 #endif
<> 152:9a67f0b066fc 87
<> 152:9a67f0b066fc 88 return i;
<> 152:9a67f0b066fc 89 }
<> 152:9a67f0b066fc 90
Anna Bridge 186:707f6e361f3e 91 size_t mbed_stats_thread_get_each(mbed_stats_thread_t *stats, size_t count)
Anna Bridge 186:707f6e361f3e 92 {
Anna Bridge 186:707f6e361f3e 93 MBED_ASSERT(stats != NULL);
Anna Bridge 186:707f6e361f3e 94 memset(stats, 0, count * sizeof(mbed_stats_thread_t));
Anna Bridge 186:707f6e361f3e 95 size_t i = 0;
Anna Bridge 186:707f6e361f3e 96
Anna Bridge 186:707f6e361f3e 97 #if defined(MBED_THREAD_STATS_ENABLED) && defined(MBED_CONF_RTOS_PRESENT)
Anna Bridge 186:707f6e361f3e 98 osThreadId_t *threads;
Anna Bridge 186:707f6e361f3e 99
Anna Bridge 186:707f6e361f3e 100 threads = malloc(sizeof(osThreadId_t) * count);
Anna Bridge 186:707f6e361f3e 101 MBED_ASSERT(threads != NULL);
Anna Bridge 186:707f6e361f3e 102
Anna Bridge 186:707f6e361f3e 103 osKernelLock();
Anna Bridge 186:707f6e361f3e 104 count = osThreadEnumerate(threads, count);
Anna Bridge 186:707f6e361f3e 105
Anna Bridge 186:707f6e361f3e 106 for (i = 0; i < count; i++) {
Anna Bridge 186:707f6e361f3e 107 stats[i].id = (uint32_t)threads[i];
Anna Bridge 186:707f6e361f3e 108 stats[i].state = (uint32_t)osThreadGetState(threads[i]);
Anna Bridge 186:707f6e361f3e 109 stats[i].priority = (uint32_t)osThreadGetPriority(threads[i]);
Anna Bridge 186:707f6e361f3e 110 stats[i].stack_size = osThreadGetStackSize(threads[i]);
Anna Bridge 186:707f6e361f3e 111 stats[i].stack_space = osThreadGetStackSpace(threads[i]);
Anna Bridge 186:707f6e361f3e 112 stats[i].name = osThreadGetName(threads[i]);
Anna Bridge 186:707f6e361f3e 113 }
Anna Bridge 186:707f6e361f3e 114 osKernelUnlock();
Anna Bridge 186:707f6e361f3e 115 free(threads);
<> 152:9a67f0b066fc 116 #endif
Anna Bridge 186:707f6e361f3e 117 return i;
Anna Bridge 186:707f6e361f3e 118 }
Anna Bridge 186:707f6e361f3e 119
Anna Bridge 186:707f6e361f3e 120 void mbed_stats_sys_get(mbed_stats_sys_t *stats)
Anna Bridge 186:707f6e361f3e 121 {
Anna Bridge 186:707f6e361f3e 122 MBED_ASSERT(stats != NULL);
Anna Bridge 186:707f6e361f3e 123 memset(stats, 0, sizeof(mbed_stats_sys_t));
Anna Bridge 186:707f6e361f3e 124
Anna Bridge 186:707f6e361f3e 125 #if defined(MBED_SYS_STATS_ENABLED)
Anna Bridge 186:707f6e361f3e 126 #if defined(__CORTEX_M)
Anna Bridge 186:707f6e361f3e 127 stats->cpu_id = SCB->CPUID;
Anna Bridge 186:707f6e361f3e 128 #endif
Anna Bridge 186:707f6e361f3e 129 #if defined(__IAR_SYSTEMS_ICC__)
Anna Bridge 186:707f6e361f3e 130 stats->compiler_id = IAR;
Anna Bridge 186:707f6e361f3e 131 stats->compiler_version = __VER__;
Anna Bridge 186:707f6e361f3e 132 #elif defined(__CC_ARM)
Anna Bridge 186:707f6e361f3e 133 stats->compiler_id = ARM;
Anna Bridge 186:707f6e361f3e 134 stats->compiler_version = __ARMCC_VERSION;
Anna Bridge 186:707f6e361f3e 135 #elif defined(__GNUC__)
Anna Bridge 186:707f6e361f3e 136 stats->compiler_id = GCC_ARM;
Anna Bridge 186:707f6e361f3e 137 stats->compiler_version = (__GNUC__ * 10000 + __GNUC_MINOR__ * 100);
Anna Bridge 186:707f6e361f3e 138 #endif
Anna Bridge 186:707f6e361f3e 139
Anna Bridge 186:707f6e361f3e 140 #endif
Anna Bridge 186:707f6e361f3e 141 return;
Anna Bridge 186:707f6e361f3e 142 }