更高的执行速度,更灵活的生命周期管理——这便是将代码置于SRAM中运行的直接收益。对于搭载ARM®Cortex®-M0+内核的APM32E030而言,其片上SRAM不仅能存储数据,更能通过精心的链接脚本配置与启动代码初始化,转变为一块高速的代码执行区。本文将引导您完成从理论到实践的跨越,实现APM32E030的SRAM Runcode配置。
资源约束与可行性评估
极海APM32E030片内SRAM为8KB,因此,要实现代码完全在SRAM中运行,编译生成的可执行代码大小及运行时所需堆栈等内存总量不得超过此容量上限。
以下是一个具体示例:
代码段(Code):2200字节
数据段(Data):212字节
合计代码占用空间:2412字节(0x96C)
运行所需动态内存:2052字节(0x804)
以上两项总计未超过8KB,因此具备在SRAM中完整运行的条件。
KEIL工程配置步骤
修改ROM地址映射
将工程的ROM起始地址设置为SRAM起始地址0x20000000,大小设为0xC00(可根据实际代码量调整)。此区域用于存放代码与只读数据,剩余SRAM空间仍作读写内存使用。
更新调试初始化脚本
由于程序已映射至SRAM,需使用专门的调试脚本进行加载。创建或修改SRAM.ini文件,配置关键初始化操作,包括:
设置中断向量表位于SRAM起始地址
正确指向RESET复位向量
跳转至main函数执行
调整调试下载方式
程序不再下载至Flash,而是通过KEIL Debug功能直接加载至SRAM执行。操作时请勿使用“Load”按钮,应直接点击“Debug”开始调试,由KEIL自动完成SRAM的写入与启动。
FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // Setup Stack Pointer
PC = _RDWORD(0x20000004); // Setup Program Counter
_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table
}
// LOAD ARM\Blinky.axf INCREMENTAL // Download
LOAD %L INCREMENTAL // Download
Setup(); // Setup for Running
g, main
注意事项
在SRAM运行模式下,点击“复位”按钮不会重新加载程序。如需重新运行,需退出调试模式后再次进入,以便重新初始化SRAM中的代码。
调试过程中请确保电源稳定,避免因掉电导致SRAM内容丢失而影响调试流程。
通过上述配置,即可充分利用极海APM32E030的SRAM实现更高实时性与灵活性的代码运行方案,尤其适用于对启动速度、实时响应有严苛要求的应用场景。