pub struct DArray<T> { /* private fields */ }Expand description
DMA 可访问的数组容器。
DArray<T> 提供固定大小的 DMA 可访问数组,支持自动缓存同步。
每次访问元素(read/set)时都会根据 DMA 方向自动处理缓存操作。
§类型参数
T: 数组元素类型
§缓存同步
缓存同步在每次元素访问时自动执行:
read(index): 读取前使 CPU 缓存失效(FromDevice/Bidirectional)set(index, value): 写入后刷新 CPU 缓存(ToDevice/Bidirectional)copy_from_slice(slice): 写入后刷新整个范围
§示例
ⓘ
use dma_api::{DeviceDma, DmaDirection};
let device = DeviceDma::new(0xFFFFFFFF, &my_dma_impl);
// 创建 100 个 u32 的 DMA 数组
let mut dma_array = device
.array_zero_with_align::<u32>(100, 64, DmaDirection::FromDevice)
.expect("Failed to allocate");
dma_array.set(0, 0x12345678); // 写入(自动刷新缓存)
let value = dma_array.read(0); // 读取(自动失效缓存)
let dma_addr = dma_array.dma_addr(); // 获取 DMA 地址给硬件§生命周期
DArray 拥有其分配的 DMA 内存,在离开作用域时自动释放。
Implementations§
Source§impl<T> DArray<T>
impl<T> DArray<T>
Sourcepub fn iter(&self) -> DArrayIter<'_, T> ⓘ
pub fn iter(&self) -> DArrayIter<'_, T> ⓘ
Sourcepub fn copy_from_slice(&mut self, src: &[T])
pub fn copy_from_slice(&mut self, src: &[T])
Sourcepub unsafe fn as_mut_slice(&mut self) -> &mut [T]
pub unsafe fn as_mut_slice(&mut self) -> &mut [T]
§Safety
slice will not auto do cache sync operations.
pub fn as_ptr(&self) -> NonNull<T>
Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for DArray<T>
impl<T> !RefUnwindSafe for DArray<T>
impl<T> !Sync for DArray<T>
impl<T> Unpin for DArray<T>where
T: Unpin,
impl<T> !UnwindSafe for DArray<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more