Skip to main content

Ipc

Struct Ipc 

Source
#[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

Source

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.

Source

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 core holds handler, 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 core holds a different function, this call waits until core takes that function. core takes 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§

Source§

impl Clone for Ipc

Available on crate feature unstable only.
Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable)§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for Ipc

Available on crate feature unstable only.
Source§

impl Debug for Ipc

Available on crate feature unstable only.
Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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 T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = !

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.