aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorQuentin Smith <[email protected]>2022-08-16 01:17:28 -0400
committerQuentin Smith <[email protected]>2022-08-16 01:17:28 -0400
commitc1d8c8cf36e3d13daf0eb93b56d8e149acf55b27 (patch)
tree5f76e21edc00dd58fefa36bfd9bd90eeaac89db2 /examples
parent0bf178dd1b11d97f20cb93c5fdb0c779259be0f8 (diff)
Add example of rtos-trace / SystemView
Diffstat (limited to 'examples')
-rw-r--r--examples/nrf/Cargo.toml68
-rw-r--r--examples/nrf/build.rs1
-rw-r--r--examples/nrf/src/bin/rtos_trace.rs64
3 files changed, 121 insertions, 12 deletions
diff --git a/examples/nrf/Cargo.toml b/examples/nrf/Cargo.toml
index 91edbd36d..2f877b6a1 100644
--- a/examples/nrf/Cargo.toml
+++ b/examples/nrf/Cargo.toml
@@ -4,28 +4,72 @@ name = "embassy-nrf-examples"
4version = "0.1.0" 4version = "0.1.0"
5 5
6[features] 6[features]
7default = ["nightly"] 7default = ["defmt", "nightly"]
8nightly = ["embassy-executor/nightly", "embassy-nrf/nightly", "embassy-nrf/unstable-traits", "embassy-usb", "embassy-usb-serial", "embassy-usb-hid", "embassy-usb-ncm", "embedded-io/async", "embassy-net"] 8nightly = ["embassy-executor/nightly", "embassy-nrf/nightly", "embassy-nrf/unstable-traits", "embassy-usb", "embassy-usb-serial", "embassy-usb-hid", "embassy-usb-ncm", "embedded-io/async", "embassy-net"]
9defmt = [
10 "dep:defmt",
11 "dep:defmt-rtt",
12 "embassy-util/defmt",
13 "embassy-executor/defmt",
14 "embassy-executor/defmt-timestamp-uptime",
15 "embassy-nrf/defmt",
16 "embassy-net/defmt",
17 "embassy-usb/defmt",
18 "embassy-usb-serial/defmt",
19 "embassy-usb-hid/defmt",
20 "embassy-usb-ncm/defmt",
21 "panic-probe/print-defmt",
22]
23log = [
24 "dep:log",
25 "embassy-util/log",
26 "embassy-executor/log",
27 "embassy-nrf/log",
28 "embassy-net/log",
29 "embassy-usb-ncm/log",
30 # Currently broken:
31 # "embassy-usb/log",
32 # "embassy-usb-serial/log",
33 # "embassy-usb-hid/log",
34]
35rtos-trace = [
36 "dep:rtos-trace",
37 "dep:systemview-target",
38 "log",
39 "embassy-executor/rtos-trace",
40 "embassy-executor/rtos-trace-interrupt",
41]
9 42
10[dependencies] 43[dependencies]
11embassy-util = { version = "0.1.0", path = "../../embassy-util", features = ["defmt"] } 44embassy-util = { version = "0.1.0", path = "../../embassy-util" }
12embassy-executor = { version = "0.1.0", path = "../../embassy-executor", features = ["defmt", "defmt-timestamp-uptime"] } 45embassy-executor = { version = "0.1.0", path = "../../embassy-executor" }
13embassy-nrf = { version = "0.1.0", path = "../../embassy-nrf", features = ["defmt", "nrf52840", "time-driver-rtc1", "gpiote", "unstable-pac"] } 46embassy-nrf = { version = "0.1.0", path = "../../embassy-nrf", features = ["nrf52840", "time-driver-rtc1", "gpiote", "unstable-pac"] }
14embassy-net = { version = "0.1.0", path = "../../embassy-net", features = ["defmt", "tcp", "dhcpv4", "medium-ethernet", "pool-16"], optional = true } 47embassy-net = { version = "0.1.0", path = "../../embassy-net", features = ["tcp", "dhcpv4", "medium-ethernet", "pool-16"], optional = true }
15embassy-usb = { version = "0.1.0", path = "../../embassy-usb", features = ["defmt"], optional = true } 48embassy-usb = { version = "0.1.0", path = "../../embassy-usb", optional = true }
16embassy-usb-serial = { version = "0.1.0", path = "../../embassy-usb-serial", features = ["defmt"], optional = true } 49embassy-usb-serial = { version = "0.1.0", path = "../../embassy-usb-serial", optional = true }
17embassy-usb-hid = { version = "0.1.0", path = "../../embassy-usb-hid", features = ["defmt"], optional = true } 50embassy-usb-hid = { version = "0.1.0", path = "../../embassy-usb-hid", optional = true }
18embassy-usb-ncm = { version = "0.1.0", path = "../../embassy-usb-ncm", features = ["defmt"], optional = true } 51embassy-usb-ncm = { version = "0.1.0", path = "../../embassy-usb-ncm", optional = true }
19embedded-io = "0.3.0" 52embedded-io = "0.3.0"
20 53
21defmt = "0.3" 54defmt = { version = "0.3", optional = true }
22defmt-rtt = "0.3" 55defmt-rtt = { version = "0.3", optional = true }
23 56
24cortex-m = "0.7.3" 57cortex-m = "0.7.3"
25cortex-m-rt = "0.7.0" 58cortex-m-rt = "0.7.0"
26panic-probe = { version = "0.3", features = ["print-defmt"] } 59panic-probe = { version = "0.3" }
27futures = { version = "0.3.17", default-features = false, features = ["async-await"] } 60futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
28rand = { version = "0.8.4", default-features = false } 61rand = { version = "0.8.4", default-features = false }
29embedded-storage = "0.3.0" 62embedded-storage = "0.3.0"
30usbd-hid = "0.5.2" 63usbd-hid = "0.5.2"
31serde = { version = "1.0.136", default-features = false } 64serde = { version = "1.0.136", default-features = false }
65rtos-trace = { version = "0.1.3", optional = true }
66systemview-target = { version = "0.1.1", optional = true, features = ["callbacks-app", "callbacks-os", "log", "cortex-m"] }
67log = { version = "0.4.17", optional = true }
68
69[[bin]]
70name = "rtos_trace"
71required-features = ["nightly", "rtos-trace", "log"]
72
73[patch.crates-io]
74rtos-trace = { git = "https://gitlab.com/quentinmit/rtos-trace.git", branch = "build-fix" }
75systemview-target = { git = "https://gitlab.com/quentinmit/rtos-trace.git", branch = "build-fix" }
diff --git a/examples/nrf/build.rs b/examples/nrf/build.rs
index 30691aa97..36cdb65a8 100644
--- a/examples/nrf/build.rs
+++ b/examples/nrf/build.rs
@@ -31,5 +31,6 @@ fn main() {
31 31
32 println!("cargo:rustc-link-arg-bins=--nmagic"); 32 println!("cargo:rustc-link-arg-bins=--nmagic");
33 println!("cargo:rustc-link-arg-bins=-Tlink.x"); 33 println!("cargo:rustc-link-arg-bins=-Tlink.x");
34 #[cfg(feature = "defmt")]
34 println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); 35 println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
35} 36}
diff --git a/examples/nrf/src/bin/rtos_trace.rs b/examples/nrf/src/bin/rtos_trace.rs
new file mode 100644
index 000000000..8b4f5b755
--- /dev/null
+++ b/examples/nrf/src/bin/rtos_trace.rs
@@ -0,0 +1,64 @@
1#![no_std]
2#![no_main]
3#![feature(type_alias_impl_trait)]
4
5use core::task::Poll;
6
7use embassy_executor::executor::Spawner;
8use embassy_executor::time::{Duration, Instant, Timer};
9use embassy_nrf::Peripherals;
10
11// N.B. systemview_target cannot be used at the same time as defmt_rtt.
12
13use rtos_trace;
14use systemview_target::SystemView;
15use panic_probe as _;
16use log::*;
17
18static LOGGER: systemview_target::SystemView = systemview_target::SystemView::new();
19rtos_trace::global_trace!{SystemView}
20
21struct TraceInfo();
22
23impl rtos_trace::RtosTraceApplicationCallbacks for TraceInfo {
24 fn system_description() {}
25 fn sysclock() -> u32 {
26 64000000
27 }
28}
29rtos_trace::global_application_callbacks!{TraceInfo}
30
31#[embassy_executor::task]
32async fn run1() {
33 loop {
34 info!("DING DONG");
35 Timer::after(Duration::from_ticks(16000)).await;
36 }
37}
38
39#[embassy_executor::task]
40async fn run2() {
41 loop {
42 Timer::at(Instant::from_ticks(0)).await;
43 }
44}
45
46#[embassy_executor::task]
47async fn run3() {
48 futures::future::poll_fn(|cx| {
49 cx.waker().wake_by_ref();
50 Poll::<()>::Pending
51 })
52 .await;
53}
54
55#[embassy_executor::main]
56async fn main(spawner: Spawner, _p: Peripherals) {
57 LOGGER.init();
58 ::log::set_logger(&LOGGER).ok();
59 ::log::set_max_level(::log::LevelFilter::Trace);
60
61 spawner.spawn(run1()).unwrap();
62 spawner.spawn(run2()).unwrap();
63 spawner.spawn(run3()).unwrap();
64}