pub struct CpuControl<'d> { /* private fields */ }
unstable
only.Expand description
Control CPU Cores
§Examples
static mut APP_CORE_STACK: Stack<8192> = Stack::new();
let counter = Mutex::new(RefCell::new(0));
let mut cpu_control = CpuControl::new(peripherals.CPU_CTRL);
let cpu1_fnctn = || {
cpu1_task(&delay, &counter);
};
let _guard = cpu_control
.start_app_core(
unsafe { &mut *addr_of_mut!(APP_CORE_STACK) },
cpu1_fnctn
)?;
loop {
delay.delay(Duration::from_secs(1));
let count = critical_section::with(|cs| *counter.borrow_ref(cs));
}
// Where `cpu1_task()` may be defined as:
fn cpu1_task(
delay: &Delay,
counter: &critical_section::Mutex<RefCell<i32>>,
) -> ! {
loop {
delay.delay(Duration::from_millis(500));
critical_section::with(|cs| {
let mut val = counter.borrow_ref_mut(cs);
*val = val.wrapping_add(1);
});
}
}
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Implementations§
Source§impl<'d> CpuControl<'d>
impl<'d> CpuControl<'d>
Sourcepub fn new(cpu_control: CPU_CTRL<'d>) -> CpuControl<'d>
pub fn new(cpu_control: CPU_CTRL<'d>) -> CpuControl<'d>
Creates a new instance of CpuControl
.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub unsafe fn park_core(&mut self, core: Cpu)
pub unsafe fn park_core(&mut self, core: Cpu)
Park the given core
§Safety
The user must ensure that the core being parked is not the core which is currently executing their code.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn unpark_core(&mut self, core: Cpu)
pub fn unpark_core(&mut self, core: Cpu)
Unpark the given core
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn start_app_core<'a, const SIZE: usize, F>(
&mut self,
stack: &'static mut Stack<SIZE>,
entry: F,
) -> Result<AppCoreGuard<'a>, Error>where
F: FnOnce() + Send + 'a,
pub fn start_app_core<'a, const SIZE: usize, F>(
&mut self,
stack: &'static mut Stack<SIZE>,
entry: F,
) -> Result<AppCoreGuard<'a>, Error>where
F: FnOnce() + Send + 'a,
Start the APP (second) core.
The second core will start running the closure entry
. Note that if the
closure exits, the core will be parked.
Dropping the returned guard will park the core.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.