[APM32E0] APM32E030的片内SRAM运行代码

[复制链接]
404|6
口天土立口 发表于 2025-9-6 15:38 | 显示全部楼层 |阅读模式
本帖最后由 口天土立口 于 2025-9-7 18:33 编辑

6619168bbe398401a4.png

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的前段空间为程序空间,剩余部分为读写内存区域。
108768bbe407d34a6.png

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

SRAM.ini的内存如下:
需要设置中断向量表位于SRAM起始地址,RESET复位向量的地址,然后跳转到main函数执行即可
  1. FUNC void Setup (void) {
  2. SP = _RDWORD(0x20000000);                        // Setup Stack Pointer
  3. PC = _RDWORD(0x20000004);                        // Setup Program Counter
  4. _WDWORD(0xE000ED08, 0x20000000);        // Setup Vector Table
  5. }
  6. // LOAD ARM\Blinky.axf INCREMENTAL        // Download
  7. LOAD %L INCREMENTAL                                 // Download
  8. Setup();                                                        // Setup for Running
  9. g, main

在SRAM中运行程序,不能使用LOAD下载程序,而是点击debug按钮,直接由KEIL将程序导入到MCU的SRAM中运行
注意:此种方式运行程序,点击复位程序按钮,将不会产生复位程序效果,需退出debug重新进入才能复位程序重新开始运行


详细工程,请查看附件!
SRAM.zip (2.12 MB, 下载次数: 1)



作业粉碎机 发表于 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 | 显示全部楼层
学习中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

45

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部