RAM 布局与配置
简介
本章介绍默认内存布局及其修改方法。
RAM 内存布局
SRAM 与 PSRAM 混合布局
Item |
起始地址 |
大小 (KB) |
描述 |
必需 |
|---|---|---|---|---|
SRAM FIXED |
0x2000_0000 |
40 |
用于 ROM BSS, MSP 等 |
√ |
KM4 Bootloader |
0x3000_A000 |
32 |
KM4 安全启动加载程序,包括代码和数据 |
√ |
KM4 BD RAM TZ |
0x2001_0000 |
64 |
KM4 IMG3 BD RAM,如果不需要可以合并到 KM4 BD RAM |
x |
KM4 BD RAM |
0x2002_0000 |
288 |
KM4 BDRAM 数据、BSS 和 heap |
√ |
KM0 BD RAM |
0x2006_8000 |
96 |
KM0 BDRAM 数据、BSS 和 heap |
√ |
KM4 BD PSRAM TZ |
0x6000_0000 |
64 |
KM4 IMG3 PSRAM,如果不需要可以合并到 KM4 PSRAM |
x |
KM4 BD PSRAM |
0x6001_0000 |
3156 |
KM4 BD PSRAM 代码和数据 |
√ |
KM0 BD PSRAM |
0x6032_5000 |
876 |
KM0 BD PSRAM 代码和数据 |
√ |
KM4 HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KM4 堆空间不足,可用于扩展 heap 大小 |
x |
KM0 HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KM0 堆空间不足,可用于扩展 heap 大小 |
x |
备注
如果 Trustzone 未启用,则 KM4 BD RAM TZ 和 KM4 BD PSRAM TZ 将作为 Non-secure 区域,并分别合并到 KM4 BD RAM 和 KM4 BD PSRAM 中。
带 PSRAM
备注
如果 Trustzone 未启用,则 KM4_BD_PSRAM_TZ 将作为 Non-secure 区域,并合并到 KM4_BD_PSRAM 中。
Item |
起始地址 |
大小 |
描述 |
必需 |
|---|---|---|---|---|
SRAM FIXED |
0x2000_0000 |
40KB |
用于 ROM BSS, MSP … |
√ |
KM4 BOOTLOADER |
0x3000_A000 |
28KB |
用于 Bootloader |
√ |
KM4 BD RAM |
0x2001_1000 |
348KB |
KM4 BDRAM 数据、BSS 和 heap |
√ |
KR4 BD RAM |
0x2006_8000 |
96KB |
KR4 BDRAM 数据、BSS 和 heap |
√ |
KM4 BD PSRAM TZ |
0x6000_0000 |
64KB |
KM4 IMG3,如果不需要 IMG3 可以合并到 KM4 PSRAM |
x |
KM4 BD PSRAM |
0x6001_0000 |
1472KB |
KM4 代码 |
√ |
KR4 BD PSRAM |
0x6018_0000 |
1536KB |
KR4 代码 |
√ |
KM4 HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KM4 堆空间不足,可用于扩展堆大小 |
x |
KR4 HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KR4 堆空间不足,可用于扩展堆大小 |
x |
不带 PSRAM
备注
如果 Trustzone 未启用,则 KM4_BD_RAM_TZ 将作为 Non-secure 区域,并合并到 KM4_BD_RAM 中。
Item |
起始地址 |
大小 |
描述 |
必需 |
|---|---|---|---|---|
SRAM FIXED |
0x2000_0000 |
40KB |
用于 ROM BSS, MSP … |
√ |
KM4 BOOTLOADER |
0x3000_A000 |
28KB |
用于 Bootloader |
√ |
KM4 BD RAM TZ |
0x2001_1000 |
64KB |
KM4 IMG3,如果不需要 IMG3 可供用户使用 |
x |
KM4 BD RAM |
0x2002_0000 |
288KB |
KM4 BDRAM 数据、BSS 和 heap |
√ |
KR4 BD RAM |
0x2006_8000 |
96KB |
KR4 BDRAM 数据、BSS 和 heap |
√ |
带 PSRAM
备注
如果 Trustzone 未启用,则 KM4_BD_PSRAM_TZ 将作为 Non-secure 区域,并合并到 KM4_BD_PSRAM 中。
Item |
起始地址 |
大小 |
描述 |
必需 |
|---|---|---|---|---|
SRAM FIXED |
0x2000_0000 |
40KB |
用于 ROM BSS, MSP … |
√ |
KM4 BOOTLOADER |
0x3000_A000 |
28KB |
用于 Bootloader |
√ |
KM4 BD RAM |
0x2001_1000 |
348KB |
KM4 BDRAM 数据、BSS 和 heap |
√ |
KR4 BD RAM |
0x2006_8000 |
96KB |
KR4 BDRAM 数据、BSS 和 heap |
√ |
KM4 BD PSRAM TZ |
0x6000_0000 |
64KB |
KM4 IMG3,如果不需要 IMG3 可以合并到 KM4 PSRAM |
x |
KM4 BD PSRAM |
0x6001_0000 |
1472KB |
KM4 代码 |
√ |
KR4 BD PSRAM |
0x6018_0000 |
1536KB |
KR4 代码 |
√ |
KM4 HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KM4 堆空间不足,可用于扩展堆大小 |
x |
KR4 HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KR4 堆空间不足,可用于扩展堆大小 |
x |
不带 PSRAM
备注
如果 Trustzone 未启用,则 KM4_BD_RAM_TZ 将作为 Non-secure 区域,并合并到 KM4_BD_RAM 中。
Item |
起始地址 |
大小 |
描述 |
必需 |
|---|---|---|---|---|
SRAM FIXED |
0x2000_0000 |
40KB |
用于 ROM BSS, MSP … |
√ |
KM4 BOOTLOADER |
0x3000_A000 |
28KB |
用于 Bootloader |
√ |
KM4 BD RAM TZ |
0x2001_1000 |
64KB |
KM4 IMG3,如果不需要 IMG3 可供用户使用 |
x |
KM4 BD RAM |
0x2002_0000 |
288KB |
KM4 BDRAM 数据、BSS 和 heap |
√ |
KR4 BD RAM |
0x2006_8000 |
96KB |
KR4 BDRAM 数据、BSS 和 heap |
√ |
备注
如果 Trustzone 未启用,则 KM4_BD_PSRAM_TZ 将作为 Non-secure 区域,并合并到 KM4_BD_PSRAM 中。
Item |
起始地址 |
大小 |
描述 |
必需 |
|---|---|---|---|---|
SRAM FIXED |
0x2000_0000 |
40KB |
用于 ROM BSS, MSP 等 |
√ |
KM4 BOOTLOADER |
0x3000_A000 |
28KB |
用于 Bootloader |
√ |
KM4_BD_PSRAM_TZ |
0x6000_0000 |
64KB |
KM4 IMG3,如果不需要 IMG3 可以合并到 KM4 BD PSRAM |
x |
KM4 BD PSRAM |
0x6001_0000 |
1472KB |
KM4 代码、数据、BSS 和 heap |
√ |
KR4 BD PSRAM |
0x6018_0000 |
1536KB |
KR4 代码、数据、BSS 和 heap |
√ |
DSP BD PSRAM |
0x6030_0000 |
5120KB |
DSP PSRAM |
√ |
KM4 HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KM4 堆空间不足,可用于扩展堆大小 |
x |
KR4 HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KR4 堆空间不足,可用于扩展堆大小 |
x |
备注
如果 Trustzone 未启用,则 KM4_BD_PSRAM_TZ 将作为 Non-secure 区域,并合并到 KM4_BD_PSRAM 中。
Item |
起始地址 |
大小 |
描述 |
必需 |
|---|---|---|---|---|
SRAM FIXED |
0x2000_0000 |
40KB |
用于 ROM BSS, MSP 等 |
√ |
KM4 BOOTLOADER |
0x3000_A000 |
28KB |
用于 Bootloader |
√ |
KM4_BD_PSRAM_TZ |
0x6000_0000 |
64KB |
KM4 IMG3,如果不需要 IMG3 可以合并到 KM4 BD PSRAM |
x |
KM4 BD PSRAM |
0x6001_0000 |
1472KB |
KM4 代码、数据、BSS 和 heap |
√ |
KR4 BD PSRAM |
0x6018_0000 |
1536KB |
KR4 代码、数据、BSS 和 heap |
√ |
DSP BD PSRAM |
0x6030_0000 |
5120KB |
DSP PSRAM |
√ |
KM4 HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KM4 堆空间不足,可用于扩展堆大小 |
x |
KR4 HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KR4 堆空间不足,可用于扩展堆大小 |
x |
Item |
Sub-item |
物理地址 |
大小 |
描述 |
必需 |
|---|---|---|---|---|---|
KM4 DRAM |
KM4_IMG2_RAM_NS |
0x6000_0000 |
1388KB |
KM4 image2 SRAM,包括代码、数据、BSS 和 heap |
√ |
KM4_BD_RAM_NSC |
0x6015_B000 |
4KB |
KM4 非安全可调用区域 |
x |
|
KM4_BD_RAM_ENTRY |
0x6015_C000 |
16KB |
KM4 非安全可调用函数入口 |
x |
|
KM4_BD_RAM_S |
0x7016_0000 |
128KB |
KM4 安全内存,包括安全代码、数据、BSS 和 heap |
x |
|
KM4_DRAM_HEAP_EXT |
0x6070_0000 |
1MB |
KM4 堆扩展 |
√ |
|
CA32 DARM |
BL1_RO |
0x6018_0000 |
128KB |
AP BL1 代码和只读数据 |
√ |
BL1_RW |
0x601A_0000 |
64KB |
AP BL1 栈和 BSS |
√ |
|
SHARED_RAM |
0x601B_0000 |
64KB |
AP 共享内存,用于多核通信 |
√ |
|
BL2 |
0x601C_0000 |
256KB |
AP BL2 代码、数据、栈和 BSS |
√ |
|
BL32 |
0x6020_0000 |
1MB |
AP BL32 代码、数据、栈和 BSS 对于 FreeRTOS SDK,BL32 是 SP_MIN。 |
√ |
|
BL33 |
0x6030_0000 |
4MB |
AP BL33 代码、数据、栈和 BSS 对于 FreeRTOS SDK,BL33 是 image2(应用程序)。 |
√ |
|
KM4 SRAM |
KM4_BOOT_RAM_S |
0x3000_3000 |
68KB |
KM4 安全启动加载程序,包括数据和代码 |
√ |
KM4_BD_RAM |
0x2001_4000 |
28KB |
KM4 主 SRAM,在仅 XIP 时使用 |
x |
|
ATF SHARE SRAM |
0x3001_F000 |
3.5KB |
在仅 XIP 时用于 atf 共享 SRAM |
x |
|
CA32_BL1 SRAM_S |
0x3001_FE00 |
512B |
CA32 BL1 SRAM |
√ |
|
RSVD for Audio |
0x2002_0000 |
128KB |
保留用于音频 |
√ |
|
KM0 SRAM |
KM0_BD_RAM |
0x2300_2000 |
119.25KB |
KM0 image2 SRAM,包括代码、数据、BSS 和 heap |
√ |
IPC_MEM |
0x2301_FD00 |
768B |
用于 CPU 之间通信的缓冲区 |
√ |
备注
如果 Trustzone 未启用,则 KM4 BD RAM TZ 和 KM4 BD PSRAM TZ 将作为 Non-secure 区域,并分别合并到 KM4 BD RAM 和 KM4 BD PSRAM 中。
Item |
起始地址 |
大小 (KB) |
描述 |
必需 |
|---|---|---|---|---|
SRAM FIXED |
0x2000_0000 |
20 |
用于 ROM BSS, MSP 等 |
√ |
KM4TZ Bootloader |
0x3000_5000 |
32 |
KM4TZ 安全启动加载程序,包括代码和数据 |
√ |
KM4TZ BD RAM TZ |
0x2000_D000 |
64 |
KM4TZ IMG3 BD RAM,如果不需要可以合并到 KM4TZ BD RAM |
x |
KM4TZ BD RAM |
0x2001_D000 |
300 |
KM4TZ BDRAM 数据、BSS 和 heap |
√ |
KM4NS BD RAM |
0x2006_8000 |
96 |
KM4NS BDRAM 数据、BSS 和 heap |
√ |
KM4TZ BD PSRAM TZ |
0x6000_0000 |
64 |
KM4TZ IMG3 PSRAM,如果不需要可以合并到 KM4TZ PSRAM |
x |
KM4TZ BD PSRAM |
0x6001_0000 |
3156 |
KM4TZ BD PSRAM 代码、数据和 heap |
√ |
KM4NS BD PSRAM |
0x6032_5000 |
876 |
KM4NS BD PSRAM 代码、数据和 heap |
√ |
KM4TZ HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KM4TZ 堆空间不足,可用于扩展 heap 大小 |
x |
KM4NS HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KM4NS 堆空间不足,可用于扩展 heap 大小 |
x |
备注
如果 Trustzone 未启用,则 KM4TZ BD RAM TZ 和 KM4TZ BD PSRAM TZ 将作为 Non-secure 区域,并分别合并到 KM4TZ BD RAM 和 KM4TZ BD PSRAM 中。
Item |
起始地址 |
大小 (KB) |
描述 |
必需 |
|---|---|---|---|---|
SRAM FIXED |
0x2000_0000 |
8 |
用于 ROM BSS, MSP 等 |
√ |
KM4TZ Bootloader |
0x3000_2000 |
4 |
KM4TZ 安全启动加载程序,包括代码和数据 |
√ |
KM4TZ BD RAM TZ |
0x2000_3000 |
64 |
KM4TZ IMG3 BD RAM,如果不需要可以合并到 KM4TZ BD RAM |
x |
KM4TZ BD RAM |
0x2001_3800 |
242 |
KM4TZ BDRAM 数据、BSS 和 heap |
√ |
KM4NS BD RAM |
0x2005_0000 |
192 |
KM4NS BDRAM 数据、BSS 和 heap |
√ |
KM4TZ BD PSRAM TZ |
0x6000_0000 |
64 |
KM4TZ IMG3 PSRAM,如果不需要可以合并到 KM4TZ PSRAM |
x |
KM4TZ BD PSRAM |
0x6001_0000 |
3156 |
KM4TZ BD PSRAM 代码、数据和 heap |
√ |
KM4NS BD PSRAM |
0x6032_5000 |
876 |
KM4NS BD PSRAM 代码、数据和 heap |
√ |
KM4TZ HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KM4TZ 堆空间不足,可用于扩展 heap 大小 |
x |
KM4NS HEAP EXT |
0x6FFF_FFFF |
0 |
如果 KM4NS 堆空间不足,可用于扩展 heap 大小 |
x |
备注
如果 Trustzone 未启用,则 KM4TZ BD RAM TZ 和 KM4TZ BD PSRAM TZ 将作为 Non-secure 区域,并分别合并到 KM4TZ BD RAM 和 KM4TZ BD PSRAM 中。
Item |
起始地址 |
大小 |
描述 |
必需 |
|---|---|---|---|---|
NP_PSRAM |
0x2000_0020 |
2MB - 32B |
NP PSRAM 内存 |
√ |
VP_PSRAM |
0x2020_0020 |
~1.8MB |
VP PSRAM 内存 |
√ |
NP_PSRAM_S |
0x3000_0020 |
NP PSRAM 安全区域 |
√ |
|
AP_PSRAM_SECURE0 |
0x303C_FFE0 |
188KB |
AP 安全区域 0 |
√ |
AP_PSRAM_SECURE1 |
0x303F_F000 |
4KB |
AP 安全区域 1 |
√ |
Item |
起始地址 |
大小 |
描述 |
必需 |
|---|---|---|---|---|
AP_DDR_SECURE0 |
0xA000_0000 |
1MB |
AP 安全区域 0 |
√ |
AP_DDR_SECURE1 |
0xA010_0000 |
1MB |
AP 安全区域 1 |
√ |
AP_DDR_SECURE2 |
0xA020_1000 |
124KB |
AP 安全区域 3 |
√ |
AP_DDR_RO |
0x8022_0000 |
2MB |
AP 只读区域 |
√ |
AP_DDR |
0x8042_0000 |
~28MB |
AP 主内存 |
√ |
AP_DDR_STK |
0x81FE_0000 |
256KB |
AP 栈区域 |
√ |
EN_DDR |
0x8200_0000 |
32MB |
编码器内存 |
√ |
VP_DDR |
0x8400_0000 |
48MB |
VP 内存 |
√ |
TG_DDR |
0x8700_0000 |
4MB |
张量生成器内存 |
√ |
NN_DDR |
0x8740_0000 |
12MB |
神经网络内存 |
√ |
备注
如果启用了 TrustZone,NP_PSRAM 的一部分将作为安全区域 NP_PSRAM_S 保留,剩余的 NP_PSRAM 作为非安全内存使用,其大小会相应减少。
Kconfig Link Option
menuconfig 提供了相关的设置,用于控制代码和数据的加载位置。进入 CONFIG Link Option 选项
IMG1(Bootloader) running on FLASH or SRAM? (FLASH) --->
[ ] Enable PQC Secure Boot for IMG1 (requires +12KB SRAM)
IMG2(Application) running on FLASH or PSRAM? (FLASH) --->
IMG2 Data and Heap in SRAM or PSRAM? (SRAM) --->
[*] PSRAM_ALL_FOR_AP_HEAP
每个选项的含义如下:
IMG1(Bootloader) running on FLASH or SRAM?:FLASH : bootloader 的全部代码加载到 FLASH 上运行。
SRAM : bootloader 的全部代码加载到 SRAM 上运行,一般用于对安全要求较高,且 SRAM 空间足够的场景。
Enable PQC Secure Boot for IMG1 (requires +12KB SRAM):启用后量子密码学 (ML-DSA-65) 安全启动验证,仅在选择 IMG1 --> SRAM 时可用。
启用后,
KM4_IMG1_SIZE从 32KB 增加到 44KB (+12KB)。增加的 12KB 空间从
KM4_IMG2_SIZE中扣除。
IMG2(Application) running on FLASH or PSRAM?:FLASH: application 的代码直接在 FLASH 上运行,仅支持 NOR FLASH。
PSRAM: application 的代码加载到 PSRAM 上运行,用于对代码执行速度有要求,或安全性要求比较高的场景。
IMG2 Data and Heap in SRAM or PSRAM?:SRAM: application 的数据和 heap 分配在 SRAM 中。
PSRAM: application 的数据和 heap 分配在 PSRAM 中,用于需要更大 heap 空间的场景。
PSRAM_ALL_FOR_AP_HEAP:将全部 PSRAM 空间分配给 application heap 使用。
仅在未选择
IMG2 --> PSRAM和Data & Heap --> PSRAM时可用。
备注
选择 PSRAM 相关选项前需确认 IC 内部是否集成 PSRAM 或外挂 PSRAM。
menuconfig 提供了相关的设置,用于控制代码和数据的加载位置。进入 CONFIG Link Option 选项
IMG1(Bootloader) running on FLASH or SRAM? (FLASH) --->
IMG2(Application) running on FLASH or PSRAM? (FLASH) --->
IMG2 Data and Heap in SRAM or PSRAM? (SRAM) --->
[*] ALL PSRAM USED FOR APPLICATION HEAP
每个选项的含义如下:
IMG1(Bootloader) running on FLASH or SRAM?:FLASH : bootloader 的全部代码加载到 FLASH 上运行。
SRAM : bootloader 的全部代码加载到 SRAM 上运行,一般用于对安全要求较高,且 SRAM 空间足够的场景。
IMG2(Application) running on FLASH or PSRAM?:FLASH: application 的代码直接在 FLASH 上运行,仅支持 NOR FLASH。
PSRAM: application 的代码加载到 PSRAM 上运行,用于对代码执行速度有要求,或安全性要求比较高的场景。
IMG2 Data and Heap in SRAM or PSRAM?:SRAM: application 的数据和 heap 分配在 SRAM 中。这是默认选项,但在启用 DSP 时不可用。
PSRAM: application 的数据和 heap 分配在 PSRAM 中。
ALL PSRAM USED FOR APPLICATION HEAP:启用时(默认),所有剩余的 PSRAM 空间都分配给 application heap。
仅在未选择
IMG2_PSRAM和DATA_HEAP_PSRAM且未启用MP_SHRINK时可用。
备注
当启用 TrustZone 时,会出现额外的选项
IMG3(SecureImage) running on PSRAM or SRAM?,默认为 SRAM。选择 PSRAM 相关选项前需确认 IC 内部是否集成 PSRAM 或外挂 PSRAM。
menuconfig 提供了相关的设置,用于控制代码和数据的加载位置。进入 CONFIG Link Option 选项
IMG1(Bootloader) running on FLASH or SRAM? (FLASH) --->
IMG2(Application) running on FLASH or PSRAM? (FLASH) --->
IMG2 Data and Heap in SRAM or PSRAM? (SRAM) --->
[*] ALL PSRAM USED FOR APPLICATION HEAP
每个选项的含义如下:
IMG1(Bootloader) running on FLASH or SRAM?:FLASH : bootloader 的全部代码加载到 FLASH 上运行。
SRAM : bootloader 的全部代码加载到 SRAM 上运行,一般用于对安全要求较高,且 SRAM 空间足够的场景。
IMG2(Application) running on FLASH or PSRAM?:FLASH: application 的代码直接在 FLASH 上运行,仅支持 NOR FLASH。
PSRAM: application 的代码加载到 PSRAM 上运行,用于对代码执行速度有要求,或安全性要求比较高的场景。
IMG2 Data and Heap in SRAM or PSRAM?:SRAM: application 的数据和 heap 分配在 SRAM 中。这是默认选项,但在启用 DSP 时不可用。
PSRAM: application 的数据和 heap 分配在 PSRAM 中。
ALL PSRAM USED FOR APPLICATION HEAP:启用时(默认),所有剩余的 PSRAM 空间都分配给 application heap。
仅在未选择
IMG2_PSRAM和DATA_HEAP_PSRAM且未启用MP_SHRINK时可用。
备注
当启用 TrustZone 时,会出现额外的选项
IMG3(SecureImage) running on PSRAM or SRAM?,默认为 SRAM。选择 PSRAM 相关选项前需确认 IC 内部是否集成 PSRAM 或外挂 PSRAM。
menuconfig 提供了相关的设置,用于控制代码和数据的加载位置。进入 CONFIG Link Option 选项
IMG1(Bootloader) running on FLASH or SRAM? (FLASH) --->
IMG2(Application) running on FLASH or PSRAM? (FLASH) --->
IMG2 Data and Heap in SRAM or PSRAM? (SRAM) --->
[*] ALL PSRAM USED FOR APPLICATION HEAP
每个选项的含义如下:
IMG1(Bootloader) running on FLASH or SRAM?:FLASH : bootloader 的全部代码加载到 FLASH 上运行。
SRAM : bootloader 的全部代码加载到 SRAM 上运行,一般用于对安全要求较高,且 SRAM 空间足够的场景。
IMG2(Application) running on FLASH or PSRAM?:FLASH: application 的代码直接在 FLASH 上运行,仅支持 NOR FLASH。
PSRAM: application 的代码加载到 PSRAM 上运行,用于对代码执行速度有要求,或安全性要求比较高的场景。
IMG2 Data and Heap in SRAM or PSRAM?:SRAM: application 的数据和 heap 分配在 SRAM 中。这是默认选项,但在启用 DSP 时不可用。
PSRAM: application 的数据和 heap 分配在 PSRAM 中。
ALL PSRAM USED FOR APPLICATION HEAP:启用时(默认),所有剩余的 PSRAM 空间都分配给 application heap。
仅在未选择
IMG2_PSRAM和DATA_HEAP_PSRAM且未启用MP_SHRINK时可用。
备注
当启用 TrustZone 时,会出现额外的选项
IMG3(SecureImage) running on PSRAM or SRAM?,默认为 SRAM。选择 PSRAM 相关选项前需确认 IC 内部是否集成 PSRAM 或外挂 PSRAM。
menuconfig 提供了相关的设置,用于控制代码和数据的加载位置。进入 CONFIG Link Option 选项
IMG1(Bootloader) running on FLASH or SRAM? (FLASH) --->
IMG2(Application) running on FLASH or PSRAM? (FLASH) --->
IMG2 Data and Heap in SRAM or PSRAM? (SRAM) --->
[*] ALL PSRAM USED FOR APPLICATION HEAP
每个选项的含义如下:
IMG1(Bootloader) running on FLASH or SRAM?:FLASH : bootloader 的全部代码加载到 FLASH 上运行。
SRAM : bootloader 的全部代码加载到 SRAM 上运行,一般用于对安全要求较高,且 SRAM 空间足够的场景。
IMG2(Application) running on FLASH or PSRAM?:FLASH: application 的代码直接在 FLASH 上运行,仅支持 NOR FLASH。
PSRAM: application 的代码加载到 PSRAM 上运行,用于对代码执行速度有要求,或安全性要求比较高的场景。
IMG2 Data and Heap in SRAM or PSRAM?:SRAM: application 的数据和 heap 分配在 SRAM 中。这是默认选项,但在启用 DSP 时不可用。
PSRAM: application 的数据和 heap 分配在 PSRAM 中。
ALL PSRAM USED FOR APPLICATION HEAP:启用时(默认),所有剩余的 PSRAM 空间都分配给 application heap。
仅在未选择
IMG2_PSRAM和DATA_HEAP_PSRAM且未启用MP_SHRINK时可用。
备注
当启用 TrustZone 时,会出现额外的选项
IMG3(SecureImage) running on PSRAM or SRAM?,默认为 SRAM。选择 PSRAM 相关选项前需确认 IC 内部是否集成 PSRAM 或外挂 PSRAM。
menuconfig 提供了相关的设置,用于控制代码和数据的加载位置。进入 CONFIG Link Option 选项
IMG1(Bootloader) running on SRAM? (SRAM) --->
IMG2(Application) running on PSRAM or FLASH? (PSRAM) --->
每个选项的含义如下:
IMG1(Bootloader) running on SRAM?:SRAM : bootloader 的全部代码加载到 SRAM 上运行。这是 AmebaSmart 唯一的选项,使用固定的 SRAM 分配用于 bootloader 执行。
IMG2(Application) running on PSRAM or FLASH?:PSRAM: application 的代码加载到 PSRAM 上运行,用于提高代码执行速度。这是默认选项,但在启用
CP_TEST_CA32时不可用。FLASH: application 的代码直接在 FLASH 上运行,仅支持 NOR FLASH。当 PSRAM 不可用或启用 CP_TEST_CA32 时使用此选项。
备注
AmebaSmart bootloader 仅支持 SRAM 运行模式,不同于其他支持 FLASH 和 SRAM 选项的 Ameba 变体。
选择 PSRAM 相关选项前需确认 IC 内部是否集成 PSRAM 或外挂 PSRAM。
当启用
CP_TEST_CA32进行测试时,IMG2 仅支持 FLASH 选项。
menuconfig 提供了相关的设置,用于控制代码和数据的加载位置。进入 CONFIG Link Option 选项
IMG1(Bootloader) running on FLASH or SRAM? (FLASH) --->
IMG2(Application) running on FLASH, SRAM, or PSRAM? (FLASH) --->
IMG2 Data and Heap in SRAM or PSRAM? (SRAM) --->
[*] ALL PSRAM USED FOR APPLICATION HEAP
每个选项的含义如下:
IMG1(Bootloader) running on FLASH or SRAM?:FLASH : bootloader 的全部代码加载到 FLASH 上运行。
SRAM : bootloader 的全部代码加载到 SRAM 上运行,一般用于对安全要求较高,且 SRAM 空间足够的场景。
IMG2(Application) running on FLASH, SRAM, or PSRAM?:FLASH: application 的代码直接在 FLASH 上运行,仅支持 NOR FLASH。
SRAM: application 的代码加载到 SRAM 上运行,用于提高代码执行速度。
PSRAM: application 的代码加载到 PSRAM 上运行,用于对代码执行速度有要求,或安全性要求比较高的场景。
IMG2 Data and Heap in SRAM or PSRAM?:SRAM: application 的数据和 heap 分配在 SRAM 中。这是默认选项。
PSRAM: application 的数据和 heap 分配在 PSRAM 中。
ALL PSRAM USED FOR APPLICATION HEAP:启用时(默认),所有剩余的 PSRAM 空间都分配给 application heap。
仅在未选择
IMG2_PSRAM和DATA_HEAP_PSRAM、未启用MP_SHRINK且禁用WIFI_HOST_CONTROL时可用(WHC_DEV_MENU 暂不支持 PSRAM)。
备注
当启用 TrustZone 时,会出现额外的选项
IMG3(SecureImage) running on SRAM, PSRAM or FLASH?,默认为 SRAM。选择 PSRAM 相关选项前需确认 IC 内部是否集成 PSRAM 或外挂 PSRAM。
menuconfig 提供了相关的设置,用于控制代码和数据的加载位置。进入 CONFIG Link Option 选项
IMG1(Bootloader) running on FLASH or SRAM? (FLASH) --->
IMG2(Application) running on FLASH, SRAM, or PSRAM? (FLASH) --->
IMG2 Data and Heap in SRAM or PSRAM? (SRAM) --->
[*] ALL PSRAM USED FOR APPLICATION HEAP
每个选项的含义如下:
IMG1(Bootloader) running on FLASH or SRAM?:FLASH : bootloader 的全部代码加载到 FLASH 上运行。
SRAM : bootloader 的全部代码加载到 SRAM 上运行,一般用于对安全要求较高,且 SRAM 空间足够的场景。
IMG2(Application) running on FLASH, SRAM, or PSRAM?:FLASH: application 的代码直接在 FLASH 上运行,仅支持 NOR FLASH。
SRAM: application 的代码加载到 SRAM 上运行,用于对代码执行速度有要求,或安全性要求比较高的场景。
PSRAM: application 的代码加载到 PSRAM 上运行,用于对代码执行速度有要求,或安全性要求比较高的场景。
IMG2 Data and Heap in SRAM or PSRAM?:SRAM: application 的数据和 heap 加载到 SRAM 上运行。
PSRAM: application 的数据和 heap 加载到 PSRAM 上运行。
ALL PSRAM USED FOR APPLICATION HEAP: 将 PSRAM 空闲空间划给 application 作 heap 使用
备注
选择 PSRAM 相关选项前需确认 IC 内部是否集成 PSRAM 或外挂 PSRAM
menuconfig 提供了相关的设置,用于控制代码和数据的加载位置。进入 CONFIG Link Option 选项
IMG1(Bootloader) running on SRAM? (SRAM) --->
IMG2(FP Application) running on SRAM (SRAM) --->
IMG2(NP Application) running on PSRAM (PSRAM) --->
IMG2(VP Application) running on PSRAM? (PSRAM) --->
IMG2(AP Application) running on DDR? (DDR) --->
每个选项的含义如下:
IMG1(Bootloader) running on SRAM?: bootloader 代码加载到 SRAM 上运行。IMG2(FP Application) running on SRAM: FP(功能处理器)应用代码在 SRAM 上运行。IMG2(NP Application) running on PSRAM: NP(网络处理器)应用代码在 PSRAM 上运行。IMG2(VP Application) running on PSRAM?: VP(视频处理器)应用代码在 PSRAM 上运行。IMG2(AP Application) running on DDR?: AP(应用处理器)应用代码在 DDR 上运行。
备注
RTL8735C 各处理器核的内存类型已固定分配,用户无需手动配置。
Bootloader_RAM
在 ameba_layout.ld 有如下定义:
#if defined(CONFIG_IMG1_FLASH)
#define KM4_IMG1_SIZE KBYTES(4)
#elif defined(CONFIG_IMG1_PQC_SBOOT)
#define KM4_IMG1_SIZE KBYTES(44)
#else
#define KM4_IMG1_SIZE KBYTES(32)
#endif
KM4_BOOTLOADER_RAM_S (rwx) : ORIGIN = KM4_IMG1_RAM_START + SECURE_ADDR_OFFSET + IMAGE_HEADER_LEN, LENGTH = KM4_IMG1_SIZE - IMAGE_HEADER_LEN
在 menuconfig 中配置 CONFIG Link Option 选项, bootloader 占用 RAM 空间会随之调整:
选择 IMG1 --> FLASH 时,
KM4_BOOTLOADER_RAM_S预设为 4KB选择 IMG1 --> SRAM 时,
KM4_BOOTLOADER_RAM_S预设为 32KB选择 IMG1 --> SRAM 并启用 Enable PQC Secure Boot for IMG1 时,
KM4_BOOTLOADER_RAM_S预设为 44KB(+12KB 用于后量子密码学安全启动)
如需扩大 KM4_BOOTLOADER_RAM_S ,需确保调整后的尺寸为 4KB 对齐(MPC 保护以 4KB 为单位)。
备注
启用 CONFIG_IMG1_PQC_SBOOT 会增加 12KB 的 bootloader RAM 空间,这部分空间会从 KM4_IMG2_SIZE 中扣除。
在 ameba_layout.ld 有如下定义:
#if defined(CONFIG_IMG1_FLASH)
#define KM4_IMG1_SIZE KBYTES(4)
#else
#define KM4_IMG1_SIZE KBYTES(28)
#endif
KM4_BOOTLOADER_RAM_S (rwx) : ORIGIN = KM4_IMG1_RAM_SATRT + SECURE_ADDR_OFFSET + IMAGE_HEADER_LEN, LENGTH = KM4_IMG1_SIZE - IMAGE_HEADER_LEN
在 menuconfig 中配置 CONFIG Link Option 选项, bootloader 占用 RAM 空间会随之调整:
选择 IMG1 --> FLASH 时,
KM4_BOOTLOADER_RAM_S预设为 4KB选择 IMG1 --> SRAM 时,
KM4_BOOTLOADER_RAM_S预设为 28KB
如需扩大 KM4_BOOT_RAM_S ,需确保调整后的尺寸为 4KB 对齐(MPC 保护以 4KB 为单位)。
在 ameba_layout.ld 有如下定义:
#if defined(CONFIG_IMG1_FLASH)
#define KM4_IMG1_SIZE KBYTES(4)
#else
#define KM4_IMG1_SIZE KBYTES(28)
#endif
KM4_BOOTLOADER_RAM_S (rwx) : ORIGIN = KM4_IMG1_RAM_SATRT + SECURE_ADDR_OFFSET + IMAGE_HEADER_LEN, LENGTH = KM4_IMG1_SIZE - IMAGE_HEADER_LEN
在 menuconfig 中配置 CONFIG Link Option 选项, bootloader 占用 RAM 空间会随之调整:
选择 IMG1 --> FLASH 时,
KM4_BOOTLOADER_RAM_S预设为 4KB选择 IMG1 --> SRAM 时,
KM4_BOOTLOADER_RAM_S预设为 28KB
如需扩大 KM4_BOOT_RAM_S ,需确保调整后的尺寸为 4KB 对齐(MPC 保护以 4KB 为单位)。
在 ameba_layout.ld 有如下定义:
#if defined(CONFIG_IMG1_FLASH)
#define KM4_IMG1_SIZE KBYTES(4)
#else
#define KM4_IMG1_SIZE KBYTES(28)
#endif
KM4_BOOTLOADER_RAM_S (rwx) : ORIGIN = KM4_IMG1_RAM_SATRT + SECURE_ADDR_OFFSET + IMAGE_HEADER_LEN, LENGTH = KM4_IMG1_SIZE - IMAGE_HEADER_LEN
在 menuconfig 中配置 CONFIG Link Option 选项, bootloader 占用 RAM 空间会随之调整:
选择 IMG1 --> FLASH 时,
KM4_BOOTLOADER_RAM_S预设为 4KB选择 IMG1 --> SRAM 时,
KM4_BOOTLOADER_RAM_S预设为 28KB
如需扩大 KM4_BOOT_RAM_S ,需确保调整后的尺寸为 4KB 对齐(MPC 保护以 4KB 为单位)。
在 ameba_layout.ld 有如下定义:
#if defined(CONFIG_IMG1_FLASH)
#define KM4_IMG1_SIZE KBYTES(4)
#else
#define KM4_IMG1_SIZE KBYTES(28)
#endif
KM4_BOOTLOADER_RAM_S (rwx) : ORIGIN = KM4_IMG1_RAM_SATRT + SECURE_ADDR_OFFSET + IMAGE_HEADER_LEN, LENGTH = KM4_IMG1_SIZE - IMAGE_HEADER_LEN
在 menuconfig 中配置 CONFIG Link Option 选项, bootloader 占用 RAM 空间会随之调整:
选择 IMG1 --> FLASH 时,
KM4_BOOTLOADER_RAM_S预设为 4KB选择 IMG1 --> SRAM 时,
KM4_BOOTLOADER_RAM_S预设为 28KB
如需扩大 KM4_BOOT_RAM_S ,需确保调整后的尺寸为 4KB 对齐(MPC 保护以 4KB 为单位)。
在 ameba_layout.ld 有如下定义:
KM4_BOOTLOADER_RAM_S (rwx) : ORIGIN = 0x30003020, LENGTH = 0x30014000 - 0x30003020
在 ameba_layout.ld 有如下定义:
#if defined(CONFIG_IMG1_FLASH)
#define KM4TZ_IMG1_SIZE KBYTES(4)
#else
#define KM4TZ_IMG1_SIZE KBYTES(32)
#endif
KM4TZ_BOOTLOADER_RAM_S (rwx) : ORIGIN = KM4TZ_IMG1_RAM_SATRT + SECURE_ADDR_OFFSET + IMAGE_HEADER_LEN, \
LENGTH = KM4TZ_IMG1_SIZE - IMAGE_HEADER_LEN
在 menuconfig 中配置 CONFIG Link Option 选项, bootloader 占用 RAM 空间会随之调整:
选择 IMG1 --> FLASH 时,
KM4TZ_BOOTLOADER_RAM_S预设为 4KB选择 IMG1 --> SRAM 时,
KM4TZ_BOOTLOADER_RAM_S预设为 32KB
如需扩大 KM4TZ_BOOTLOADER_RAM_S ,需确保调整后的尺寸为 4KB 对齐(MPC 保护以 4KB 为单位)。
在 ameba_layout.ld 有如下定义:
#if defined(CONFIG_IMG1_FLASH)
#define KM4TZ_IMG1_SIZE KBYTES(4)
#else
#define KM4TZ_IMG1_SIZE KBYTES(24)
#endif
KM4TZ_BOOTLOADER_RAM_S (rwx) : ORIGIN = KM4TZ_IMG1_RAM_SATRT + SECURE_ADDR_OFFSET + IMAGE_HEADER_LEN, \
LENGTH = KM4TZ_IMG1_SIZE - IMAGE_HEADER_LEN
在 menuconfig 中配置 CONFIG Link Option 选项, bootloader 占用 RAM 空间会随之调整:
选择 IMG1 --> FLASH 时,
KM4TZ_BOOTLOADER_RAM_S预设为 4KB选择 IMG1 --> SRAM 时,
KM4TZ_BOOTLOADER_RAM_S预设为 24KB
如需扩大 KM4TZ_BOOTLOADER_RAM_S ,需确保调整后的尺寸为 4KB 对齐(MPC 保护以 4KB 为单位)。
在 ameba_layout.ld 中有如下定义:
NP_SSRAM_LOADER_S (rwx) : ORIGIN = NP_SSRAM_LOADER_S_ORIGIN, LENGTH = NP_SSRAM_LOADER_S_LENGTH
NP_SSRAM_LOADER_S_ORIGIN 和 NP_SSRAM_LOADER_S_LENGTH 定义于 component/soc/amebapro3/fwlib/include/ameba_layout.h。
用户只可缩减 NP_SSRAM_LOADER_S_LENGTH 的大小。
NP_SSRAM_LOADER_S_ORIGIN 必须保持不变。
BD_RAM 和 BD_PSRAM
BD_RAM
在 ameba_layout.ld 中有如下定义:
#if defined(CONFIG_IMG3_SRAM)
#define KM4_RAM_TZ_SIZE KBYTES(CONFIG_TZ_S_SIZE)
#else
#define KM4_RAM_TZ_SIZE KBYTES(0)
#endif
#define RAM_KM0_IMG2_SIZE KBYTES(96)
#define KM4_IMG2_RAM_START (KM4_RAM_TZ_START + KM4_RAM_TZ_SIZE)
#define KM0_IMG2_RAM_START (SRAM_END - RAM_KM0_IMG2_SIZE)
KM4_BD_RAM (rwx) : ORIGIN = KM4_IMG2_RAM_START + IMAGE_HEADER_LEN, LENGTH = KM0_IMG2_RAM_START - KM4_IMG2_RAM_START - IMAGE_HEADER_LEN
KM0_BD_RAM (rwx) : ORIGIN = KM0_IMG2_RAM_START + IMAGE_HEADER_LEN, LENGTH = RAM_KM0_IMG2_SIZE - IMAGE_HEADER_LEN
除 Fixed RAM 以及 IMG1 所占用空间外,剩余的 SRAM 空间分配给 KM4_IMG3, KM0_IMG2, 以及 KM4_IMG2。
ameba_layout.ld中已通过KM4_RAM_TZ_SIZE``(由 ``CONFIG_TZ_S_SIZE控制)定义 TZ 区域占用的 SRAM 空间大小,通过RAM_KM0_IMG2_SIZE定义 KM0_IMG2 占用的 SRAM 大小,剩余的空间用作 KM4_IMG2,用户可以根据实际需求调整相应的值。
BD_PSRAM
在 ameba_layout.ld 中有如下定义:
#define PSRAM_BASE (0x60000000)
#define PSRAM_END (0x60400000)
#if defined(CONFIG_IMG3_PSRAM)
#define KM4_PSRAM_TZ_SIZE KBYTES(CONFIG_TZ_S_SIZE)
#else
#define KM4_PSRAM_TZ_SIZE KBYTES(0)
#endif
#define PSRAM_KM4_IMG2_SIZE (KBYTES(3220) - KM4_PSRAM_TZ_SIZE)
#define KM4_IMG2_PSRAM_START (KM4_PSRAM_TZ_START + KM4_PSRAM_TZ_SIZE)
#define KM0_IMG2_PSRAM_START (KM4_IMG2_PSRAM_START + PSRAM_KM4_IMG2_SIZE)
#define PSRAM_KM0_IMG2_SIZE (PSRAM_END - KM0_IMG2_PSRAM_START)
KM4_BD_PSRAM (rwx) : ORIGIN = KM4_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KM4_IMG2_SIZE - IMAGE_HEADER_LEN
KM0_BD_PSRAM (rwx) : ORIGIN = KM0_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KM0_IMG2_SIZE - IMAGE_HEADER_LEN
PSRAM 的空间依次分配给 KM4_IMG3, KM4_IMG2, KM0_IMG2,PSRAM 的起始和结束地址分别由
PSRAM_BASE和PSRAM_END定义,默认大小为 4MB。 起始地址PSRAM_BASE为固定值,用户可根据实际 PSRAM 大小调整结束地址PSRAM_END的值 。如需调整
PSRAM_BASE到PSRAM_END之间的空间分配,请通过KM4_PSRAM_TZ_SIZE``(由 ``CONFIG_TZ_S_SIZE控制)调整 TZ 区域(KM4_IMG3)的大小,通过PSRAM_KM4_IMG2_SIZE调整 KM4_IMG2 的大小,剩余的空间将全部分配给 KM0_IMG2。PSRAM_END之后的空间(如有)可作为拓展 heapxxx_PSRAM_HEAP_EXT使用,默认未启用。
BD_RAM
在 ameba_layout.ld 中有如下定义:
#if defined(CONFIG_AP_CORE_KM4)
#define RAM_KR4_IMG2_SIZE KBYTES(96)
#define KM4_IMG2_RAM_START (KM4_RAM_TZ_START + KM4_RAM_TZ_SIZE)
#define KR4_IMG2_RAM_START (SRAM_END - RAM_KR4_IMG2_SIZE)
#define RAM_KM4_IMG2_SIZE (KR4_IMG2_RAM_START - KM4_IMG2_RAM_START)
#else
#define RAM_KM4_IMG2_SIZE KBYTES(96)
#define KM4_IMG2_RAM_START (KM4_RAM_TZ_START + KM4_RAM_TZ_SIZE)
#define KR4_IMG2_RAM_START (KM4_IMG2_RAM_START + RAM_KM4_IMG2_SIZE)
#define RAM_KR4_IMG2_SIZE (SRAM_END - KR4_IMG2_RAM_START)
#endif
KM4_BD_RAM和KR4_BD_RAM分配 IMG1,Fixed RAM 外,全部剩余的 SRAM 空间,修改RAM_KR4_IMG2_SIZE或RAM_KM4_IMG2_SIZE的值,可以调整KM4_BD_RAM和KR4_BD_RAM的空间分配。
BD_PSRAM
在 ameba_layout.ld 中有如下定义:
#define PSRAM_BASE (0x60000000)
#define PSRAM_DSP_START (0x60300000)
#if defined(CONFIG_IMG3_PSRAM)
#define KM4_PSRAM_TZ_SIZE KBYTES(CONFIG_TZ_S_SIZE)
#else
#define KM4_PSRAM_TZ_SIZE KBYTES(0)
#endif
#define PSRAM_KM4_IMG2_SIZE (KBYTES(1536) - KM4_PSRAM_TZ_SIZE)
#define KM4_IMG2_PSRAM_START (KM4_PSRAM_TZ_START + KM4_PSRAM_TZ_SIZE)
#define KR4_IMG2_PSRAM_START (KM4_IMG2_PSRAM_START + PSRAM_KM4_IMG2_SIZE)
#define PSRAM_KR4_IMG2_SIZE (PSRAM_DSP_START - KR4_IMG2_PSRAM_START)
KM4_BD_PSRAM (rwx) : ORIGIN = KM4_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KM4_IMG2_SIZE - IMAGE_HEADER_LEN
KR4_BD_PSRAM (rwx) : ORIGIN = KR4_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KR4_IMG2_SIZE - IMAGE_HEADER_LEN
PSRAM_BASE到PSRAM_DSP_START之间的空间依次分配给 TZ 区域(KM4_IMG3)、KM4_IMG2 以及 KR4_IMG2。如需调整空间分配,请通过KM4_PSRAM_TZ_SIZE``(由 ``CONFIG_TZ_S_SIZE控制)调整 TZ 区域大小,通过PSRAM_KM4_IMG2_SIZE调整 KM4_IMG2 的大小,剩余的空间将全部分配给 KR4_IMG2。PSRAM_DSP_START以后的空间可作为拓展 heap 使用,也可以调整PSRAM_DSP_START的值将空间合并到BD_PSRAM,注意PSRAM_DSP_START的值不要超出 PSRAM 的物理地址范围。
BD_RAM
在 ameba_layout.ld 中有如下定义:
#if defined(CONFIG_AP_CORE_KM4)
#define RAM_KR4_IMG2_SIZE KBYTES(96)
#define KM4_IMG2_RAM_START (KM4_RAM_TZ_START + KM4_RAM_TZ_SIZE)
#define KR4_IMG2_RAM_START (SRAM_END - RAM_KR4_IMG2_SIZE)
#define RAM_KM4_IMG2_SIZE (KR4_IMG2_RAM_START - KM4_IMG2_RAM_START)
#else
#define RAM_KM4_IMG2_SIZE KBYTES(96)
#define KM4_IMG2_RAM_START (KM4_RAM_TZ_START + KM4_RAM_TZ_SIZE)
#define KR4_IMG2_RAM_START (KM4_IMG2_RAM_START + RAM_KM4_IMG2_SIZE)
#define RAM_KR4_IMG2_SIZE (SRAM_END - KR4_IMG2_RAM_START)
#endif
KM4_BD_RAM和KR4_BD_RAM分配 IMG1,Fixed RAM 外,全部剩余的 SRAM 空间,修改RAM_KR4_IMG2_SIZE或RAM_KM4_IMG2_SIZE的值,可以调整KM4_BD_RAM和KR4_BD_RAM的空间分配。
BD_PSRAM
在 ameba_layout.ld 中有如下定义:
#define PSRAM_BASE (0x60000000)
#define PSRAM_DSP_START (0x60300000)
#if defined(CONFIG_IMG3_PSRAM)
#define KM4_PSRAM_TZ_SIZE KBYTES(CONFIG_TZ_S_SIZE)
#else
#define KM4_PSRAM_TZ_SIZE KBYTES(0)
#endif
#define PSRAM_KM4_IMG2_SIZE (KBYTES(1536) - KM4_PSRAM_TZ_SIZE)
#define KM4_IMG2_PSRAM_START (KM4_PSRAM_TZ_START + KM4_PSRAM_TZ_SIZE)
#define KR4_IMG2_PSRAM_START (KM4_IMG2_PSRAM_START + PSRAM_KM4_IMG2_SIZE)
#define PSRAM_KR4_IMG2_SIZE (PSRAM_DSP_START - KR4_IMG2_PSRAM_START)
KM4_BD_PSRAM (rwx) : ORIGIN = KM4_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KM4_IMG2_SIZE - IMAGE_HEADER_LEN
KR4_BD_PSRAM (rwx) : ORIGIN = KR4_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KR4_IMG2_SIZE - IMAGE_HEADER_LEN
PSRAM_BASE到PSRAM_DSP_START之间的空间依次分配给 TZ 区域(KM4_IMG3)、KM4_IMG2 以及 KR4_IMG2。如需调整空间分配,请通过KM4_PSRAM_TZ_SIZE``(由 ``CONFIG_TZ_S_SIZE控制)调整 TZ 区域大小,通过PSRAM_KM4_IMG2_SIZE调整 KM4_IMG2 的大小,剩余的空间将全部分配给 KR4_IMG2。PSRAM_DSP_START以后的空间可作为拓展 heap 使用,也可以调整PSRAM_DSP_START的值将空间合并到BD_PSRAM,注意PSRAM_DSP_START的值不要超出 PSRAM 的物理地址范围。
BD_PSRAM
在 ameba_layout.ld 中有如下定义:
#define PSRAM_BASE (0x60000000)
#define PSRAM_DSP_START (0x60300000)
#define PSRAM_END (0x60400000)
#if defined(CONFIG_IMG3_PSRAM)
#define KM4_PSRAM_TZ_SIZE KBYTES(CONFIG_TZ_S_SIZE)
#else
#define KM4_PSRAM_TZ_SIZE KBYTES(0)
#endif
#define PSRAM_KM4_IMG2_SIZE (KBYTES(1536) - KM4_PSRAM_TZ_SIZE)
#define KM4_IMG2_PSRAM_START (KM4_PSRAM_TZ_START + KM4_PSRAM_TZ_SIZE)
#define KR4_IMG2_PSRAM_START (KM4_IMG2_PSRAM_START + PSRAM_KM4_IMG2_SIZE)
#define PSRAM_KR4_IMG2_SIZE (PSRAM_DSP_START - KR4_IMG2_PSRAM_START)
KM4_BD_PSRAM (rwx) : ORIGIN = KM4_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KM4_IMG2_SIZE - IMAGE_HEADER_LEN
KR4_BD_PSRAM (rwx) : ORIGIN = KR4_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KR4_IMG2_SIZE - IMAGE_HEADER_LEN
PSRAM_BASE到PSRAM_DSP_START之间的空间依次分配给 TZ 区域(KM4_IMG3)、KM4_IMG2 以及 KR4_IMG2。如需调整空间分配,请通过KM4_PSRAM_TZ_SIZE``(由 ``CONFIG_TZ_S_SIZE控制)调整 TZ 区域大小,通过PSRAM_KM4_IMG2_SIZE调整 KM4_IMG2 的大小,剩余的空间将全部分配给 KR4_IMG2。PSRAM_DSP_START到PSRAM_END之间空间分配给 DSP 使用,可根据实际 PSRAM 容量调整PSRAM_END的值。PSRAM_END之后的空间(如有)可作为拓展 heapxxx_PSRAM_HEAP_EXT使用,默认未启用。
BD_PSRAM
在 ameba_layout.ld 中有如下定义:
#define PSRAM_BASE (0x60000000)
#define PSRAM_DSP_START (0x60300000)
#define PSRAM_END (0x60400000)
#if defined(CONFIG_IMG3_PSRAM)
#define KM4_PSRAM_TZ_SIZE KBYTES(CONFIG_TZ_S_SIZE)
#else
#define KM4_PSRAM_TZ_SIZE KBYTES(0)
#endif
#define PSRAM_KM4_IMG2_SIZE (KBYTES(1536) - KM4_PSRAM_TZ_SIZE)
#define KM4_IMG2_PSRAM_START (KM4_PSRAM_TZ_START + KM4_PSRAM_TZ_SIZE)
#define KR4_IMG2_PSRAM_START (KM4_IMG2_PSRAM_START + PSRAM_KM4_IMG2_SIZE)
#define PSRAM_KR4_IMG2_SIZE (PSRAM_DSP_START - KR4_IMG2_PSRAM_START)
KM4_BD_PSRAM (rwx) : ORIGIN = KM4_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KM4_IMG2_SIZE - IMAGE_HEADER_LEN
KR4_BD_PSRAM (rwx) : ORIGIN = KR4_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KR4_IMG2_SIZE - IMAGE_HEADER_LEN
PSRAM_BASE到PSRAM_DSP_START之间的空间依次分配给 TZ 区域(KM4_IMG3)、KM4_IMG2 以及 KR4_IMG2。如需调整空间分配,请通过KM4_PSRAM_TZ_SIZE``(由 ``CONFIG_TZ_S_SIZE控制)调整 TZ 区域大小,通过PSRAM_KM4_IMG2_SIZE调整 KM4_IMG2 的大小,剩余的空间将全部分配给 KR4_IMG2。PSRAM_DSP_START到PSRAM_END之间空间分配给 DSP 使用,可根据实际 PSRAM 容量调整PSRAM_END的值。PSRAM_END之后的空间(如有)可作为拓展 heapxxx_PSRAM_HEAP_EXT使用,默认未启用。
BD_RAM
在 ameba_layout.ld 中有如下定义:
KM4_BD_RAM (rwx) : ORIGIN = 0x20014020, LENGTH = 0x2001B000 - 0x20014020
KM0_BD_RAM (rwx) : ORIGIN = 0x23002020, LENGTH = 0x2301FD00 - 0x23002020
BD_PSRAM
在 ameba_layout.ld 中有如下定义:
#if CONFIG_IMG2_FLASH
KM4_BD_DRAM (rwx) : ORIGIN = 0x60000020, LENGTH = 0x60060000 - 0x60000020
CA32_BL3_DRAM_NS (rwx) : ORIGIN = 0x60094000, LENGTH = PSRAM_END - 0x60094000
#else
KM4_BD_RAM_S (rwx) : ORIGIN = 0x70160020, LENGTH = 0x70180000 - 0x70160020
CA32_BL3_DRAM_NS (rwx) : ORIGIN = 0x60300000, LENGTH = 0x60700000 - 0x60300000
#endif
BD_RAM
在 ameba_layout.ld 中有如下定义:
#define KM4TZ_RAM_TZ_MIN_SIZE KBYTES(4)
#if defined(CONFIG_IMG3_SRAM) || defined(CONFIG_IMG3_FLASH)
#define KM4TZ_RAM_TZ_SIZE KBYTES(CONFIG_TZ_S_SIZE)
#elif defined(CONFIG_IMG3_PSRAM)
#define KM4TZ_RAM_TZ_SIZE KM4TZ_RAM_TZ_MIN_SIZE /* minimum SRAM-TZ for .data/.bss */
#else /* undefine trustzone */
#define KM4TZ_RAM_TZ_SIZE KBYTES(0)
#endif
#define RAM_KM4NS_IMG2_SIZE KBYTES(96)
#define KM4TZ_IMG2_RAM_START (KM4TZ_RAM_TZ_START + KM4TZ_RAM_TZ_SIZE)
#define KM4NS_IMG2_RAM_START (SRAM_END - RAM_KM4NS_IMG2_SIZE)
KM4TZ_BD_RAM (rwx) : ORIGIN = KM4TZ_IMG2_RAM_START + IMAGE_HEADER_LEN, \
LENGTH = KM4NS_IMG2_RAM_START - KM4TZ_IMG2_RAM_START - IMAGE_HEADER_LEN
KM4NS_BD_RAM (rwx) : ORIGIN = KM4NS_IMG2_RAM_START + IMAGE_HEADER_LEN, LENGTH = RAM_KM4NS_IMG2_SIZE - IMAGE_HEADER_LEN
除 Fixed RAM 以及 IMG1 所占用空间外,剩余的 SRAM 空间分配给 KM4TZ_IMG3, KM4NS_IMG2, 以及 KM4TZ_IMG2。
ameba_layout.ld中已通过KM4TZ_RAM_TZ_SIZE定义 KM4TZ_IMG3 占用的 SRAM 空间大小(由 CONFIG_TZ_S_SIZE 控制),通过RAM_KM4NS_IMG2_SIZE定义 KM4NS_IMG2 占用的 SRAM 大小,剩余的空间用作 KM4TZ_IMG2,用户可以根据实际需求调整相应的值。
BD_PSRAM
在 ameba_layout.ld 中有如下定义:
#define PSRAM_BASE (0x60000000)
#define PSRAM_END (0x60400000)
#define KM4TZ_PSRAM_TZ_SIZE KBYTES(CONFIG_TZ_S_SIZE)
#define PSRAM_KM4TZ_IMG2_SIZE (KBYTES(3220) - KM4TZ_PSRAM_TZ_SIZE)
#define KM4TZ_IMG2_PSRAM_START (KM4TZ_PSRAM_TZ_START + KM4TZ_PSRAM_TZ_SIZE)
#define KM4NS_IMG2_PSRAM_START (KM4TZ_IMG2_PSRAM_START + PSRAM_KM4TZ_IMG2_SIZE)
#define PSRAM_KM4NS_IMG2_SIZE (PSRAM_END - KM4NS_IMG2_PSRAM_START)
KM4TZ_BD_PSRAM (rwx) : ORIGIN = KM4TZ_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KM4TZ_IMG2_SIZE - IMAGE_HEADER_LEN /* KM4TZ BD PSRAM : Tz off,3220K; TZ on, 3156K */
KM4NS_BD_PSRAM (rwx) : ORIGIN = KM4NS_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KM4NS_IMG2_SIZE - IMAGE_HEADER_LEN
PSRAM 的空间依次分配给 KM4TZ_IMG3, KM4TZ_IMG2, KM4NS_IMG2,PSRAM 的起始和结束地址分别由
PSRAM_BASE和PSRAM_END定义,默认大小为 4MB。 起始地址PSRAM_BASE为固定值,用户可根据实际 PSRAM 大小调整结束地址PSRAM_END的值 。如需调整
PSRAM_BASE到PSRAM_END之间的空间分配,请通过KM4TZ_PSRAM_TZ_SIZE调整 KM4TZ_IMG3 的大小(由 CONFIG_TZ_S_SIZE 控制),通过PSRAM_KM4TZ_IMG2_SIZE调整 KM4TZ_IMG2 的大小,剩余的空间将全部分配给 KM4NS_IMG2。PSRAM_END之后的空间(如有)可作为拓展 heapxxx_PSRAM_HEAP_EXT使用,默认未启用。
BD_RAM
在 ameba_layout.ld 中有如下定义:
#define KM4NS_IPC_RAM_SIZE 512 /* 512B */
#if defined (CONFIG_SOLO)
#define RAM_KM4NS_IMG2_SIZE KBYTES(184)
#define RAM_KM4NS_BOOT_SIZE KBYTES(8)
#elif defined (CONFIG_WHC_DEV_FLASH_BOOT)
#define RAM_KM4NS_IMG2_SIZE KBYTES(0)
#define RAM_KM4NS_BOOT_SIZE KBYTES(0)
#else
#define RAM_KM4NS_IMG2_SIZE KBYTES(192) /* include 512B IPC RAM */
#define RAM_KM4NS_BOOT_SIZE KBYTES(0)
#endif
#if defined(CONFIG_IMG3_SRAM) || defined(CONFIG_IMG3_FLASH)
#define KM4TZ_RAM_TZ_SIZE KBYTES(TZ_S_SIZE)
#define KM4TZ_MSP_RAM_NS_SIZE KBYTES(2)
#elif defined(CONFIG_IMG3_PSRAM)
#define KM4TZ_RAM_TZ_SIZE KBYTES(4) /* minimum SRAM-TZ for .data/.bss in PSRAM mode */
#define KM4TZ_MSP_RAM_NS_SIZE KBYTES(2)
#else /* undefine trustzone */
#define KM4TZ_RAM_TZ_SIZE KBYTES(0)
#define KM4TZ_MSP_RAM_NS_SIZE KBYTES(0)
#endif
#define KM4TZ_IMG2_RAM_START (KM4TZ_MSP_RAM_NS_START + KM4TZ_MSP_RAM_NS_SIZE)
#define KM4NS_BOOT_RAM_START (SRAM_END - RAM_KM4NS_BOOT_SIZE)
#define KM4NS_IMG2_RAM_START (KM4NS_BOOT_RAM_START - RAM_KM4NS_IMG2_SIZE)
KM4TZ_BD_RAM_TZ (rwx) : ORIGIN = KM4TZ_RAM_TZ_START + IMAGE_HEADER_LEN, LENGTH = KM4TZ_RAM_TZ_SIZE - IMAGE_HEADER_LEN
KM4TZ_MSP_RAM_NS (rw) : ORIGIN = KM4TZ_MSP_RAM_NS_START, LENGTH = KM4TZ_MSP_RAM_NS_SIZE
KM4TZ_BD_RAM (rwx) : ORIGIN = KM4TZ_IMG2_RAM_START + IMAGE_HEADER_LEN, LENGTH = KM4NS_IMG2_RAM_START - KM4TZ_IMG2_RAM_START - IMAGE_HEADER_LEN
KM4NS_IPC_RAM (rwx) : ORIGIN = KM4NS_IMG2_RAM_START, LENGTH = KM4NS_IPC_RAM_SIZE
KM4NS_BD_RAM (rwx) : ORIGIN = KM4NS_IMG2_RAM_START + KM4NS_IPC_RAM_SIZE + IMAGE_HEADER_LEN, LENGTH = RAM_KM4NS_IMG2_SIZE - KM4NS_IPC_RAM_SIZE - IMAGE_HEADER_LEN
除 Fixed RAM 以及 IMG1 所占用空间外,剩余的 SRAM 空间分配给 KM4TZ_IMG3, KM4NS_IMG2, 以及 KM4TZ_IMG2。SRAM 中 KM4TZ_IMG3 的大小由
KM4TZ_RAM_TZ_SIZE定义,KM4NS_IMG2 的大小由RAM_KM4NS_IMG2_SIZE定义,剩余的空间用作 KM4TZ_IMG2,用户可以根据实际需求调整相应的值。
BD_PSRAM
在 ameba_layout.ld 中有如下定义:
#define PSRAM_BASE (0x60000000)
#define PSRAM_END (0x60400000)
#if defined(CONFIG_IMG3_SRAM) || defined(CONFIG_IMG3_FLASH)
#define KM4TZ_PSRAM_TZ_SIZE KBYTES(0)
#elif defined(CONFIG_IMG3_PSRAM)
#define KM4TZ_PSRAM_TZ_SIZE KBYTES(TZ_S_SIZE)
#else /* undefine trustzone */
#define KM4TZ_PSRAM_TZ_SIZE KBYTES(0)
#endif
#define KM4TZ_PSRAM_TZ_START (PSRAM_BASE)
#define PSRAM_KM4TZ_IMG2_SIZE (KBYTES(3220) - KM4TZ_PSRAM_TZ_SIZE)
#define KM4TZ_IMG2_PSRAM_START (KM4TZ_PSRAM_TZ_START + KM4TZ_PSRAM_TZ_SIZE)
#define KM4NS_IMG2_PSRAM_START (KM4TZ_IMG2_PSRAM_START + PSRAM_KM4TZ_IMG2_SIZE)
#define PSRAM_KM4NS_IMG2_SIZE (PSRAM_END - KM4NS_IMG2_PSRAM_START)
KM4TZ_BD_PSRAM_TZ (rwx) : ORIGIN = KM4TZ_PSRAM_TZ_START + IMAGE_HEADER_LEN, LENGTH = KM4TZ_PSRAM_TZ_SIZE - IMAGE_HEADER_LEN
KM4TZ_BD_PSRAM (rwx) : ORIGIN = KM4TZ_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KM4TZ_IMG2_SIZE - IMAGE_HEADER_LEN
KM4NS_BD_PSRAM (rwx) : ORIGIN = KM4NS_IMG2_PSRAM_START + IMAGE_HEADER_LEN, LENGTH = PSRAM_KM4NS_IMG2_SIZE - IMAGE_HEADER_LEN
PSRAM 的空间依次分配给 KM4TZ_IMG3, KM4TZ_IMG2, KM4NS_IMG2,PSRAM 的起始和结束地址分别由
PSRAM_BASE和PSRAM_END定义,默认大小为 4MB。 起始地址PSRAM_BASE为固定值,用户可根据实际 PSRAM 大小调整结束地址PSRAM_END的值 。如需调整
PSRAM_BASE到PSRAM_END之间的空间分配,请通过KM4TZ_PSRAM_TZ_SIZE``(由 ``TZ_S_SIZE控制)调整 TZ 区域(KM4TZ_IMG3)的大小;PSRAM_KM4TZ_IMG2_SIZE由 3220K 减去 TZ 大小自动推算;剩余空间分配给 KM4NS_IMG2。PSRAM_END之后的空间(如有)可作为拓展 heapxxx_PSRAM_HEAP_EXT使用,默认未启用。
本 SDK 未定义 BD_RAM 区域,但用户仍可通过调整相关变量来修改各 CPU 的内存分配。
SRAM
在 ameba_layout.ld 中有如下定义:
NP_SSRAM (rwx) : ORIGIN = NP_SSRAM_ORIGIN, LENGTH = NP_SSRAM_LENGTH
NP_SSRAM_LOADER_S (rwx) : ORIGIN = NP_SSRAM_LOADER_S_ORIGIN, LENGTH = NP_SSRAM_LOADER_S_LENGTH
如需扩大 NP_SSRAM,可缩减 NP_SSRAM_LOADER_S 的大小,并将释放出的空间并入 NP_SSRAM。
如需缩减 NP_SSRAM_LOADER_S,请修改 component/soc/amebapro3/fwlib/include/ameba_layout.h 中的 NP_SSRAM_LOADER_S_LENGTH。
然后更新 NP_SSRAM_ORIGIN 和 NP_SSRAM_LENGTH 以使用扩展后的空间。
请确保更新后的内存布局与其他区域不发生重叠。
PSRAM
在 ameba_layout.ld 中有如下定义:
NP_PSRAM (rwx) : ORIGIN = NP_PSRAM_ORIGIN, LENGTH = NP_PSRAM_LENGTH
VP_PSRAM (rwx) : ORIGIN = VP_PSRAM_ORIGIN, LENGTH = VP_PSRAM_LENGTH
用户可通过修改上述变量来调整 NP_PSRAM 和 VP_PSRAM 的大小。
请确保 NP_PSRAM 和 VP_PSRAM 的总大小保持不变。
DRAM
在 ameba_layout.ld 中有如下定义:
AP_DDR_RO (rwx) : ORIGIN = AP_DDR_RO_ORIGIN, LENGTH = AP_DDR_RO_LENGTH
AP_DDR (rwx) : ORIGIN = AP_DDR_ORIGIN, LENGTH = AP_DDR_LENGTH
AP_DDR_STK (rwx) : ORIGIN = AP_DDR_STK_ORIGIN, LENGTH = AP_DDR_STK_LENGTH
EN_DDR (rwx) : ORIGIN = EN_DDR_ORIGIN, LENGTH = EN_DDR_LENGTH
VP_DDR (rwx) : ORIGIN = VP_DDR_ORIGIN, LENGTH = VP_DDR_LENGTH
TG_DDR (rwx) : ORIGIN = TG_DDR_ORIGIN, LENGTH = TG_DDR_LENGTH
NN_DDR (rwx) : ORIGIN = NN_DDR_ORIGIN, LENGTH = NN_DDR_LENGTH
调整 DDR 区域时,需确保 VP(视频处理器)、编码器及神经网络引擎仍有足够的资源可用。
堆内存(Heap)
调整 HEAP 大小
BD_RAM 和 BD_PSRAM 加载完静态区域后的剩余空间都将作为 heap 使用,因此可通过调整 BD_RAM 和 BD_PSRAM 的区域来扩大或缩小对应 MCU 的 heap 空间,调整方法参考 BD_RAM 和 BD_PSRAM
将空闲的 PSRAM 地址定义到
xxx_PSRAM_HEAP_EXT以使能 PSRAM_HEAP_EXT 区域:默认的 PSRAM_HEAP_EXT 的区域为无效值:
xxx_PSRAM_HEAP_EXT (rwx) : ORIGIN = 0x6FFFFFFF, LENGTH = 0x6FFFFFFF - 0x6FFFFFFF /* PSRAM HEAP EXT */
可以将空闲的 PSRAM 区域(如存在, 以
0x60400000 ~ 0x60800000为例)定义到:xxx_PSRAM_HEAP_EXT (rwx) : ORIGIN = 0x60400000, LENGTH = 0x60800000 - 0x60400000 /* PSRAM HEAP EXT */
备注
可以在
build_xxx/build/project_xx/image/target_img2.map中查看__bdram_heap_buffer_size__,__psram_heap_buffer_size__,__psram_heap_extend_size__来获取对应 HEAP 区域的实际空间。当 menuconfig 选中 ALL PSRAM USED FOR APPLICATION HEAP 时, PSRAM_BDRAM 与 PSRAM_HEAP_EXT 的定义无效,PSRAM 的整个区域将直接划分给 application 的 heap 使用。
API 参考
MALLOC_TYPES
typedef enum {
TYPE_TCM = 0,
TYPE_SRAM,
TYPE_DRAM,
TYPE_ALL
} MALLOC_TYPES;
内存类型:
- TYPE_TCM:
可从 TCM, SRAM, DRAM 类型的内存中申请(如有), 即可以申请从
0x00000000开始的内存地址。- TYPE_SRAM:
不可从 TCM 中申请内存,仅可从 SRAM, DRAM 中申请(如有),即可以申请从
0x20000000开始的内存地址。- TYPE_DRAM:
不可从 TCM,SRAM 中申请内存,仅可从 DRAM 中申请(如有),即可以申请从
0x60000000开始的内存地址。- TYPE_ALL:
无限制,可以申请从
0x00000000开始的内存地址。
malloc
void *rtos_mem_malloc(uint32_t size);
从初始化好的 heap 区域中申请一块内存空间,无内存类型限制。
参数:
- size:
申请内存块的大小
返回值: 指向内存块起始地址的指针
void *rtos_heap_types_malloc(uint32_t size, MALLOC_TYPES type);
从初始化好的 heap 区域中申请一块内存空间,仅可申请指定内存类型的内存块。
参数:
- size:
申请内存块的大小
- type:
内存类型
返回值: 指向内存块起始地址的指针
zmalloc
void *rtos_mem_zmalloc(uint32_t size);
从初始化好的 heap 区域中申请一块内存空间,并将分配的内存初始化为 0。无内存类型限制。
参数:
- size:
申请内存块的大小
返回值: 指向内存块起始地址的指针
void *rtos_heap_types_zmalloc(uint32_t size, MALLOC_TYPES type);
从初始化好的 heap 区域中申请一块内存空间,并将分配的内存初始化为 0。仅可申请指定内存类型的内存块。
参数:
- size:
申请内存块的大小
- type:
内存类型
返回值: 指向内存块起始地址的指针
calloc
void *rtos_mem_calloc(uint32_t elementNum, uint32_t elementSize);
从初始化好的 heap 区域中申请一块内存空间,用于存储 num 个大小为 size 的元素,并将分配的内存初始化为 0。无内存类型限制。
参数:
- elementNum:
元素数量
- elementSize:
单个元素的大小
返回值: 指向内存块起始地址的指针
void *rtos_heap_types_calloc(uint32_t elementNum, uint32_t elementSize, MALLOC_TYPES type);
从初始化好的 heap 区域中申请一块内存空间,用于存储 num 个大小为 size 的元素,并将分配的内存初始化为 0。仅可申请指定内存类型的内存块。
参数:
- elementNum:
元素数量
- elementSize:
单个元素的大小
- type:
内存类型
返回值: 指向内存块起始地址的指针
realloc
void *rtos_mem_realloc(void *ptr, uint32_t new_size);
调整之前分配的内存块的大小。如果新的内存块大于原内存块,新增部分的内容不会被初始化。若无法在原位置扩展,则会尝试移动整个内存块到新位置并释放旧内存。无内存类型限制。
参数:
- ptr:
指向已分配内存块的指针
- new_size:
新的内存块大小
返回值: 指向重新分配后的内存块起始地址的指针,失败时返回 NULL(原始内存未释放)
void *rtos_heap_types_realloc(void *ptr, uint32_t new_size, MALLOC_TYPES type);
调整之前分配的内存块的大小。如果新的内存块大于原内存块,新增部分的内容不会被初始化。若无法在原位置扩展,则会尝试移动整个内存块到新位置并释放旧内存。仅可申请指定内存类型的内存块。
参数:
- ptr:
指向已分配内存块的指针
- new_size:
新的内存块大小
- type:
内存类型
返回值: 指向重新分配后的内存块起始地址的指针,失败时返回 NULL(原始内存未释放)
free
void rtos_mem_free(void *pbuf);
void rtos_heap_types_free(void *pbuf);
释放内存块。
参数:
- pbuf:
指向带释放内存块起始地址的指针
返回值: 无