aboutsummaryrefslogtreecommitdiff
path: root/docs/modules/ROOT/pages/basic_application.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'docs/modules/ROOT/pages/basic_application.adoc')
-rw-r--r--docs/modules/ROOT/pages/basic_application.adoc30
1 files changed, 8 insertions, 22 deletions
diff --git a/docs/modules/ROOT/pages/basic_application.adoc b/docs/modules/ROOT/pages/basic_application.adoc
index 53aaa3d7d..c2849927a 100644
--- a/docs/modules/ROOT/pages/basic_application.adoc
+++ b/docs/modules/ROOT/pages/basic_application.adoc
@@ -2,8 +2,9 @@
2 2
3So you've got one of the xref:examples.adoc[examples] running, but what now? Let's go through a simple Embassy application for the nRF52 DK to understand it better. 3So you've got one of the xref:examples.adoc[examples] running, but what now? Let's go through a simple Embassy application for the nRF52 DK to understand it better.
4 4
5== Main
5 6
6== The main 7The full example can be found link:https://github.com/embassy-rs/embassy/tree/book-poc/docs/modules/ROOT/examples/basic[here].
7 8
8=== Rust Nightly 9=== Rust Nightly
9 10
@@ -11,9 +12,7 @@ The first thing you'll notice is a few declarations stating that Embassy require
11 12
12[source,rust] 13[source,rust]
13---- 14----
14#![no_std] 15include::example$basic/src/main.rs[lines="1..3"]
15#![no_main]
16#![feature(type_alias_impl_trait)]
17---- 16----
18 17
19=== Dealing with errors 18=== Dealing with errors
@@ -22,8 +21,7 @@ Then, what follows are some declarations on how to deal with panics and faults.
22 21
23[source,rust] 22[source,rust]
24---- 23----
25use defmt_rtt as _; 24include::example$basic/src/main.rs[lines="5..6"]
26use panic_probe as _;
27---- 25----
28 26
29=== Task declaration 27=== Task declaration
@@ -32,15 +30,7 @@ After a bit of import declaration, the tasks run by the application should be de
32 30
33[source,rust] 31[source,rust]
34---- 32----
35#[embassy::task] 33include::example$basic/src/main.rs[lines="16..24"]
36async fn blinker(led: Output<'static, P0_13>, interval: Duration) {
37 loop {
38 let _ = led.set_high();
39 Timer::after(interval).await;
40 let _ = led.set_low();
41 Timer::after(interval).await;
42 }
43}
44---- 34----
45 35
46An embassy task must be declared `async`, and may NOT take generic arguments. In this case, we are handed the LED that should be blinked and the interval of the blinking. 36An embassy task must be declared `async`, and may NOT take generic arguments. In this case, we are handed the LED that should be blinked and the interval of the blinking.
@@ -53,13 +43,9 @@ The main entry point of an Embassy application is defined using the `#[embassy::
53 43
54The `Spawner` is the way the main application spawns other tasks. The `Peripherals` type holds all peripherals that the application may use. In this case, we want to configure one of the pins as a GPIO output driving the LED: 44The `Spawner` is the way the main application spawns other tasks. The `Peripherals` type holds all peripherals that the application may use. In this case, we want to configure one of the pins as a GPIO output driving the LED:
55 45
56[source, rust] 46[source,rust]
57---- 47----
58#[embassy::main] 48include::example$basic/src/main.rs[lines="26..30"]
59async fn main(spawner: Spawner, p: Peripherals) {
60 let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard);
61 let _ = spawner.spawn(blinker(led, Duration::from_millis(300)));
62}
63---- 49----
64 50
65 51
@@ -78,7 +64,7 @@ The project definition needs to contain the embassy dependencies:
78 64
79[source,toml] 65[source,toml]
80---- 66----
81include::example$examples/nrf/Cargo.toml[lines="9..11"] 67include::example$basic/Cargo.toml[lines="8..10"]
82---- 68----
83 69
84Depending on your microcontroller, you may need to replace `embassy-nrf` with something else (`embassy-stm32` for STM32. Remember to update feature flags as well). 70Depending on your microcontroller, you may need to replace `embassy-nrf` with something else (`embassy-stm32` for STM32. Remember to update feature flags as well).