-
Notifications
You must be signed in to change notification settings - Fork 157
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
evedon
merged 17 commits into
ARMmbed:master
from
hugueskamba:hk-multi-threaded-blinky-and-baremetal
Nov 4, 2019
Merged
Simplify application #192
Changes from all commits
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
62c995e
Use threads comms to blink and add baremetal version
hugueskamba 7b12e79
Add application variants and Mbed OS bare metal tutorial
hugueskamba 007b92b
Remove multithreaded application
hugueskamba b3e0e50
Remove `tests` as no longer relevant
hugueskamba 9f4477f
Correct the last force push resulting from rebasing from the master b…
hugueskamba 3e5b7df
Marked the example as official
hugueskamba 2f96047
Addressing PR review comments and adding a smaller badge
hugueskamba 2022670
Remove bare metal information in the project
hugueskamba 8b7730c
Merge branch 'master' into hk-multi-threaded-blinky-and-baremetal
hugueskamba 0010085
Move supported toolchain info to the "Building and Running" section
hugueskamba 96c4eba
Add an "Expected output" section to README.
hugueskamba 77b6b31
Add information about importing to the online compiler.
hugueskamba effcefb
Say that the example is part of the official Mbed OS examples
hugueskamba 1b45642
Add commands to download the project with `git clone` and `mbed import`.
hugueskamba 5213199
Apply suggestions from code review
hugueskamba de2bd2c
Correct indentation
hugueskamba 4eb2565
Add nitpicky punctuation
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,149 +1,61 @@ | ||
# Getting started example for Mbed OS | ||
 | ||
# 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 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/). | ||
|
||
Please install [Mbed CLI](https://github.com/ARMmbed/mbed-cli#installing-mbed-cli). | ||
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).) | ||
|
||
## Import the example application | ||
1. [Install Mbed CLI](https://os.mbed.com/docs/mbed-os/latest/quick-start/offline-with-mbed-cli.html). | ||
|
||
From the command-line, import the example: | ||
1. Clone this repository on your system, and change the current directory to where the project was cloned: | ||
|
||
``` | ||
mbed import mbed-os-example-blinky | ||
cd mbed-os-example-blinky | ||
``` | ||
```bash | ||
$ git clone [email protected]:armmbed/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 | ||
``` | ||
|
||
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. | ||
|
||
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 | ||
|
||
#### 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 | ||
|
||
| 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 | ||
|
||
``` | ||
Alternatively, you can download the example project with Arm Mbed CLI using the `import` subcommand: | ||
|
||
## Troubleshooting | ||
```bash | ||
$ mbed import mbed-os-example-blinky && cd mbed-os-example-blinky | ||
``` | ||
|
||
|
||
## Application functionality | ||
evedon marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
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. | ||
|
||
|
||
## 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 | ||
|
||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
https://github.com/ARMmbed/mbed-os/#679d24833acf0a0b5b0d528576bb37c70863bc4e | ||
https://github.com/ARMmbed/mbed-os/#679d24833acf0a0b5b0d528576bb37c70863bc4e |
This file was deleted.
Oops, something went wrong.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.