Myself and others new to mbed having trouble understanding the various arcane requirements. Adding a mbed_app.json file to enable a library feature instead of using a #define is one of them. Sharing this to help others.

Dependencies:   max32630fthr USBDevice

Committer:
psionprime
Date:
Fri Apr 05 01:44:50 2019 +0000
Revision:
9:29f7bb957c34
Parent:
8:d2b660bf5f94
- initial commit; - all stats enabled; - getting zeros for CPU times if anyone wants to fix ? :)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
psionprime 9:29f7bb957c34 1 // Unless otherwise noted in individual libraries, this code is for educational
psionprime 9:29f7bb957c34 2 // purposes only with no guaranties - use at your own risk. This file is
psionprime 9:29f7bb957c34 3 // declared to be completely in the public domain.
psionprime 9:29f7bb957c34 4
switches 0:60a522ae2e35 5 #include "mbed.h"
switches 2:57500e991166 6 #include "max32630fthr.h"
switches 1:6923b075c8d7 7 #include "USBSerial.h"
switches 0:60a522ae2e35 8
psionprime 9:29f7bb957c34 9 // for stats
psionprime 9:29f7bb957c34 10 #include "platform/mbed_assert.h"
psionprime 9:29f7bb957c34 11 #include "platform/mbed_debug.h"
psionprime 9:29f7bb957c34 12 #include "platform/mbed_error.h"
switches 0:60a522ae2e35 13
psionprime 9:29f7bb957c34 14 // define all stats enabled before including the header
psionprime 9:29f7bb957c34 15 //#define MBED_ALL_STATS_ENABLED 1
psionprime 9:29f7bb957c34 16 // *** using mos 5.11.5 (as 12.0 does not compile even blinky) does not work as expected. must include mbed_app.json file at same
psionprime 9:29f7bb957c34 17 // *** directory level as main.cpp with:
psionprime 9:29f7bb957c34 18 /*
psionprime 9:29f7bb957c34 19 {
psionprime 9:29f7bb957c34 20 "target_overrides": {
psionprime 9:29f7bb957c34 21 "*": {
psionprime 9:29f7bb957c34 22 "platform.all-stats-enabled": true
psionprime 9:29f7bb957c34 23 }
psionprime 9:29f7bb957c34 24 }
psionprime 9:29f7bb957c34 25 }
psionprime 9:29f7bb957c34 26 */
psionprime 9:29f7bb957c34 27 #include "platform/mbed_stats.h"
psionprime 9:29f7bb957c34 28
psionprime 9:29f7bb957c34 29 #define MAX_THREAD_INFO 10
psionprime 9:29f7bb957c34 30
psionprime 9:29f7bb957c34 31 // global vars
psionprime 9:29f7bb957c34 32 mbed_stats_sys_t sys_info;
psionprime 9:29f7bb957c34 33 mbed_stats_cpu_t cpu_info;
psionprime 9:29f7bb957c34 34 mbed_stats_heap_t heap_info;
psionprime 9:29f7bb957c34 35 mbed_stats_stack_t stack_info[ MAX_THREAD_INFO ];
psionprime 9:29f7bb957c34 36
psionprime 9:29f7bb957c34 37 // platform specific
psionprime 9:29f7bb957c34 38 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
switches 1:6923b075c8d7 39
switches 3:601c11238ccb 40 // Virtual serial port over USB
h_keyur 8:d2b660bf5f94 41 USBSerial microUSB;
switches 3:601c11238ccb 42
psionprime 9:29f7bb957c34 43 // RTOS is enabled
switches 0:60a522ae2e35 44 int main()
switches 0:60a522ae2e35 45 {
psionprime 9:29f7bb957c34 46 // wait until user ready
psionprime 9:29f7bb957c34 47 while (!microUSB.terminal_connected){
psionprime 9:29f7bb957c34 48 Thread::yield();
psionprime 9:29f7bb957c34 49 }
switches 2:57500e991166 50
switches 0:60a522ae2e35 51
psionprime 9:29f7bb957c34 52 // stats
psionprime 9:29f7bb957c34 53 microUSB.printf("\n\nSystem:");
psionprime 9:29f7bb957c34 54 microUSB.printf("\n---");
psionprime 9:29f7bb957c34 55 mbed_stats_sys_get(&sys_info);
psionprime 9:29f7bb957c34 56 microUSB.printf("\n\tmbed os version: %d", sys_info.os_version);
psionprime 9:29f7bb957c34 57 microUSB.printf("\n\tCPU ID: %d", sys_info.cpu_id);
psionprime 9:29f7bb957c34 58 microUSB.printf("\n\tCompiler ID: ");
psionprime 9:29f7bb957c34 59 switch(sys_info.compiler_id){
psionprime 9:29f7bb957c34 60 case ARM: microUSB.printf("ARM"); break;
psionprime 9:29f7bb957c34 61 case GCC_ARM: microUSB.printf("GCC_ARM"); break;
psionprime 9:29f7bb957c34 62 case IAR: microUSB.printf("IAR"); break;
psionprime 9:29f7bb957c34 63 default: microUSB.printf("UNKNOWN: %d", sys_info.compiler_id); break;
psionprime 9:29f7bb957c34 64 }
psionprime 9:29f7bb957c34 65 microUSB.printf("\n\tCompiler version: %d", sys_info.compiler_version);
psionprime 9:29f7bb957c34 66
psionprime 9:29f7bb957c34 67 // times are sourced in uSec, converted to seconds
psionprime 9:29f7bb957c34 68 microUSB.printf("\n\nCPU (seconds):");
psionprime 9:29f7bb957c34 69 microUSB.printf("\n---");
psionprime 9:29f7bb957c34 70 mbed_stats_cpu_get(&cpu_info);
psionprime 9:29f7bb957c34 71 microUSB.printf("\n\tUp time sec: %0.6f", cpu_info.uptime / 1000000.0);
psionprime 9:29f7bb957c34 72 microUSB.printf("\n\tIdle time: %0.6f", cpu_info.idle_time / 1000000.0);
psionprime 9:29f7bb957c34 73 microUSB.printf("\n\tSleep time: %0.6f", cpu_info.sleep_time / 1000000.0);
psionprime 9:29f7bb957c34 74 microUSB.printf("\n\tDeep sleep time: %0.6f", cpu_info.deep_sleep_time / 1000000.0);
psionprime 9:29f7bb957c34 75
psionprime 9:29f7bb957c34 76 microUSB.printf("\n\nMemory:");
psionprime 9:29f7bb957c34 77 microUSB.printf("\n---");
psionprime 9:29f7bb957c34 78 mbed_stats_heap_get( &heap_info );
psionprime 9:29f7bb957c34 79 microUSB.printf("\n\tBytes allocated currently: %d", heap_info.current_size);
psionprime 9:29f7bb957c34 80 microUSB.printf("\n\tMax bytes allocated at a given time: %d", heap_info.max_size);
psionprime 9:29f7bb957c34 81 microUSB.printf("\n\tCumulative sum of bytes ever allocated: %d", heap_info.total_size);
psionprime 9:29f7bb957c34 82 microUSB.printf("\n\tCurrent number of bytes allocated for the heap: %d", heap_info.reserved_size);
psionprime 9:29f7bb957c34 83 microUSB.printf("\n\tCurrent number of allocations: %d", heap_info.alloc_cnt);
psionprime 9:29f7bb957c34 84 microUSB.printf("\n\tNumber of failed allocations: %d", heap_info.alloc_fail_cnt);
psionprime 9:29f7bb957c34 85
psionprime 9:29f7bb957c34 86 mbed_stats_stack_get( &stack_info[0] );
psionprime 9:29f7bb957c34 87 microUSB.printf("\n\nCumulative Stack:");
psionprime 9:29f7bb957c34 88 microUSB.printf("\n---");
psionprime 9:29f7bb957c34 89 microUSB.printf("\n\tMaximum number of bytes used on the stack: %d", stack_info[0].max_size);
psionprime 9:29f7bb957c34 90 microUSB.printf("\n\tCurrent number of bytes allocated for the stack: %d", stack_info[0].reserved_size);
psionprime 9:29f7bb957c34 91 microUSB.printf("\n\tNumber of stacks stats accumulated in the structure: %d", stack_info[0].stack_cnt);
psionprime 9:29f7bb957c34 92
psionprime 9:29f7bb957c34 93 mbed_stats_stack_get_each( stack_info, MAX_THREAD_INFO );
psionprime 9:29f7bb957c34 94 microUSB.printf("\n\nThread Stack:");
psionprime 9:29f7bb957c34 95 microUSB.printf("\n---");
psionprime 9:29f7bb957c34 96 for(int i=0;i < MAX_THREAD_INFO; i++) {
psionprime 9:29f7bb957c34 97 if(stack_info[i].thread_id != 0) {
psionprime 9:29f7bb957c34 98 microUSB.printf("\n\tThread: %d", i);
psionprime 9:29f7bb957c34 99 microUSB.printf("\n\t\tThread Id: 0x%08X", stack_info[i].thread_id);
psionprime 9:29f7bb957c34 100 microUSB.printf("\n\t\tMaximum number of bytes used on the stack: %d", stack_info[i].max_size);
psionprime 9:29f7bb957c34 101 microUSB.printf("\n\t\tCurrent number of bytes allocated for the stack: %d", stack_info[i].reserved_size);
psionprime 9:29f7bb957c34 102 microUSB.printf("\n\t\tNumber of stacks stats accumulated in the structure: %d", stack_info[i].stack_cnt);
psionprime 9:29f7bb957c34 103 microUSB.printf("\n---");
psionprime 9:29f7bb957c34 104 }
psionprime 9:29f7bb957c34 105 }
psionprime 9:29f7bb957c34 106
psionprime 9:29f7bb957c34 107 microUSB.printf("\n===\n\n");
switches 1:6923b075c8d7 108
switches 0:60a522ae2e35 109 }
switches 0:60a522ae2e35 110