口天土立口 发表于 2025-9-6 15:38

APM32E030的片内SRAM运行代码

本帖最后由 口天土立口 于 2025-9-7 18:33 编辑



APM32E030的SRAM大小为8KB。
因此当需要代码全部在SRAM中运行时,编译出来的代码大小+需要的SRAM运行内存不能超过8KB。

当需要代码全部运行在SRAM中,KEIL仅需要更改ROM的地址为SRAM区域即可;
如下图所示,程序编译后的代码大小为:2200+212=2412Bytes,即需要0x96C字节的SRAM空间;
运行内存为2052Bytes,即需要0x804个字节的SRAM空间;
需要的总SRAM空间小于8KB,能完全装入SRAM中运行,因此修改代码的ROM空间起始地址为0x20000000,大小为0xC00,SRAM的前段空间为程序空间,剩余部分为读写内存区域。


由于ROM空间指定为SRAM区域,因此程序不能下载到片内FLASH,需要修改KEIL配置,其中有个关键的脚本文件SRAM.ini


SRAM.ini的内存如下:
需要设置中断向量表位于SRAM起始地址,RESET复位向量的地址,然后跳转到main函数执行即可
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中运行程序,不能使用LOAD下载程序,而是点击debug按钮,直接由KEIL将程序导入到MCU的SRAM中运行
注意:此种方式运行程序,点击复位程序按钮,将不会产生复位程序效果,需退出debug重新进入才能复位程序重新开始运行


详细工程,请查看附件!




作业粉碎机 发表于 2025-9-7 13:32

对于需要在SRAM中运行程序的项目,这种配置和方法是非常关键的

阳光爆裂 发表于 2025-9-7 09:14

我怎么觉得楼主发布过这个帖子呢

口天土立口 发表于 2025-9-7 18:31

阳光爆裂 发表于 2025-9-7 09:14
我怎么觉得楼主发布过这个帖子呢

不同的MCU都搞一份,方便有需要的朋友直接取用

阳光爆裂 发表于 2025-9-7 18:44

嘿嘿 那个帖子是不是我第一个顶的帖子呀

心跳回响 发表于 2025-9-7 23:03

这个帖子好棒啊!
这样可以不动硬件的Boot位就可以在SRAM中运行代码了

wangwu1976@ 发表于 2025-9-8 08:09

学习中

DawnFervor 发表于 2025-10-7 17:23

这个方法是直接把程序下载到了SRAM中啊

空灵回声 发表于 2025-10-20 20:11

这个办法也挺好的。可以在不浪费flash的擦写次数前提下调试MCU

水之呢喃 发表于 2025-10-21 19:45

这个帖子是把程序放在SRAM上面启动的
页: [1]
查看完整版本: APM32E030的片内SRAM运行代码