MS-RTOS CACHE 操作
本章将介绍 MS-RTOS CPU CACHE 操作相关接口的使用。
CACHE 介绍
CPU CACHE 是 CPU 性能的加速器,CPU CACHE 缓存了 CPU 频繁访问的数据,CPU 访问 CACHE 的速度要比访问 RAM 的速度快得多,这样 CPU 就能以较快的速度访问到所需的数据。
CACHE 按缓存的数据类型来分,可分为数据 CACHE 和指令 CACHE,按层次来分,可分为 L1-CACHE、L2-CACHE......
由于 DMA(直接内存访问)搬运数据并不通过 CPU 的运算单元,所以 DMA 搬运数据后,会出现 CACHE 内容与内存里的值不一致的情况,某些高端处理器具备 DMA CACHE 一致性的特性,但很遗憾,目前应用的很多 MCU 都没有该特性,所以需要软件(主要是操作系统和驱动程序)手动维护 CACHE 与内存的一致性。
CACHE 相关 API
下表展示了 CACHE 操作相关的 API 在两个权限空间下是否可用:
API | 用户空间 | 内核空间 |
---|---|---|
ms_dcache_clean | ● | |
ms_dcache_flush | ● | |
ms_dcache_invalid | ● | |
ms_dma_dcache_clean | ● | |
ms_dma_dcache_flush | ● | |
ms_dma_dcache_invalid | ● | |
ms_icache_invalid | ● | |
ms_cache_text_update | ● |
ms_dcache_clean()
描述 回写指定范围内存的 D-CACHE
函数原型
void ms_dcache_clean(ms_ptr_t ptr, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | ptr | 起始地址 |
[in] | len | 长度 |
返回值 无
注意事项 无
示例 无
ms_dcache_flush()
描述 回写并无效指定范围内存的 D-CACHE
函数原型
void ms_dcache_flush(ms_ptr_t ptr, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | ptr | 起始地址 |
[in] | len | 长度 |
返回值 无
注意事项 无
示例 无
ms_dcache_invalid()
描述 无效指定范围内存的 D-CACHE(非 D-CACHE 行大小对齐部分将会回写并无效)
函数原型
void ms_dcache_invalid(ms_ptr_t ptr, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | ptr | 起始地址 |
[in] | len | 长度 |
返回值 无
注意事项 无
示例 无
ms_dma_dcache_clean()
描述 回写指定范围 DMA 内存的 D-CACHE,在具备 DMA 内存一致性特性的 CPU 上,将变成空操作
函数原型
void ms_dma_dcache_clean(ms_ptr_t ptr, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | ptr | 起始地址 |
[in] | len | 长度 |
返回值 无
注意事项 无
示例 无
ms_dma_dcache_flush()
描述 回写并无效指定范围 DMA 内存的 D-CACHE,在具备 DMA 内存一致性特性的 CPU 上,将变成空操作
函数原型
void ms_dma_dcache_flush(ms_ptr_t ptr, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | ptr | 起始地址 |
[in] | len | 长度 |
返回值 无
注意事项 无
示例 无
ms_dma_dcache_invalid()
描述 无效指定范围 DMA 内存的 D-CACHE(非 D-CACHE 行大小对齐部分将会回写并无效),在具备 DMA 内存一致性特性的 CPU 上,将变成空操作
函数原型
void ms_dma_dcache_invalid(ms_ptr_t ptr, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | ptr | 起始地址 |
[in] | len | 长度 |
返回值 无
注意事项 无
示例 无
ms_icache_invalid()
描述 无效指定范围内存的 I-CACHE
函数原型
void ms_icache_invalid(ms_ptr_t ptr, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | ptr | 起始地址 |
[in] | len | 长度 |
返回值 无
注意事项 无
示例 无
ms_cache_text_update()
描述 对指定范围内存进行代码更新(执行 D-CACHE 回写和 I-CACHE 无效),一般在代码搬运和代码修改后需要做代码更新
函数原型
void ms_cache_text_update(ms_ptr_t ptr, ms_size_t len);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | ptr | 起始地址 |
[in] | len | 长度 |
返回值 无
注意事项 无
示例 无