[技术相关] SWM在KEIL环境中实现代码在RAM中运行

[复制链接]
1311|12
 楼主| MYMCU2023 发表于 2023-3-9 11:47 | 显示全部楼层 |阅读模式
   以SWM190为例
1、打开GPIO工程,编译后查看映射文件(.MAP文件)来查看文件位置。
1678330885099.png
2、通过MAP文件看main.c文件在falsh中运行的情况,如下图可以看出main.c文件编译后的地址子在以0x00000000为首地址的flash中:
图片2.png
将文件放在RAM中常用的方法有两种,下面将以main.c文件放到RAM中为例:
方法一:快速将.c文件放入RAM
1、 点击APP中的想要放置在RAM中的文件,右键然后单击烟花棒(Options for File ‘main.c’
图片3.png
2、 点击Code/Const,选择IRAM1[0x20000000-0x20004FFF]
图片4.png
3、 点击OK按钮并编译
    4、通过查看.map文件确认main.c文件的位置,如下图所示,可以看出来main文件的地址变为0x20000000开始的RAM地址
图片6.png
方法二修改.cst文件
1、在取消勾选Use Memory Layout Form Target Dialog后会出现出现一个.sct文件,点击Edit可直接对该文件进行修改。
图片7.png
打开文件后内容如下:
图片8.png
2、在.sct文件中,将main.o放在RW_IRAM1执行区域(0x20000000-0x00002000)
修改后如下:
图片9.png
3、点击编译按钮,编译器会自动将main.c文件放到RAMCODE所在0x20000000开始的区域,main文件的地址变为0x20000000开始的RAM地址。
图片10.png
将部分函数放在RAM中运行操作方法
while1中的函数封装成KeyScan函数
图片11.png
编译后可以通过查看MAP文件来看KeyScan函数的位置,如下图可以看出来KeyScan函数编译后的地址再flash中:
图片12.png
将KeyScan函数放到RAM中,操作如下:
1、与上面一样,在取消勾选Use Memory Layout Form Target Dialog后会出现一个.sct文件,点击Edit可直接对该文件进行修改,也可以将此文件拷贝到APP目录下(防止删除out目录下内容时误删*.sct文件),然后再进行修改。
2、需要定位到RAM中的KeyScan函数添加前缀
方法一
#pragma arm section code = PlaceInRAM”和#pragma arm section将需要放到SRAM中的程序包括起来;
图片13.png
方法二
在需要放到RAM中的函数前,用__attribute__((section("PlaceInRAM ")))声明该函数放在PlaceInRAM section中。
图片14.png
3、在.sct文件中,定义一个PlaceInRAMsection,放在RW_IRAM1执行区域(0x20000000-0x00002000)
图片15.png
4、点击编译按钮,编译器会自动将KeyScan函数放到RAMCODE所在0x20000000开始的区域,KeyScan函数的地址变为0x20000000开始的RAM地址。
图片16.png


wutttttt 发表于 2023-3-13 11:56 | 显示全部楼层
写得好很有帮助
chenjun89 发表于 2023-3-21 19:45 来自手机 | 显示全部楼层
学习了,还能这样操作。
zhuanshen 发表于 2023-4-3 16:36 | 显示全部楼层
很全面 学习了
caigang13 发表于 2023-4-3 18:53 来自手机 | 显示全部楼层
实际应用意义不大,RAM太小
tpgf 发表于 2023-4-4 08:10 | 显示全部楼层
请问程序在ram中运行的好处是什么呢

评论

举例一个场景,测试全片擦除flash,这时候,主程序区就可以放在ram。个人觉得是在某些测试的场景用得比较多,对芯片原厂的工程师用处比较大  发表于 2023-4-18 14:55
walker2048 发表于 2023-4-4 08:30 | 显示全部楼层
tpgf 发表于 2023-4-4 08:10
请问程序在ram中运行的好处是什么呢

Flash的速度是跟不上mcu的主频速度的,在规格书或者使用手册里会提到Flash等待周期,而SRAM的运行速度是和MCU主频一致的,在RAM里运行不需要等待。哪怕是有ICache的情况下(缓存不可能100%命中,容量也小),直接在RAM里运行程序始终比Flash里快。
qcliu 发表于 2023-4-4 09:00 | 显示全部楼层
有没有可能程序运行中对数据进行误操作呢
drer 发表于 2023-4-4 11:16 | 显示全部楼层
感觉这样做可以提高一下自己的水平 但是实用性不是很大啊
coshi 发表于 2023-4-4 12:12 | 显示全部楼层
算是一种探讨吧  考虑ram太小 可以把需要高速运行的部分放在里边
kxsi 发表于 2023-4-4 15:04 | 显示全部楼层
不知道以后有没有可能把ram做大呢
wiba 发表于 2023-4-4 15:14 | 显示全部楼层
是不是也只能运行一些比较小的程序啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:广东华芯微特集成电路有限公司
简介:华芯微特是一家由留美归国资深技术团队创立的中国芯片设计公司,是国家高新技术企业。2014年进军MCU产业,专注于32位MCU研发设计,并针对细分市场提供参考解决方案。

1

主题

1

帖子

1

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