Cache 基本操作

更新时间:
2024-03-14
下载文档

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 的数据。

文档内容是否对您有所帮助?
有帮助
没帮助