pub struct SArrayPtr<T> {
pub direction: DmaDirection,
/* private fields */
}Expand description
映射单个连续内存区域的 DMA 数组。
SArrayPtr<T> 将现有的缓冲区(如栈数组或堆分配的 slice)映射为 DMA 可访问区域。
与 DArray<T> 不同,此类型提供手动缓存同步控制。
§缓存同步
重要: SArrayPtr 不会在每次访问时自动同步缓存。
你必须使用特定方法进行缓存同步:
to_vec(): 读取前自动失效整个范围copy_from_slice(): 写入后自动刷新整个范围read()/set(): 不执行自动缓存同步
§生命周期
SArrayPtr 在离开作用域时自动解除 DMA 映射,但不会自动同步缓存。
必须在映射解除前手动完成必要的缓存同步操作。
§类型参数
T: 数组元素类型
§示例
ⓘ
use dma_api::{DeviceDma, DmaDirection};
let mut buffer = [0u8; 4096];
let device = DeviceDma::new(0xFFFFFFFF, &my_dma_impl);
// 映射用于 DMA 写入
let mut mapping = device.map_single_array(&buffer, 64, DmaDirection::ToDevice)?;
// 必须手动刷新缓存
mapping.copy_from_slice(&data);
// ... 启动 DMA 传输 ...
// 映射在作用域结束时自动解映射Fields§
§direction: DmaDirectionImplementations§
Source§impl<T> SArrayPtr<T>
impl<T> SArrayPtr<T>
Sourcepub fn copy_from_slice(&mut self, src: &[T])
pub fn copy_from_slice(&mut self, src: &[T])
Sourcepub fn to_vec(&self) -> Vec<T>
pub fn to_vec(&self) -> Vec<T>
将整个数组转换为 Vec(自动同步缓存)。
这是读取映射数据并同步缓存的主要方式。 读取前会自动使 CPU 缓存失效(FromDevice/Bidirectional)。
§返回
包含所有元素的 Vec
pub fn prepare_read_all(&self)
pub fn confirm_write_all(&self)
Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for SArrayPtr<T>
impl<T> !RefUnwindSafe for SArrayPtr<T>
impl<T> !Send for SArrayPtr<T>
impl<T> !Sync for SArrayPtr<T>
impl<T> Unpin for SArrayPtr<T>
impl<T> !UnwindSafe for SArrayPtr<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