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

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

3天内不再提示

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

2oON_changxuemc 来源:未知 作者:胡薇 2018-09-10 16:19 次阅读

MCU(如: 基于Cortex V6M 的Cortex M0+ 等) Code 通常运行在内嵌Flash 中。 在某些特定应用场合,需要将部分函数运行于RAM中。为解决次问题,实现了一种解法,具体做法如下:

1. 实现要运行在RAM的 routine, 本rouTIne 使用纯汇编实现, 如:

__asm void program_word2addr(uint32_t addr, uint32_t data)

{

push {r3, r4, r5, lr} ;save some regsiters

/*your code for this rouTIne*/

pop {r3, r4, r5, pc}

}

2. 编译时,采用code 与运行位置无关的编译选项 如 (Keil--apcs /ropi/rwpi), 生成 *.axf;

3. 通过fromelf -c 将生成 *.axf 反汇编,找到对应program_word2addr 实现部分, 并将rouTIne 对应的binary code Copy 到所要应用的 Code 中,以只读数组的形式出现:

如:

const staic uint16_t s_flashProg2AddressCode[16] = {...., ....}

4. 定义 一个全局数组, 如 staTIc uint16_t g_code[16], size正好等于

s_flashProg2AddressCode的长度;

5. 定义一个函数指针, 如 static void (*callFlashPrg2Address)(uint32_t addr, uint32_t data)

6. 定义一个函数实现将Code 运行与 RAM如:

void run_prgcode_onram(uint32_t addr, uint32_t data)

{

memcpy(g_code,s_flashProg2AddressCode,32 );

callFlashPrg2Address = (void (*)(uint32_t addr, uint32_t data))((uin32_t)g_code + 1);

callFlashPrg2Address (address, data);

}

run_prgcode_onram, 便可以将program_word2addr 运行于RAM中。

callFlashPrg2Address = (void (*)(uint32_t addr, uint32_t data))((uin32_t)g_code + 1); +1 的目的,时由于运行平台为 Cortex V6M , 采用的thumb指令集,根据ARMSpec 要 求完成。

callFlashPrg2Address (address, data); 则是实现RAM运行program_word2addr 的关键所在。

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

    关注

    146

    文章

    16011

    浏览量

    343536
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1318

    浏览量

    113698

原文标题:如何将MCU中部分函数运行于RAM中

文章出处:【微信号:changxuemcu,微信公众号:畅学单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TC265如何将特定函数挪至RAM运行

    目前在做TCC265的bootloader,需要把操作flash的代码挪至RAM运行。目前根据资料尝试过在初始化阶段通过memcopy函数
    发表于 02-19 08:33

    如何将bootloader代码从flash搬到RAM运行

    如何将bootloader 代码从flash 搬到RAM 运行
    发表于 04-01 07:10

    如何将bootloader代码从flash搬到RAM运行

    如何将bootloader 代码从flash 搬到RAM 运行
    发表于 04-03 07:14

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

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

    请问如何将lib内的函数拷贝到RAM运行

    本帖最后由 一只耳朵怪 2018-6-6 15:40 编辑 尊敬的老师好我的问题还是如何将lib内的函数拷贝到RAM运行。我们项目
    发表于 06-06 00:16

    请问F28M35x如何将flash中部分程序加载到ram运行

    求教一个问题:如何将flash部分程序加载到ram运行?因F28M35x片内
    发表于 08-20 06:16

    MCU部分函数运行RAM的方法

    MCU(如: 基于Cortex V6M 的Cortex M0+ 等) Code 通常运行在内嵌Flash 。 在某些特定应用场合,需要将部分函数
    发表于 07-12 08:34

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

    “__ramfunc”关键字来声明将某个函数放在 RAM 运行函数使用该关键字声明后,编译器会将函数
    发表于 10-31 14:09

    【每日一知识点】IAR 下如何将程序拷贝在 RAM 运行,你知道怎么做吗?

    __ramfuncIAR 中提供了关键字来声明将某个函数放在 RAM 运行。该函数用关键字__ramfunc 声明后,编译器
    发表于 03-22 13:34

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

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

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

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

    如何将MCU部分函数运行RAM

    MCU(如: 基于Cortex V6M 的Cortex M0+ 等) Code 通常运行在内嵌Flash 中。 在某些特定应用场合,需要将部分函数
    发表于 09-06 17:13 1715次阅读

    MCU部分函数运行RAM中解析

    MCU(如: 基于Cortex V6M 的Cortex M0+ 等) Code 通常运行在内嵌Flash 中。 在某些特定应用场合,需要将部分函数
    发表于 09-22 09:00 1537次阅读

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

    MCU 异于 资源丰富的linux 平台。 MCU(如: 基于Cortex V6M 的Cortex M0+ 等) Code 通常运行在内嵌Flash 中。 在某些特定应用场合,需要将部分
    发表于 10-18 17:44 483次阅读

    如何将MCU部分函数运行RAM

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