From 90f2939bf6ad02c68c3ada800d4ed7ddb66619a0 Mon Sep 17 00:00:00 2001 From: Davide Della Giustina Date: Tue, 28 Feb 2023 14:22:54 +0000 Subject: [PATCH] Added PacketQueue::init() --- embassy-stm32/src/eth/mod.rs | 18 ++++++++++++++++++ embassy-stm32/src/lib.rs | 8 +++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/embassy-stm32/src/eth/mod.rs b/embassy-stm32/src/eth/mod.rs index 9f62b61ee..9b500bfd6 100644 --- a/embassy-stm32/src/eth/mod.rs +++ b/embassy-stm32/src/eth/mod.rs @@ -39,6 +39,24 @@ impl PacketQueue { rx_buf: [Packet([0; RX_BUFFER_SIZE]); RX], } } + + // Allow to initialize a Self without requiring it to go on the stack + #[cfg(feature = "nightly")] + pub const unsafe fn init(this: &mut core::mem::MaybeUninit) { + let this: &mut Self = unsafe { this.assume_init_mut() }; + let mut i = 0; + while i < TX { + this.tx_desc[i] = TDes::new(); + this.tx_buf[i] = Packet([0; TX_BUFFER_SIZE]); + i += 1; + } + i = 0; + while i < RX { + this.rx_desc[i] = RDes::new(); + this.rx_buf[i] = Packet([0; RX_BUFFER_SIZE]); + i += 1; + } + } } static WAKER: AtomicWaker = AtomicWaker::new(); diff --git a/embassy-stm32/src/lib.rs b/embassy-stm32/src/lib.rs index eeaa04f67..7c0b2d516 100644 --- a/embassy-stm32/src/lib.rs +++ b/embassy-stm32/src/lib.rs @@ -1,7 +1,13 @@ #![no_std] #![cfg_attr( feature = "nightly", - feature(type_alias_impl_trait, async_fn_in_trait, impl_trait_projections) + feature( + type_alias_impl_trait, + async_fn_in_trait, + impl_trait_projections, + const_mut_refs, + const_maybe_uninit_assume_init + ) )] #![cfg_attr(feature = "nightly", allow(incomplete_features))]