• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

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

hhy13315371863 2018-09-08 浏览量:803

MCU 异于 资源丰富的linux 平台。 MCU Code 通常运行在内嵌Flash 中。 在某些特定应用场合,怎么将部分函数运行于RAM 中。

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 代码本来就是运行在ram里的 只是存储的介质可以不同
    • 发布于 2018-09-10
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:10
  • 这个都是代码加载入ram的,或者flash映射到ram地址空间中啊。
    • 发布于2018-09-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 你先把代码搞好,写进RAM再运行
    • 发布于2018-09-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 单片机的代码都要加载到RAM里面去运行的,这个代码可以在flash,也可以在别的存储介质中
    • 发布于2018-09-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 修改ME的下载地址可以让代码在RAM区进行“测试运行”,掉电不保存

    如果要在平时这样做,只能把代码从FLASH刷进RAM里进行

    • 发布于2018-09-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 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_codes_flashProg2AddressCode32 );
    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指令集,根据ARM Spec 要 求完成。


    callFlashPrg2Address (address data); 则是实现RAM运行program_word2addr 的关键所在。
    • 发布于2018-09-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 代码最后都是放在RAM中运行的,运行的效果跟你的存储介质没有什么关系
    • 发布于2018-09-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 单片机的所有运行时数据都保存在ram里面,只是固件放在flash罢了,楼主说的应该是将固件保存在ram里面吧,那就需要更改程序保存bin文件的烧录地址。
    • 发布于2018-09-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先要把的地址映射到RAM中,然后对RAM进行读写操作
    • 发布于2018-10-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 找到函数再Flash中位置的地址,然后根据函数大小读取函数代码,写入到RAM中,RAM中函数地址。
    • 发布于2018-10-17
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

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