打印
[APM32F0]

APM32F035的片内SRAM运行代码

[复制链接]
351|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 口天土立口 于 2025-5-22 08:49 编辑

#技术资源# #申请原创# @21小跑堂

APM32F035拥有8KB的用户SRAM可使用,因此当需要代码全部在SRAM中运行时,编译出来的代码大小+需要的SRAM运行内存不能超过8KB


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


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


SRAM.ini的内存如下:
需要设置中断向量表位于SRAM起始地址,RESET复位向量的地址,然后跳转到main函数执行即可


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


Full_Flash_Test.zip

313.91 KB

SRAM中运行代码

使用特权

评论回复
沙发
阳光爆裂| | 2025-5-8 09:38 | 只看该作者
这个还能这么玩呀!

使用特权

评论回复
板凳
幻影书记| | 2025-5-9 19:06 | 只看该作者
楼主只给程序分配了3KB的空间呀!
不过,使用新芯片来验证外设的场景下,对flash的保护还是很有意义的

使用特权

评论回复
地板
口天土立口|  楼主 | 2025-5-12 10:07 | 只看该作者
幻影书记 发表于 2025-5-9 19:06
楼主只给程序分配了3KB的空间呀!
不过,使用新芯片来验证外设的场景下,对flash的保护还是很有意义的 ...

程序需求ROM空间不到3KB,所以只需要预留3KB给程序就够用了,按需分配即可。

使用特权

评论回复
5
口天土立口|  楼主 | 2025-5-12 10:08 | 只看该作者
阳光爆裂 发表于 2025-5-8 09:38
这个还能这么玩呀!

如果要完整的测试FLASH的全部容量,这种方式能实现

使用特权

评论回复
6
幻影书记| | 2025-5-12 10:13 | 只看该作者
口天土立口 发表于 2025-5-12 10:07
程序需求ROM空间不到3KB,所以只需要预留3KB给程序就够用了,按需分配即可。 ...

这个程序运行空间要这么苛刻吗?
我感觉打开优化后,时不时的冒出来一些异常情况

使用特权

评论回复
7
口天土立口|  楼主 | 2025-5-12 10:21 | 只看该作者
幻影书记 发表于 2025-5-12 10:13
这个程序运行空间要这么苛刻吗?
我感觉打开优化后,时不时的冒出来一些异常情况 ...

这不是苛刻,只是不浪费容量,嵌入式的可用资源是很有限的,编程要时刻保持勤俭持家的心态,否则产品维护时间越长,剩余可使用的资源就越小,越制约编程风格的自由发挥;
编译的优化等级,需要谨慎使用,带有一定的不确定性。

使用特权

评论回复
8
幻影书记| | 2025-5-12 10:26 | 只看该作者
口天土立口 发表于 2025-5-12 10:21
这不是苛刻,只是不浪费容量,嵌入式的可用资源是很有限的,编程要时刻保持勤俭持家的心态,否则产品维护 ...

应该是一位老程序员了吧!
应该有这个思维,但现在很少有人这么提了

使用特权

评论回复
9
寂静小夜曲| | 2025-5-12 17:46 | 只看该作者
学习了。
在RAM中运行程序也不是很复杂,难度很高的操作。

使用特权

评论回复
10
发光的梦| | 2025-5-13 18:44 | 只看该作者
这个方法真棒。以后我也把测试代码放在SRAM中运行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

12

帖子

0

粉丝