Skip to content

Simplify application #192

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 19 additions & 125 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,149 +1,43 @@
# Getting started example for Mbed OS
![](./resources/official_armmbed_example_badge.png)
# Blinky Mbed OS Example

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).)
The example project is part of the [Arm Mbed OS quick start guide](https://os.mbed.com/docs/mbed-os/v5.14/quick-start/index.html). It contains an application to repeatedly blink an LED on supported [Mbed boards](https://os.mbed.com/platforms/).

Please install [Mbed CLI](https://github.com/ARMmbed/mbed-cli#installing-mbed-cli).
The project can be built 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). Please install Arm Mbed CLI.

## Import the example application
Depending on the target, the example project can be built with `GCC_ARM`, `ARM` or `IAR` toolchain. Run the command below after installing ARM Mbed CLI to determine which toolchain supports your target.

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:

```
mbed compile -m K64F -t ARM
```bash
$ mbed compile -S
```

Your PC may take a few minutes to compile your code. At the end, you see the following result:

```
[snip]

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.
Clone this repository on your system and change the current directory to where the project was cloned.

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:

* 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
## Application functionality

#### Compiler Version
The `main()` function is the single thread in the application, it toggles the state of a digital output connected to an LED on the target.

| 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) |
## Building and Running

#### CPUID Register Information
1. Connect a USB cable between the USB port on the target 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` and can alternatively be manually copied to the target which gets mounted on the host computer via USB.

| 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 |



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).


### 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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* [Mbed OS Stats API](https://os.mbed.com/docs/latest/apis/mbed-statistics.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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* [Mbed OS Configuration](https://os.mbed.com/docs/latest/reference/configuration.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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* [Mbed OS Serial Communication](https://os.mbed.com/docs/latest/tutorials/serial-communication.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

Expand Down
26 changes: 8 additions & 18 deletions main.cpp
Original file line number Diff line number Diff line change
@@ -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);
}
}
2 changes: 1 addition & 1 deletion mbed-os.lib
Original file line number Diff line number Diff line change
@@ -1 +1 @@
https://github.com/ARMmbed/mbed-os/#b6e5a0a8afa34dec9dae8963778aebce0c82a54b
https://github.com/ARMmbed/mbed-os/#5941d1718339116cd12914238ec331c84da3d08f
11 changes: 0 additions & 11 deletions mbed_app.json

This file was deleted.

Binary file added resources/official_armmbed_example_badge.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
133 changes: 0 additions & 133 deletions stats_report.h

This file was deleted.

12 changes: 0 additions & 12 deletions tests/README.md

This file was deleted.

Loading