在MCU的实际使用过程中,我们一般会将程序放在FLASH中运行,但有时候需要同时操作falsh或者需要更好的实时性,程序运行的速度更快,这时我们就可以将这代码放到RAM中运行。
将代码放在RAM中又可以分为将.C文件放入RAM中以及将部分函数放在RAM中。
在这里我们以SWM190为例给大家简单介绍一下在KEIL环境中如何让程序运行在RAM上。
SWM190
KEIL环境实现将.C文件在RAM中
运行操作方法
以SWM190为例,我们打开SYNWIT公司提供的普通的GPIO工程,编译后查看映射文件(.MAP文件)来查看文件位置。
我们先来看GPIO例程的主要函数,如下图:
接着通过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、此时可以看到main.c文件上有个*,意味着我们已经成功将main.c文件放在了RAM中
也可通过查看.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地址。
SWM190
在KEIL环境实现将部分函数放在
RAM中运行操作方法
我们仍然以SWM190为例,我们打开SYNWIT公司提供的普通的GPIO工程,将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文件中,定义一个PlaceInRAM的section,放在RW_IRAM1执行区域(0x20000000-0x00002000)。
修改内容如下图所示:
4、点击编译按钮,编译器会自动将KeyScan函数放到RAMCODE所在0x20000000开始的区域,结果如下图所示,KeyScan函数的地址变为0x20000000开始的RAM地址。
以上是本次介绍的将代码放到RAM的操作方法,如果SWM芯片用户想更多了解SWM芯片信息请联系华芯微特技术人员。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !