打印
[技术相关]

SWM在KEIL环境中实现代码在RAM中运行

[复制链接]
831|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
   以SWM190为例
1、打开GPIO工程,编译后查看映射文件(.MAP文件)来查看文件位置。
2、通过MAP文件看main.c文件在falsh中运行的情况,如下图可以看出main.c文件编译后的地址子在以0x00000000为首地址的flash中:
将文件放在RAM中常用的方法有两种,下面将以main.c文件放到RAM中为例:
方法一:快速将.c文件放入RAM
1、 点击APP中的想要放置在RAM中的文件,右键然后单击烟花棒(Options for File ‘main.c’
2、 点击Code/Const,选择IRAM1[0x20000000-0x20004FFF]
3、 点击OK按钮并编译
    4、通过查看.map文件确认main.c文件的位置,如下图所示,可以看出来main文件的地址变为0x20000000开始的RAM地址
方法二修改.cst文件
1、在取消勾选Use Memory Layout Form Target Dialog后会出现出现一个.sct文件,点击Edit可直接对该文件进行修改。
打开文件后内容如下:
2、在.sct文件中,将main.o放在RW_IRAM1执行区域(0x20000000-0x00002000)
修改后如下:
3、点击编译按钮,编译器会自动将main.c文件放到RAMCODE所在0x20000000开始的区域,main文件的地址变为0x20000000开始的RAM地址。
将部分函数放在RAM中运行操作方法
while1中的函数封装成KeyScan函数
编译后可以通过查看MAP文件来看KeyScan函数的位置,如下图可以看出来KeyScan函数编译后的地址再flash中:
将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中的程序包括起来;
方法二
在需要放到RAM中的函数前,用__attribute__((section("PlaceInRAM ")))声明该函数放在PlaceInRAM section中。
3、在.sct文件中,定义一个PlaceInRAMsection,放在RW_IRAM1执行区域(0x20000000-0x00002000)
4、点击编译按钮,编译器会自动将KeyScan函数放到RAMCODE所在0x20000000开始的区域,KeyScan函数的地址变为0x20000000开始的RAM地址。


使用特权

评论回复

相关帖子

沙发
wutttttt| | 2023-3-13 11:56 | 只看该作者
写得好很有帮助

使用特权

评论回复
板凳
chenjun89| | 2023-3-21 19:45 | 只看该作者
学习了,还能这样操作。

使用特权

评论回复
地板
zhuanshen| | 2023-4-3 16:36 | 只看该作者
很全面 学习了

使用特权

评论回复
5
caigang13| | 2023-4-3 18:53 | 只看该作者
实际应用意义不大,RAM太小

使用特权

评论回复
6
tpgf| | 2023-4-4 08:10 | 只看该作者
请问程序在ram中运行的好处是什么呢

使用特权

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

Flash的速度是跟不上mcu的主频速度的,在规格书或者使用手册里会提到Flash等待周期,而SRAM的运行速度是和MCU主频一致的,在RAM里运行不需要等待。哪怕是有ICache的情况下(缓存不可能100%命中,容量也小),直接在RAM里运行程序始终比Flash里快。

使用特权

评论回复
8
qcliu| | 2023-4-4 09:00 | 只看该作者
有没有可能程序运行中对数据进行误操作呢

使用特权

评论回复
9
drer| | 2023-4-4 11:16 | 只看该作者
感觉这样做可以提高一下自己的水平 但是实用性不是很大啊

使用特权

评论回复
10
coshi| | 2023-4-4 12:12 | 只看该作者
算是一种探讨吧  考虑ram太小 可以把需要高速运行的部分放在里边

使用特权

评论回复
11
kxsi| | 2023-4-4 15:04 | 只看该作者
不知道以后有没有可能把ram做大呢

使用特权

评论回复
12
wiba| | 2023-4-4 15:14 | 只看该作者
是不是也只能运行一些比较小的程序啊

使用特权

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

本版积分规则

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

1

主题

1

帖子

1

粉丝