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

    文章

    16977

    浏览量

    350215
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1367

    浏览量

    114517
  • 函数
    +关注

    关注

    3

    文章

    4303

    浏览量

    62411
  • keil
    +关注

    关注

    68

    文章

    1211

    浏览量

    166661
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68325

原文标题: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

    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运行的办法

    通过调用 ToggleLED 函数来翻转 LED2 亮灭将通过多种方法将这段代码放在 RAM运行
    发表于 01-14 15:50 7次下载

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

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

    MCU部分函数运行RAM 的具体方法

    RAM 。 昨天,为解决次问题,实现了一种解法,具体做法如下: 1. 实现运行RAM的 r
    发表于 10-18 17:44 664次阅读

    使用KEIL的时候如何让程序RAM运行

    STM32F411Nucleo的一个例子来介绍几种让程序RAM运行的方法。该例子,通过调
    发表于 11-19 17:22 14次下载
    使用<b class='flag-5'>KEIL</b>的时候如何让程序<b class='flag-5'>在</b><b class='flag-5'>RAM</b><b class='flag-5'>中</b><b class='flag-5'>运行</b>

    STVDCOSMICRAM运行代码stm8 ram运行程序

    STVDCOSMICRAM运行代码stm8 ram
    发表于 09-17 17:12 12次下载
    <b class='flag-5'>在</b>STVDCOSMIC<b class='flag-5'>在</b><b class='flag-5'>RAM</b><b class='flag-5'>中</b><b class='flag-5'>运行</b><b class='flag-5'>代码</b>stm8 <b class='flag-5'>ram</b><b class='flag-5'>中</b><b class='flag-5'>运行</b>程序

    如何将MCU中部分函数运行RAM

    MCU(如: 基于Cortex V6M 的Cortex M0+ 等) Code 通常运行在内嵌Flash 。在某些特定应用场合,需要将部分函数运行
    发表于 02-11 14:54 2次下载
    如何将<b class='flag-5'>MCU</b>中部分函数<b class='flag-5'>运行</b>于<b class='flag-5'>RAM</b><b class='flag-5'>中</b>

    如何使用ModelSimVHDL实现RAM

    本教程,我们将探索如何使用 ModelSim VHDL 实现 RAM
    发表于 07-29 16:34 2604次阅读
    如何使用ModelSim<b class='flag-5'>在</b>VHDL<b class='flag-5'>中</b><b class='flag-5'>实现</b><b class='flag-5'>RAM</b>