aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorkalkyl <[email protected]>2022-12-13 13:49:51 +0100
committerkalkyl <[email protected]>2022-12-13 13:49:51 +0100
commit13d9d8fde109c09e310cbf1735917a768f4a1cf6 (patch)
tree076e1ff44676e27526177c90843841312f10a3a8 /tests
parentaea28c8aa0bc13251835c6e38f4e1fbcbd30f4db (diff)
Refactor after review
Diffstat (limited to 'tests')
-rw-r--r--tests/rp/src/bin/multicore.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/rp/src/bin/multicore.rs b/tests/rp/src/bin/multicore.rs
new file mode 100644
index 000000000..da78e887a
--- /dev/null
+++ b/tests/rp/src/bin/multicore.rs
@@ -0,0 +1,47 @@
1#![no_std]
2#![no_main]
3#![feature(type_alias_impl_trait)]
4
5use defmt::{info, unwrap};
6use embassy_executor::Executor;
7use embassy_executor::_export::StaticCell;
8use embassy_rp::multicore::{spawn_core1, Stack};
9use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
10use embassy_sync::channel::Channel;
11use {defmt_rtt as _, panic_probe as _};
12
13static mut CORE1_STACK: Stack<1024> = Stack::new();
14static EXECUTOR0: StaticCell<Executor> = StaticCell::new();
15static EXECUTOR1: StaticCell<Executor> = StaticCell::new();
16static CHANNEL0: Channel<CriticalSectionRawMutex, bool, 1> = Channel::new();
17static CHANNEL1: Channel<CriticalSectionRawMutex, bool, 1> = Channel::new();
18
19#[cortex_m_rt::entry]
20fn main() -> ! {
21 let p = embassy_rp::init(Default::default());
22 spawn_core1(p.CORE1, unsafe { &mut CORE1_STACK }, move || {
23 let executor1 = EXECUTOR1.init(Executor::new());
24 executor1.run(|spawner| unwrap!(spawner.spawn(core1_task())));
25 });
26 let executor0 = EXECUTOR0.init(Executor::new());
27 executor0.run(|spawner| unwrap!(spawner.spawn(core0_task())));
28}
29
30#[embassy_executor::task]
31async fn core0_task() {
32 info!("CORE0 is running");
33 let ping = true;
34 CHANNEL0.send(ping).await;
35 let pong = CHANNEL1.recv().await;
36 assert_eq!(ping, pong);
37
38 info!("Test OK");
39 cortex_m::asm::bkpt();
40}
41
42#[embassy_executor::task]
43async fn core1_task() {
44 info!("CORE1 is running");
45 let ping = CHANNEL0.recv().await;
46 CHANNEL1.send(ping).await;
47}