aboutsummaryrefslogtreecommitdiff
path: root/embassy-rp/src/multicore.rs
diff options
context:
space:
mode:
author1-rafael-1 <[email protected]>2025-09-15 20:07:18 +0200
committer1-rafael-1 <[email protected]>2025-09-15 20:07:18 +0200
commit6bb3d2c0720fa082f27d3cdb70f516058497ec87 (patch)
tree5a1e255cff999b00800f203b91a759c720c973e5 /embassy-rp/src/multicore.rs
parenteb685574601d98c44faed9a3534d056199b46e20 (diff)
parent92a6fd2946f2cbb15359290f68aa360953da2ff7 (diff)
Merge branch 'main' into rp2040-rtc-alarm
Diffstat (limited to 'embassy-rp/src/multicore.rs')
-rw-r--r--embassy-rp/src/multicore.rs24
1 files changed, 22 insertions, 2 deletions
diff --git a/embassy-rp/src/multicore.rs b/embassy-rp/src/multicore.rs
index d10b6837c..adedc98ad 100644
--- a/embassy-rp/src/multicore.rs
+++ b/embassy-rp/src/multicore.rs
@@ -38,11 +38,11 @@
38//! 38//!
39//! embassy_rp::multicore::spawn_core1(p.CORE1, unsafe { &mut CORE1_STACK }, move || { 39//! embassy_rp::multicore::spawn_core1(p.CORE1, unsafe { &mut CORE1_STACK }, move || {
40//! let executor1 = EXECUTOR1.init(Executor::new()); 40//! let executor1 = EXECUTOR1.init(Executor::new());
41//! executor1.run(|spawner| spawner.spawn(core1_task()).unwrap()); 41//! executor1.run(|spawner| spawner.spawn(core1_task().unwrap()));
42//! }); 42//! });
43//! 43//!
44//! let executor0 = EXECUTOR0.init(Executor::new()); 44//! let executor0 = EXECUTOR0.init(Executor::new());
45//! executor0.run(|spawner| spawner.spawn(core0_task()).unwrap()) 45//! executor0.run(|spawner| spawner.spawn(core0_task().unwrap()))
46//! } 46//! }
47//! ``` 47//! ```
48 48
@@ -57,6 +57,26 @@ const PAUSE_TOKEN: u32 = 0xDEADBEEF;
57const RESUME_TOKEN: u32 = !0xDEADBEEF; 57const RESUME_TOKEN: u32 = !0xDEADBEEF;
58static IS_CORE1_INIT: AtomicBool = AtomicBool::new(false); 58static IS_CORE1_INIT: AtomicBool = AtomicBool::new(false);
59 59
60/// Represents a partiticular CPU core (SIO_CPUID)
61#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
62#[cfg_attr(feature = "defmt", derive(defmt::Format))]
63#[repr(u8)]
64pub enum CoreId {
65 /// Core 0
66 Core0 = 0x0,
67 /// Core 1
68 Core1 = 0x1,
69}
70
71/// Gets which core we are currently executing from
72pub fn current_core() -> CoreId {
73 if pac::SIO.cpuid().read() == 0 {
74 CoreId::Core0
75 } else {
76 CoreId::Core1
77 }
78}
79
60#[inline(always)] 80#[inline(always)]
61unsafe fn core1_setup(stack_bottom: *mut usize) { 81unsafe fn core1_setup(stack_bottom: *mut usize) {
62 if install_stack_guard(stack_bottom).is_err() { 82 if install_stack_guard(stack_bottom).is_err() {