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

在MCU的实际使用过程中,我们一般会将程序放在FLASH中运行,但有时候需要同时操作falsh或者需要更好的实时性,程序运行的速度更快,这时我们就可以将这代码放到RAM中运行。

将代码放在RAM中又可以分为将.C文件放入RAM中以及将部分函数放在RAM中。

在这里我们以SWM190为例给大家简单介绍一下在KEIL环境中如何让程序运行在RAM上。

1678670811663951.png

SWM190:KEIL环境实现将.C文件在RAM中运行操作方法

以SWM190为例,我们打开SYNWIT公司提供的普通的GPIO工程,编译后查看映射文件(.MAP文件)来查看文件位置。

我们先来看GPIO例程的主要函数,如下图:

2.png

接着通过MAP文件看main.c文件在falsh中运行的情况,如下图可以看出main.c文件编译后的地址在以0x00000000为首地址的flash中:

3.png

将文件放在RAM中常用的方法有两种,我们以将main.c文件放到RAM中为例:

方法一、快速将.c文件放入RAM

1、 点击APP中的想要放置在RAM中的文件,右键然后单击烟花棒(Options for File ‘main.c’)

4.png

2、 点击Code/Const,选择IRAM1[0x20000000-0x20004FFF]

5.png

3、 点击OK按钮并编译

6.png

4、此时可以看到main.c文件上有个*,意味着我们已经成功将main.c文件放在了RAM中

7.png

也可通过查看.map文件确认main.c文件的位置,如下图所示,可以看出来main文件的地址变为0x20000000开始的RAM地址。

8.png

方法二、修改.cst文件

1、在取消勾选Use Memory Layout Form Target Dialog后会出现出现一个.sct文件,点击Edit可直接对该文件进行修改。

9.png

打开文件后内容如下:

10.png

2、在.sct文件中,将main.o放在RW_IRAM1执行区域(0x20000000-0x00002000),修改后如下:

11.png

3、点击编译按钮,编译器会自动将main.c文件放到RAMCODE所在0x20000000开始的区域,结果如下图所示,main文件的地址变为0x20000000开始的RAM地址。

12.png

1678671014528120.png

SWM190:在KEIL环境实现将部分函数放在RAM中运行操作方法

我们仍然以SWM190为例,我们打开SYNWIT公司提供的普通的GPIO工程,将while1中的函数封装成KeyScan函数,如下图:

14.png

编译后可以通过查看MAP文件来看KeyScan函数的位置,如下图可以看出来KeyScan函数编译后的地址在flash中:

15.png

 然后我们将KeyScan函数放到RAM中,操作如下:

1、与之前一样,在取消勾选Use Memory Layout Form Target Dialog后会出现一个.sct文件,点击Edit可直接对该文件进行修改,也可以将此文件拷贝到APP目录下(防止删除out目录下内容时误删*.sct文件),然后再进行修改。

16.png

2、需要定位到RAM中的KeyScan函数添加前缀

方法一

用#pragma arm section code = “PlaceInRAM”和#pragma arm section将需要放到SRAM中的程序包括起来;

17.png

打开文件后内容如下:

方法二

在需要放到RAM中的函数前,用__attribute__((section("PlaceInRAM ")))声明该函数放在PlaceInRAM section中。

18.png

3、在.sct文件中,定义一个PlaceInRAM的section,放在RW_IRAM1执行区域(0x20000000-0x00002000)。

修改内容如下图所示:

19.png

4、点击编译按钮,编译器会自动将KeyScan函数放到RAMCODE所在0x20000000开始的区域,结果如下图所示,KeyScan函数的地址变为0x20000000开始的RAM地址。

20.png

以上是本次介绍的将代码放到RAM的操作方法,如果SWM芯片用户想更多了解SWM芯片信息请联系华芯微特技术人员。

来源:华芯微特32位MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。