#[non_exhaustive]pub struct Ipc;Expand description
Handle that posts a function to a CPU through the IPC interrupt.
Copies of this handle share one state table.
Implementations§
Source§impl Ipc
impl Ipc
Sourcepub const fn new(_ipc: IPC<'_>) -> Self
pub const fn new(_ipc: IPC<'_>) -> Self
Creates a new Ipc handle.
The constructor does not install an interrupt handler. crate::init installs the IPC
path.
Sourcepub fn call_function(self, core: Cpu, handler: fn())
pub fn call_function(self, core: Cpu, handler: fn())
Runs handler on core.
handler runs in an interrupt handler at Priority::min. This
call does not wait for handler to return, and a context switch does not delay it.
The interrupt handler saves the registers that the calling convention lets the callee
clobber, except the floating-point registers. handler must not use those registers, and
must be callable with the cache disabled.
A CPU holds one posted function at a time. If core already holds one, this call behaves
as follows:
- If
coreholdshandler, that function has not run yet, and it runs after this call. The two calls coalesce into one run, and this call returns. A caller that needs a run of its own must wait for the pending run. - If
coreholds a different function, this call waits untilcoretakes that function.coretakes it in a minimum-priority interrupt. That interrupt cannot run in an interrupt-free context, and cannot run on the APP CPU while that CPU is in reset. The wait never ends in those cases.
§Panics
In debug builds, panics if core is the APP CPU and that CPU is not running.
Trait Implementations§
impl Copy for Ipc
unstable only.Auto Trait Implementations§
impl Freeze for Ipc
impl RefUnwindSafe for Ipc
impl Send for Ipc
impl Sync for Ipc
impl Unpin for Ipc
impl UnsafeUnpin for Ipc
impl UnwindSafe for Ipc
Blanket Implementations§
§impl<T> Any for Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)