5.32 Cache设备
2026/7/20大约 2 分钟设备驱动驱动Cache缓存D-CacheCortex-M7
5.32 Cache设备
📚 本节导读
学习时长: 约 15 分钟
难度级别: ⭐⭐⭐☆☆
前置知识: C 语言基础、ARM Cortex-M 架构基础知识
🎯 学习目标
- 理解 Cache 缓存一致性问题
- 掌握
os_clean_dcache、os_invalid_dcache、os_clean_invalid_dcache的使用场景 - 了解 Cortex-M7 架构下的 Cache 操作
一、概述
Cache 设备是 OneOS 提供的数据缓存管理工具,用于解决 DMA 操作和缓存一致性等问题。驱动源码位于 drivers/cache/cache.h,主要针对 ARM Cortex-M7 架构(带有 D-Cache)。
Cache 设备的特点:
- Cortex-M7 适配:针对 Cortex-M7 的 D-Cache 提供操作接口
- 三种操作:清理(Clean)、无效化(Invalidate)、清理+无效化(Clean+Invalidate)
- 条件编译:非 Cortex-M7 架构下所有操作为空函数
二、核心 API
/* 清理并无效化 D-Cache(用于 DMA 发送前) */
OS_INLINE void os_clean_invalid_dcache(void *addr, int32_t dsize);
/* 清理 D-Cache(将脏数据写回内存,用于 DMA 发送前) */
OS_INLINE void os_clean_dcache(void *addr, int32_t dsize);
/* 无效化 D-Cache(丢弃缓存数据,用于 DMA 接收后) */
OS_INLINE void os_invalid_dcache(void *addr, int32_t dsize);三、使用场景
| 场景 | 操作 | 说明 |
|---|---|---|
| DMA 发送前 | os_clean_dcache | 确保内存中的数据已写入缓存 |
| DMA 接收后 | os_invalid_dcache | 使 CPU 重新从内存读取数据 |
| 共享内存 | os_clean_invalid_dcache | 多核或多主设备共享内存时 |
四、使用示例
#include <cache.h>
void dma_transfer_example(void *tx_buf, void *rx_buf, int size)
{
os_clean_dcache(tx_buf, size); /* DMA 发送前清理缓存 */
start_dma_tx(tx_buf, size);
os_invalid_dcache(rx_buf, size); /* DMA 接收后无效化缓存 */
}📝 本节小结
本节介绍了 Cache 缓存设备,包括三种缓存操作、Cortex-M7 适配、DMA 一致性等核心概念。