TCM + SRAM + PSRAM
5 Dec 2024
Read time: 2 minute(s)
D13x 支持把部分 SRAM 挂载成 Tightly Coupled Memory (TCM)。TCM 的主要优势在于其内存区域由 CPU 独占访问,不会与其他外设发生总线竞争,这对某些需要高实时性的代码来说至关重要。TCM + SRAM + PSRAM 配置和SRAM + PSRAM 配置的区别在于是否开启 TCM 上,本节仅描述两种配置的差异。
D13x 提供了 128K 的指令 TCM (ITCM) 和 128K 的数据 TCM (DTCM),分别用于存储实时代码和实时数据。开启 TCM 功能后,SRAM_S0 空间就会对应的减少 256K,因为这部分内存会被重新分配给 ITCM 和 DTCM 使用。
内存布局和使用策略
如图所示,针对 TCM Memory 资源,软件会使用以下策略来进行分配:
-
将 TCM 划分为
ITCM Region
和DTCM Region
两个区域,分别用于实时代码和数据。 -
将每个 Region 进一步划分成以下子区域:
- 静态分配 Static:编译链接后可确认地址。
- 动态分配 Heap:Heap 内存池运行时确定地址。
综合上述策略,TCM 空间被软件划分成四块区域:
ITCM Static
:ITCM 静态分配区域。通过在函数定义中加入 TCM_CODE_DEFINE 宏声明,可链接到此区域:// 函数定义: void TCM_CODE_DEFINE test_func(void);
-
ITCM Heap
:ITCM 动态分配区域,即 heap_itcm 内存池。可以通过以下函数从该内存池分配内存:
aicos_malloc(MEM_ITCM, size);
-
DTCM Static
:DTCM 静态分配区域。通过在全局变量定义中加入 TCM_DATA_DEFINE 宏声明,可链接到此区域:
// 全局变量定义: TCM_DATA_DEFINE int a = 1;
-
DTCM Heap
:DTCM 动态分配区域,即 heap_dtcm 内存池。通过以下函数,可从该内存池分配内存:
aicos_malloc(MEM_DTCM, size);
参数配置
通过 scons --menuconfig 命令进入 menuconfig
配置界面,配置下列 Meomry
相关参数:
Board options --->
Mem Options --->
-
使能 TCM 空间
SRAM parameter ---> [*] Enable TCM (Tightly Coupled Memory) // 开启 TCM 功能,SRAM_S0 空间相应的会减小 256k