This is the initial version of my 7-segment hardware test and software demo project. This project will also be the starting point for the EE- 2905 Week 10 lab practical.

Files at this revision

API Documentation at this revision

Comitter:
mbed_official
Date:
Mon Nov 04 16:00:04 2019 +0000
Parent:
101:130fd2e532f0
Child:
103:681967d62a72
Commit message:
Simplify application (#192)

The example project has been re-written to be simplified. It uses a delay within
a loop.

Runtime statistics has been removed and is only mentioned in the README. The
reader is invited to find out more. Runtime statistics is a topic on its own
and should not be implemented here.
.
Commit copied from https://github.com/ARMmbed/mbed-os-example-blinky

Changed in this revision

README.md Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
mbed_app.json Show diff for this revision Revisions of this file
resources/official_armmbed_example_badge.png Show annotated file Show diff for this revision Revisions of this file
stats_report.h Show diff for this revision Revisions of this file
tests/README.md Show diff for this revision Revisions of this file
tests/blinky.log Show diff for this revision Revisions of this file
--- a/README.md	Wed Oct 23 18:00:04 2019 +0100
+++ b/README.md	Mon Nov 04 16:00:04 2019 +0000
@@ -1,149 +1,61 @@
-# Getting started example for Mbed OS
-
-This guide reviews the steps required to get Blinky with the addition of dynamic OS statistics working on an Mbed OS platform. (Note: To see a rendered example you can import into the Arm Online Compiler, please see our [quick start](https://os.mbed.com/docs/mbed-os/latest/quick-start/online-with-the-online-compiler.html#importing-the-code).)
-
-Please install [Mbed CLI](https://github.com/ARMmbed/mbed-cli#installing-mbed-cli).
-
-## Import the example application
+![](./resources/official_armmbed_example_badge.png)
+# Blinky Mbed OS example
 
-From the command-line, import the example:
-
-```
-mbed import mbed-os-example-blinky
-cd mbed-os-example-blinky
-```
-
-### Now compile
-
-Invoke `mbed compile`, and specify the name of your platform and your favorite toolchain (`GCC_ARM`, `ARM`, `IAR`). For example, for the Arm Compiler:
+The example project is part of the [Arm Mbed OS Official Examples](https://os.mbed.com/code/) and is the [getting started example for Mbed OS](https://os.mbed.com/docs/mbed-os/v5.14/quick-start/index.html). It contains an application that repeatedly blinks an LED on supported [Mbed boards](https://os.mbed.com/platforms/).
 
-```
-mbed compile -m K64F -t ARM
-```
-
-Your PC may take a few minutes to compile your code. At the end, you see the following result:
-
-```
-[snip]
+You can build the project with all supported [Mbed OS build tools](https://os.mbed.com/docs/mbed-os/latest/tools/index.html). However, this example project specifically refers to the command-line interface tool [Arm Mbed CLI](https://github.com/ARMmbed/mbed-cli#installing-mbed-cli).
+(Note: To see a rendered example you can import into the Arm Online Compiler, please see our [import quick start](https://os.mbed.com/docs/mbed-os/latest/quick-start/online-with-the-online-compiler.html#importing-the-code).)
 
-Image: ./BUILD/K64F/GCC_ARM/mbed-os-example-blinky.bin
-```
-
-### Program your board
-
-1. Connect your Mbed device to the computer over USB.
-1. Copy the binary file to the Mbed device.
-1. Press the reset button to start the program.
-
-The LED on your platform turns on and off. The main thread will additionally take a snapshot of the device's runtime statistics and display it over serial to your PC. The snapshot includes:
+1. [Install Mbed CLI](https://os.mbed.com/docs/mbed-os/latest/quick-start/offline-with-mbed-cli.html).
 
-* System Information:
-    * Mbed OS Version: Will currently default to 999999
-    * Compiler ID
-        * ARM = 1
-        * GCC_ARM = 2
-        * IAR = 3
-    * [CPUID Register Information](#cpuid-register-information)
-    * [Compiler Version](#compiler-version)
-* CPU Statistics
-    * Percentage of runtime that the device has spent awake versus in sleep
-* Heap Statistics
-    * Current heap size
-    * Max heap size which refers to the largest the heap has grown to
-* Thread Statistics
-    * Provides information on all running threads in the OS including
-        * Thread ID
-        * Thread Name
-        * Thread State
-        * Thread Priority
-        * Thread Stack Size
-        * Thread Stack Space
+1. Clone this repository on your system, and change the current directory to where the project was cloned:
+
+    ```bash
+    $ git clone git@github.com:armmbed/mbed-os-example-blinky && cd mbed-os-example-blinky
+    ```
 
-#### Compiler Version
-
-| Compiler | Version Layout |
-| -------- | -------------- |
-| ARM      | PVVbbbb (P = Major; VV = Minor; bbbb = build number) |
-| GCC      | VVRRPP  (VV = Version; RR = Revision; PP = Patch)    |
-| IAR      | VRRRPPP (V = Version; RRR = Revision; PPP = Patch)   |
-
-#### CPUID Register Information
+    Alternatively, you can download the example project with Arm Mbed CLI using the `import` subcommand:
 
-| Bit Field | Field Description | Values |
-| --------- | ----------------- | ------ |
-|[31:24]    | Implementer       | 0x41 = ARM |
-|[23:20]    | Variant           | Major revision 0x0  =  Revision 0 |
-|[19:16]    | Architecture      | 0xC  = Baseline Architecture |
-|           |                   | 0xF  = Constant (Mainline Architecture) |
-|[15:4]     | Part Number       | 0xC20 =  Cortex-M0 |
-|           |                   | 0xC60 = Cortex-M0+ |
-|           |                   | 0xC23 = Cortex-M3  |
-|           |                   | 0xC24 = Cortex-M4  |
-|           |                   | 0xC27 = Cortex-M7  |
-|           |                   | 0xD20 = Cortex-M23 |
-|           |                   | 0xD21 = Cortex-M33 |
-|[3:0]      | Revision          | Minor revision: 0x1 = Patch 1 |
+    ```bash
+    $ mbed import mbed-os-example-blinky && cd mbed-os-example-blinky
+    ```
 
 
+## Application functionality
 
-You can view individual examples and additional API information of the statistics collection tools at the bottom of the page in the [related links section](#related-links).
+The `main()` function is the single thread in the application. It toggles the state of a digital output connected to an LED on the board.
+
+## Building and running
+
+1. Connect a USB cable between the USB port on the board and the host computer.
+2. <a name="build_cmd"></a> Run the following command to build the example project and program the microcontroller flash memory:
+    ```bash
+    $ mbed compile -m <TARGET> -t <TOOLCHAIN> --flash
+    ```
+The binary is located at `./BUILD/<TARGET>/<TOOLCHAIN>/mbed-os-example-blinky.bin`.
+
+Alternatively, you can manually copy the binary to the board, which you mount on the host computer over USB.
+
+Depending on the target, you can build the example project with the `GCC_ARM`, `ARM` or `IAR` toolchain. After installing Arm Mbed CLI, run the command below to determine which toolchain supports your target:
+
+    ```bash
+    $ mbed compile -S
+    ```
+
+## Expected output
+The LED on your target turns on and off every 500 milliseconds.
 
 
-### Output
-
-To view the serial output you can use any terminal client of your choosing such as [PuTTY](http://www.putty.org/) or [CoolTerm](http://freeware.the-meiers.org/). Unless otherwise specified, printf defaults to a baud rate of 9600 on Mbed OS.
-
-You can find more information on the Mbed OS configuration tools and serial communication in Mbed OS in the related [related links section](#related-links).
-
-The output should contain the following block transmitted at the blinking LED frequency (actual values may vary depending on your target, build profile, and toolchain):
-
-```
-=============================== SYSTEM INFO  ================================
-Mbed OS Version: 999999
-CPU ID: 0x410fc241
-Compiler ID: 2
-Compiler Version: 60300
-RAM0: Start 0x20000000 Size: 0x30000
-RAM1: Start 0x1fff0000 Size: 0x10000
-ROM0: Start 0x0 Size: 0x100000
-================= CPU STATS =================
-Idle: 98% Usage: 2%
-================ HEAP STATS =================
-Current heap: 1096
-Max heap size: 1096
-================ THREAD STATS ===============
-ID: 0x20001eac
-Name: main_thread
-State: 2
-Priority: 24
-Stack Size: 4096
-Stack Space: 3296
-
-ID: 0x20000f5c
-Name: idle_thread
-State: 1
-Priority: 1
-Stack Size: 512
-Stack Space: 352
-
-ID: 0x20000f18
-Name: timer_thread
-State: 3
-Priority: 40
-Stack Size: 768
-Stack Space: 664
-
-```
-
 ## Troubleshooting
-
 If you have problems, you can review the [documentation](https://os.mbed.com/docs/latest/tutorials/debugging.html) for suggestions on what could be wrong and how to fix it.
 
 ## Related Links
 
-* [Mbed OS Stats API](https://os.mbed.com/docs/latest/apis/mbed-statistics.html)
-* [Mbed OS Configuration](https://os.mbed.com/docs/latest/reference/configuration.html)
-* [Mbed OS Serial Communication](https://os.mbed.com/docs/latest/tutorials/serial-communication.html)
+* [Mbed OS Stats API](https://os.mbed.com/docs/latest/apis/mbed-statistics.html).
+* [Mbed OS Configuration](https://os.mbed.com/docs/latest/reference/configuration.html).
+* [Mbed OS Serial Communication](https://os.mbed.com/docs/latest/tutorials/serial-communication.html).
+* [Mbed OS bare metal](https://os.mbed.com/docs/mbed-os/latest/reference/mbed-os-bare-metal.html).
+* [Mbed boards](https://os.mbed.com/platforms/).
 
 ### License and contributions
 
--- a/main.cpp	Wed Oct 23 18:00:04 2019 +0100
+++ b/main.cpp	Mon Nov 04 16:00:04 2019 +0000
@@ -1,33 +1,23 @@
 /* mbed Microcontroller Library
- * Copyright (c) 2018 ARM Limited
+ * Copyright (c) 2019 ARM Limited
  * SPDX-License-Identifier: Apache-2.0
  */
 
 #include "mbed.h"
 #include "platform/mbed_thread.h"
-#include "stats_report.h"
 
-DigitalOut led1(LED1);
 
-#define SLEEP_TIME                  500 // (msec)
-#define PRINT_AFTER_N_LOOPS         20
+// Blinking rate in milliseconds
+#define BLINKING_RATE_MS                                                    500
 
-// main() runs in its own thread in the OS
+
 int main()
 {
-    SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loop delay time in ms */);
+    // Initialise the digital pin LED1 as an output
+    DigitalOut led(LED1);
 
-    int count = 0;
     while (true) {
-        // Blink LED and wait 0.5 seconds
-        led1 = !led1;
-        thread_sleep_for(SLEEP_TIME);
-
-        if ((0 == count) || (PRINT_AFTER_N_LOOPS == count)) {
-            // Following the main thread wait, report on the current system status
-            sys_state.report_state();
-            count = 0;
-        }
-        ++count;
+        led = !led;
+        thread_sleep_for(BLINKING_RATE_MS);
     }
 }
--- a/mbed-os.lib	Wed Oct 23 18:00:04 2019 +0100
+++ b/mbed-os.lib	Mon Nov 04 16:00:04 2019 +0000
@@ -1,1 +1,1 @@
-https://github.com/ARMmbed/mbed-os/#679d24833acf0a0b5b0d528576bb37c70863bc4e
+https://github.com/ARMmbed/mbed-os/#679d24833acf0a0b5b0d528576bb37c70863bc4e
--- a/mbed_app.json	Wed Oct 23 18:00:04 2019 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-{
-    "target_overrides": {
-        "*": {
-            "platform.stack-stats-enabled": true,
-            "platform.heap-stats-enabled": true,
-            "platform.cpu-stats-enabled": true,
-            "platform.thread-stats-enabled": true,
-            "platform.sys-stats-enabled": true
-        }
-    }
-}
Binary file resources/official_armmbed_example_badge.png has changed
--- a/stats_report.h	Wed Oct 23 18:00:04 2019 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2018 ARM Limited
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#ifndef STATS_REPORT_H
-#define STATS_REPORT_H
-
-#include <inttypes.h>
-#include "mbed.h"
-
-/**
- *  System Reporting library. Provides runtime information on device:
- *      - CPU sleep, idle, and wake times
- *      - Heap and stack usage
- *      - Thread information
- *      - Static system information
- */
-class SystemReport {
-    mbed_stats_heap_t   heap_stats;
-    mbed_stats_cpu_t    cpu_stats;
-    mbed_stats_sys_t    sys_stats;
-
-    mbed_stats_thread_t *thread_stats;
-    uint8_t   thread_count;
-    uint8_t   max_thread_count;
-    uint32_t  sample_time_ms;
-
-public:
-    /**
-     *  SystemReport - Sample rate in ms is required to handle the CPU percent awake logic
-     */
-    SystemReport(uint32_t sample_rate) : max_thread_count(8), sample_time_ms(sample_rate)
-    {
-        thread_stats = new mbed_stats_thread_t[max_thread_count];
-
-        // Collect the static system information
-        mbed_stats_sys_get(&sys_stats);
-
-        printf("=============================== SYSTEM INFO  ================================\r\n");
-        printf("Mbed OS Version: %" PRIu32 " \r\n", sys_stats.os_version);
-        printf("CPU ID: 0x%" PRIx32 " \r\n", sys_stats.cpu_id);
-        printf("Compiler ID: %d \r\n", sys_stats.compiler_id);
-        printf("Compiler Version: %" PRIu32 " \r\n", sys_stats.compiler_version);
-
-        for (int i = 0; i < MBED_MAX_MEM_REGIONS; i++) {
-            if (sys_stats.ram_size[i] != 0) {
-                printf("RAM%d: Start 0x%" PRIx32 " Size: 0x%" PRIx32 " \r\n", i, sys_stats.ram_start[i], sys_stats.ram_size[i]);
-            }
-        }
-        for (int i = 0; i < MBED_MAX_MEM_REGIONS; i++) {
-            if (sys_stats.rom_size[i] != 0) {
-                printf("ROM%d: Start 0x%" PRIx32 " Size: 0x%" PRIx32 " \r\n", i, sys_stats.rom_start[i], sys_stats.rom_size[i]);
-            }
-        }
-    }
-
-    ~SystemReport(void)
-    {
-        free(thread_stats);
-    }
-
-    /**
-     *  Report on each Mbed OS Platform stats API
-     */
-    void report_state(void)
-    {
-        report_cpu_stats();
-        report_heap_stats();
-        report_thread_stats();
-
-        // Clear next line to separate subsequent report logs
-        printf("\r\n");
-    }
-
-    /**
-     *  Report CPU idle and awake time in terms of percentage
-     */
-    void report_cpu_stats(void)
-    {
-        static uint64_t prev_idle_time = 0;
-
-        printf("================= CPU STATS =================\r\n");
-
-        // Collect and print cpu stats
-        mbed_stats_cpu_get(&cpu_stats);
-
-        uint64_t diff = (cpu_stats.idle_time - prev_idle_time);
-        uint8_t idle = (diff * 100) / (sample_time_ms * 1000);  // usec;
-        uint8_t usage = 100 - ((diff * 100) / (sample_time_ms * 1000));  // usec;;
-        prev_idle_time = cpu_stats.idle_time;
-
-        printf("Idle: %d%% Usage: %d%% \r\n", idle, usage);
-    }
-
-    /**
-     *  Report current heap stats. Current heap refers to the current amount of
-     *  allocated heap. Max heap refers to the highest amount of heap allocated
-     *  since reset.
-     */
-    void report_heap_stats(void)
-    {
-        printf("================ HEAP STATS =================\r\n");
-
-        // Collect and print heap stats
-        mbed_stats_heap_get(&heap_stats);
-
-        printf("Current heap: %" PRIu32 "\r\n", heap_stats.current_size);
-        printf("Max heap size: %" PRIu32 "\r\n", heap_stats.max_size);
-    }
-
-    /**
-     *  Report active thread stats
-     */
-    void report_thread_stats(void)
-    {
-        printf("================ THREAD STATS ===============\r\n");
-
-        // Collect and print running thread stats
-        int count = mbed_stats_thread_get_each(thread_stats, max_thread_count);
-
-        for (int i = 0; i < count; i++) {
-            printf("ID: 0x%" PRIx32 " \r\n",        thread_stats[i].id);
-            printf("Name: %s \r\n",               thread_stats[i].name);
-            printf("State: %" PRIu32 " \r\n",       thread_stats[i].state);
-            printf("Priority: %" PRIu32 " \r\n",    thread_stats[i].priority);
-            printf("Stack Size: %" PRIu32 " \r\n",  thread_stats[i].stack_size);
-            printf("Stack Space: %" PRIu32 " \r\n", thread_stats[i].stack_space);
-        }
-    }
-};
-
-#endif // STATS_REPORT_H
--- a/tests/README.md	Wed Oct 23 18:00:04 2019 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-# Testing examples
-
-Examples are tested using tool [htrun](https://github.com/ARMmbed/mbed-os-tools/tree/master/packages/mbed-host-tests) and templated print log. 
-
-To run the test, use following command after you build the example:
-```
-mbedhtrun -d D: -p COM4 -m K64F -f .\BUILD\K64F\GCC_ARM\blinky.bin --compare-log tests\blinky.log
-```
-
-
-More details about `htrun` are [here](https://github.com/ARMmbed/mbed-os-tools/tree/master/packages/mbed-host-tests#testing-mbed-os-examples).
-
--- a/tests/blinky.log	Wed Oct 23 18:00:04 2019 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-=============================== SYSTEM INFO  ================================
-Mbed OS Version:
-CPU ID: 0x[0-9a-fA-F]+
-Compiler ID: \d+
-Compiler Version:
-================= CPU STATS =================
-Idle: \d+% Usage: \d+%
-================ HEAP STATS =================
-Current heap: \d+
-Max heap size: \d+
-================ THREAD STATS ===============
-ID: 0x[0-9a-fA-F]+
-Name: main
-State: \d+
-Priority: \d+
-Stack Size: \d+
-Stack Space: \d+
-ID: 0x[0-9a-fA-F]+
-Name: rtx_idle
-State: \d+
-Priority: \d+
-Stack Size: \d+
-Stack Space: \d+
-ID: 0x[0-9a-fA-F]+
-Name: rtx_timer
-State: \d+
-Priority: \d+
-Stack Size: \d+
-Stack Space: \d+