Cache 基本操作
Cache 功能配置
Cache 相关功能是否编译进内核是通过宏开关来控制的,配置位于“libsylixos/sylixos/config/kernel/cache_cfg.h”中。建议将 Cache 功能打开以提高系统性能,默认状态是打开状态。
Cache 的使能和关闭
#include <SylixOS.h>
INT API_CacheEnable(LW_CACHE_TYPE cachetype);
INT API_CacheDisable(LW_CACHE_TYPE cachetype);
函数原型分析:
- 函数返回 ERROR_NONE 。
- 参数 c achetype 是cache的类型,具体类型如下表所示。
Cache 类型 | 含义 |
---|---|
INSTRUCTION_CACHE | 指令 Cache |
DATA_CACHE | 数据 Cache |
回写 Cache 数据到内存
#include <SylixOS.h>
INT API_CacheFlush(LW_CACHE_TYPE cachetype, PVOID pvAdrs, size_t stBytes);
函数原型 API_CacheFlush 分析:
- 函数返回 ERROR_NONE 。
- 参数 cachetype 是 Cache 的类型。
- 参数 pvAdrs 是要回写的内存虚拟地址。
- 参数 stBytes 是要回写的字节数。
注意:
当 stBytes 大于等于整个 Cache 的大小时,会忽略 pvAdrs , 回写整个 Cache 的数据。
置 Cache 为无效
#include <SylixOS.h>
INT API_CacheInvalidate(LW_CACHE_TYPE cachetype, PVOID pvAdrs, size_t stBytes);
函数原型 API_CacheInvalidate 分析:
- 函数返回 ERROR_NONE 。
- 参数 cachetype 是 Cache 的类型。
- 参数 pvAdrs 是要置无效的内存虚拟地址。
- 参数 stBytes 是要置无效的字节数。
注意:
当 stBytes 大于等于整个 Cache 的大小时,会忽略 pvAdrs , 失效整个 Cache 的数据。
当 cachetype 类型为 DATA_CACHE 时, pvAdrs 需要字节对齐,对齐的字节数为一个 Cache line 的大小;同样, stBytes 取值需要是一个 Cache line 大小的整数倍。否则不对齐的地址所对应的数据不会被失效。
回写 Cache 并置无效
#include <SylixOS.h>
INT API_CacheClear(LW_CACHE_TYPEs cachetype, PVOID pvAdrs, size_t stBytes);
函数原型 API_CacheClear 分析:
- 函数返回 ERROR_NONE 。
- 参数 cachetype 是 Cache 的类型。
- 参数 pvAdrs 是要回写并置无效的内存虚拟地址。
- 参数 stBytes 是要回写并置无效的字节数。
注意:
当 stBytes 大于等于整个 Cache 的大小时,会忽略 pvAdrs , 回写并失效整个 Cache 的数据。
回写 Dcache 并置无效 Icache
#include <SylixOS.h>
INT API_CacheTextUpdate(PVOID pvAdrs, size_t stBytes);
函数原型 API_CacheTextUpdate 分析:
- 函数返回 ERROR_NONE 。
- 参数 pvAdrs 是要操作的内存虚拟地址。
- 参数 stBytes 是要操作的字节数。
注意:
当 stBytes 大于等于整个 Cache 的大小时,会忽略 pvAdrs ,回写整个 DCache,失效整个 ICache。
回写 Dcache
#include <SylixOS.h>
INT API_CacheDataUpdate(PVOID pvAdrs, size_t stBytes, BOOL bInv);
函数原型 API_CacheDataUpdate 分析:
- 函数返回 ERROR_NONE 。
- 参数 pvAdrs 是要操作的内存虚拟地址。
- 参数 stBytes 是要操作的字节数。
- 参数 bInv 是是否同时使用置无效功能,TRUE 为使用,FALSE 为不使用。
注意:
当 stBytes 大于等于整个 Cache 的大小时,会忽略 pvAdrs , 回写(并失效,是否失效由 bInv 指定)整个 Cache 的数据。