Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Thu Oct 11 02:27:46 2018 +0000
Revision:
3:f3764f852aa8
Parent:
0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;

Who changed what in which revision?

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