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)
Parks the given core.
§Safety
The caller must ensure that the core being parked is not the core which is currently executing this 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)
Unparks 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,
Starts the APP (second) core.
The second core starts running the closure entry. If the closure exits, the core is
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.
Sourcepub fn start_app_core_with_stack_guard_offset<'a, const SIZE: usize, F>(
&mut self,
stack: &'static mut Stack<SIZE>,
stack_guard_offset: Option<usize>,
entry: F,
) -> Result<AppCoreGuard<'a>, Error>where
F: FnOnce() + Send + 'a,
pub fn start_app_core_with_stack_guard_offset<'a, const SIZE: usize, F>(
&mut self,
stack: &'static mut Stack<SIZE>,
stack_guard_offset: Option<usize>,
entry: F,
) -> Result<AppCoreGuard<'a>, Error>where
F: FnOnce() + Send + 'a,
Starts the APP (second) core.
The second core starts running the closure entry. If the closure exits, the core is
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.