工具/软件:TI C/C++编译器
团队、
由于收集和处理的数据数量、我一直在处理一个客户应用、该应用在器件的系统 SRAM 上运行的较少。 我想回收2KB 的存储器映射传感器控制器 AUX RAM、仅供 cm3内核使用、因为其应用中不需要 SCE。
为此、我只需修改链接器.cmd 文件以将该区域添加到存储器中、并将段定义为".scratchpad":
#define AUX_RAM_BASE0x400E0000 #define AUX_RAM_SIZE 0x800 /*系统内存映射*/ 内存 { /*存储在内部闪存中并从内部闪存执行的应用程序*/ 闪存(RX):origin = flash_BASE,length = flash_size /*应用程序使用内部 RAM 进行数据*/ SRAM (rwx):origin = RAM_base,length = RAM_SIZE /*应用程序将 AUX RAM 用于暂存区数据*/ AUX_SRAM (rwx):origin = AUX_RAM_base,length = AUX_RAM_size } //内存中的段分配*/ SECTIONS { .text :>闪存 .const :>闪存 .constdata :>闪存 rodata :>闪存 .cinit :>闪存 .pinit :>闪存 init_array :>闪存 .EMB_TEXT :>闪存 .ccfg :>闪存(高电平) #ifdef __TI_Compiler_version__ #if __TI_Compiler_version__>=15009000 .TI.ramfunc :{}load=flash、run=SRAM、table (BINIT) #endif #endif .data :> SRAM .bss :> SRAM sysmem :> SRAM 堆栈 :> SRAM (高) .nonretenvar:> SRAM 暂存区:> AUX_SRAM }
然后、在应用程序代码中、我现在可以定义缓冲区并使用这一公认的非连续暂存区:
//在(AUX_RAM)暂存区 中分配一些缓冲区#pragma DATA_SECTION (bufferA、".scratchpad) char bufferA[512]; #pragma DATA_SECTION (bufferB、".scratchpad) char bufferB[512];
我可以看到链接器将 AUX_RAM 区域正确分配给.map 文件中的缓冲区
存储器配置 名称 原点长度 已使用 未使用的属性填充 --- ---- ------ ---- ---- -------- 闪存 00000000 00020000 00003420 0001cbe0 R X SRAM 20000000 00005000 0000124b 00003db5 RW X AUX_SRAM 400e0000 00000800 00000400 00000400 RW X
在基于 TI-RTOS 的示例应用(空闲任务和标准电源管理框架)中、这一切似乎都可以正常使用默认配置。
我还需要做什么才能安全地使用它吗? 是否需要任何其他配置要求来安全执行此操作、例如启用 AUX 时钟和电源域、确保 SCE 内核停止(在 AON_WuC_AUXCTL_SCE_EN_RUN_EN_M 中清零、在 AON_WuC_O_AUXCTL 中清零) 或显式启用 AUX RAM 保持(在 ACFG_WuC_AUXUC_RAM_RET_EN 设置)?
感谢您的建议。
此致、
Garry