MCU之SWM在KEIL环境中实现代码在RAM中运行
发布时间: 2023-03-15
浏览次数: 43 次

 在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芯片信息请联系华芯微特技术人员。


华芯微特官网

http://www.synwit.cn/


QQ技术交流群

492524359等方式获取最新支持。


21IC论坛

https://bbs.21ic.com/iclist-1130-1.html


elexcon深圳国际电子展由创意时代与博闻创意创立于2004年,已成为备受海内外电子行业关注的年度专业电子展之一,是展示技术实力、拓展行业合作的重要平台。更多展会详情请登录www.bljsleep.com 展位、赞助商及演讲人申请请联系:0755-88311535



联系电话:
0755-88311535

Baidu
map