Struct esp_idf_hal::peripheral::PeripheralRef
source · pub struct PeripheralRef<'a, T> { /* private fields */ }
Expand description
An exclusive reference to a peripheral.
This is functionally the same as a &'a mut T
. The reason for having a
dedicated struct is memory efficiency:
Peripheral singletons are typically either zero-sized (for concrete peripehrals
like PA9
or Spi4
) or very small (for example AnyPin
which is 1 byte).
However &mut T
is always 4 bytes for 32-bit targets, even if T is zero-sized.
PeripheralRef stores a copy of T
instead, so it’s the same size.
but it is the size of T
not the size
of a pointer. This is useful if T is a zero sized type.
Implementations§
source§impl<'a, T> PeripheralRef<'a, T>
impl<'a, T> PeripheralRef<'a, T>
pub fn new(inner: T) -> Self
sourcepub unsafe fn clone_unchecked(&mut self) -> PeripheralRef<'a, T>where
T: Peripheral<P = T>,
pub unsafe fn clone_unchecked(&mut self) -> PeripheralRef<'a, T>where
T: Peripheral<P = T>,
Unsafely clone (duplicate) a peripheral singleton.
§Safety
This returns an owned clone of the peripheral. You must manually ensure
only one copy of the peripheral is in use at a time. For example, don’t
create two SPI drivers on SPI1
, because they will “fight” each other.
You should strongly prefer using reborrow()
instead. It returns a
PeripheralRef
that borrows self
, which allows the borrow checker
to enforce this at compile time.
sourcepub fn reborrow(&mut self) -> PeripheralRef<'_, T>where
T: Peripheral<P = T>,
pub fn reborrow(&mut self) -> PeripheralRef<'_, T>where
T: Peripheral<P = T>,
Reborrow into a “child” PeripheralRef.
self
will stay borrowed until the child PeripheralRef is dropped.
sourcepub fn map_into<U>(self) -> PeripheralRef<'a, U>where
T: Into<U>,
pub fn map_into<U>(self) -> PeripheralRef<'a, U>where
T: Into<U>,
Map the inner peripheral using Into
.
This converts from PeripheralRef<'a, T>
to PeripheralRef<'a, U>
, using an
Into
impl to convert from T
to U
.
For example, this can be useful to degrade GPIO pins: converting from PeripheralRef<’a, PB11>to
PeripheralRef<’a, AnyPin>`.