mbed library sources. Supersedes mbed-src.

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

Committer:
AnnaBridge
Date:
Thu Sep 06 13:40:20 2018 +0100
Revision:
187:0387e8f68319
Parent:
186:707f6e361f3e
Child:
188:bcfe06ba3d64
mbed-dev library. Release version 163

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