打印
[其他]

MM32在KEIL环境中实现部分代码在RAM中运行

[复制链接]
1563|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、简介
在MCU的实际使用过程中,一般的程序是放在FLASH中运行,但有时候我们需要程序的运行速度更快,系统有更好的实时性,这时我们可以将这部分代码放到RAM中运行。在本文中小编会通过MM32F073的一个实际例子来给大家介绍在KEIL环境中如何让程序运行在RAM上。
二、实验
本文的例子建立在一个LED_BLINK 的例程上,通过编译后观察MAP文件来看LED_TOGGE函数的位置。
首先看LED_BLINK 例程的主要函数,如下图:

看LED_TOGGE在FLASH中运行的情况,

可看到函数LED_TOGGE编译后的地址在FLASH中。
然后我们将LED_TOGGE放到SRAM中。
操作步骤:
A、 紧接上面的编译完成后会有一个.sct文件,现在我们需对这个文件进行修改,在linker的目录下进行如下图设置,点击Edit,我们便可对该文件进行修改。

B、在.sct文件中,定义一个RAMCODE的section,放在RW_IRAM1执行区域(0x20000000-0x00002000)。
修改内容如下图所示:

C、方法一:用#pragma ARM section code = “RAMCODE”和#pragma armsection将需要放到SRAM中的程序包括起来;

方法二:在需要放到RAM中的函数前,用__attribute__((section("RAMCODE")))声明该函数放在RAMCODE section中。
  

编译时,编译器会自动将这些函数放到RAMCODE所在0x20000000开始的区域。
D、结果如下图,此时LED_TOGGE编译后的地址在SRAM中的0x20000000开始的区域。

注意事项:
注意该函数中调用到的所有函数也要放到RAMCODEsection中,#pragma arm section code=“RAMCODE ”和#pragma arm section中可以包含多段代码。










使用特权

评论回复
沙发
两只袜子| | 2021-4-12 16:56 | 只看该作者
很好的理论知识贴,收获不少

使用特权

评论回复
板凳
yangjiaxu| | 2021-5-23 18:06 | 只看该作者
这么操作 能快多少?

使用特权

评论回复
地板
734774645| | 2021-5-27 15:52 | 只看该作者
sct文件有相关的教程没,遇到这种操作,我都是不会的,想学习一下。

使用特权

评论回复
5
skyred| | 2021-6-17 17:33 | 只看该作者
一遇到地址内存的,我就头疼,又总想试试。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

558

主题

2431

帖子

4

粉丝