0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

ELEXCON深圳国际电子展 来源:华芯微特 2023-03-16 15:53 次阅读

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

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

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

SWM190

KEIL环境实现将.C文件在RAM中

运行操作方法

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

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

edd07b40-c3cd-11ed-bfe3-dac502259ad0.png

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

edf3965c-c3cd-11ed-bfe3-dac502259ad0.png

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

方法一

快速将.c文件放入RAM

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

edfded82-c3cd-11ed-bfe3-dac502259ad0.png

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

ee22d142-c3cd-11ed-bfe3-dac502259ad0.png

3、点击OK按钮并编译

ee35f57e-c3cd-11ed-bfe3-dac502259ad0.png

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

ee4daba6-c3cd-11ed-bfe3-dac502259ad0.png

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

ee6d6b6c-c3cd-11ed-bfe3-dac502259ad0.png

方法二

修改.cst文件

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

ee7ff5c0-c3cd-11ed-bfe3-dac502259ad0.png

打开文件后内容如下:

ee9667e2-c3cd-11ed-bfe3-dac502259ad0.png

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

eeb9d51a-c3cd-11ed-bfe3-dac502259ad0.png

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

eecf6402-c3cd-11ed-bfe3-dac502259ad0.png                        

SWM190

在KEIL环境实现将部分函数放在

RAM中运行操作方法

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

f0ea5274-c3cd-11ed-bfe3-dac502259ad0.png

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

edf3965c-c3cd-11ed-bfe3-dac502259ad0.png

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

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

f11cff9e-c3cd-11ed-bfe3-dac502259ad0.png

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

方法一

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

f12ba0c6-c3cd-11ed-bfe3-dac502259ad0.png

打开文件后内容如下:

方法二

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

f13daf3c-c3cd-11ed-bfe3-dac502259ad0.png

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

修改内容如下图所示:

f14e7254-c3cd-11ed-bfe3-dac502259ad0.png

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

f15f11f4-c3cd-11ed-bfe3-dac502259ad0.png

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16243

    浏览量

    345544
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1332

    浏览量

    113942
  • 函数
    +关注

    关注

    3

    文章

    4131

    浏览量

    61553
  • keil
    +关注

    关注

    68

    文章

    1197

    浏览量

    165734
  • 代码
    +关注

    关注

    30

    文章

    4601

    浏览量

    67342

原文标题:elexcon2023展商 | MCU之SWM在KEIL环境中实现代码在RAM中运行

文章出处:【微信号:ELEXCON深圳国际电子展,微信公众号:ELEXCON深圳国际电子展】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM8RAM运行遇到的疑问求解

    IAR for STM8 的环境,我把一段代码用 #pragma location=\"MY_RAM_FUNC\" copy到RAM
    发表于 05-07 07:32

    芯海通用 MCU 应用笔记: MDK 开发环境代码重定向到 RAM 执行的几种方法

    。对于多数 MCU 来说 RAM 执行程序的功耗比 FLASH 中小,对于大部分运行时间执
    发表于 05-16 11:58

    KEIL环境下如何让代码 RAM运行

    前言经常遇到有人使用KEIL时需要将部分或者全部程序代码放到RAM运行的问题,现将其总结在本文中。通过STM32F411Nucleo的一个
    发表于 08-04 14:14

    MM32KEIL环境实现部分代码RAM运行

    速度更快,系统有更好的实时性,这时我们可以将这部分代码放到RAM运行本文中小编会通过MM32F073的一个实际例子来给大家介绍
    发表于 03-01 16:44

    程序RAM运行FLASH运行

    写了一个程序RAM运行FLASH运行
    发表于 10-18 14:54

    MZ能够从RAM运行代码

    嗨,我有一些严肃的数学代码200 MHz的PIC32 MZ上运行大约6秒。问题是我一直在网上查看MZ能够从RAM
    发表于 01-17 11:56

    无法STM8S105K6RAM运行Bootloader代码

    无法STM8S105K6RAM运行Bootloader代码以上来自于谷歌翻译以下为原文 Unable to run Bootload
    发表于 04-26 12:43

    IAR小课堂 | 如何将部分程序RAM运行

    实际项目开发,有时候我们需要将一部分程序从 FLASH 拷贝到 RAM 运行,以提高程序运行
    发表于 10-31 14:09

    RAM调试代码的优点缺点是什么?

    RAM调试代码的优点缺点是什么?stm32的启动方式有哪些?
    发表于 11-29 07:53

    stm32 RAM运行代码的方法是什么

    因特殊需要,iap需要做成 可以更新iap代码的,想了想,也只有ram运行代码了, 一般iap代码
    发表于 01-11 08:18

    KEIL如何让程序RAM运行

    STM32F411Nucleo 的一个例子来介绍几种让程序 RAM 运行的方法。该例子
    发表于 09-28 08:19

    单片机MCU如何实现让部分代码运行RAM

    单片机MCU如何实现让部分代码运行RAM
    发表于 10-30 08:26

    请问单片机MCU如何实现让部分代码运行RAM

    单片机MCU如何实现让部分代码运行RAM
    发表于 10-31 08:29

    请问单片机MCU如何实现让部分代码运行RAM

    单片机MCU如何实现让部分代码运行RAM
    发表于 11-02 07:01

    KEIL环境下如何让代码RAM运行

    前言 经常遇到有人使用KEIL时需要将部分或者全部程序代码放到RAM运行的问题,现将其总结在本文中。通过STM32F411Nucleo的一个例子来介绍几种让程序在
    发表于 11-29 15:54 5641次阅读
     <b class='flag-5'>KEIL</b><b class='flag-5'>环境</b>下如何让<b class='flag-5'>代码</b>在 <b class='flag-5'>RAM</b>中<b class='flag-5'>运行</b>