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

如何让MCU优雅地运行RAM中的程序?

AnalogSynth 2017-01-12 浏览量:1806

/*注:本提问是“向Peter蒎提问,难倒大神,拿京东购物卡”的响应*/


/* 为什么需要在RAM中执行?

 * 1 某些MCU的flash擦写循环次数并不高(例如STM8仅有约100次擦写寿命,MSP430G Valueline系列印象中是typ.1000次),调试时直接在RAM中运行或许能够提供一点点好处;

 * 2 某些MCU的特殊工作情况(例如,实现一个属于自己的Bootloader)可能需要将代码复制到RAM中运行(例如,MSP430G系列)。

 * 3 基于我对ARM架构的不成熟的了解:对于某些高速MCU(例如ARM Cortex-M4 Cypress S6E2CC),虽然Flash加速功能能够实现0-wait-state,但加速缓存仅有16KB。而将代码复制到RAM中后,就能够变相扩展加速缓存,实现真正的0-wait-state运行。

 * 4 Peter蒎是大神,既然数据手册说MCU可以运行RAM中的程序,那就给他制造一点问题;

 *******************************/


优雅指尽量不使用Hack的方式来生成可执行文件,例如用十六进制编辑器编辑二进制文件/使用内联汇编等。


1 将一个存放在Flash中的函数复制到RAM中运行(能否实现这样的函数: int copy_and_run(func_ptr_t ptr),且利用空闲RAM,空闲RAM不足时回到原控制流程位置并返回错误代码)

2 设计一个bootloader,不将串口接收到的程序写入Flash,而是写入RAM,写入完成后运行该程序



/*对MOP的回复*/

/*

 回复了 MOP:According to ARM's website, Cortex-M series processor is eligible to be called as ‘embedded processor’.


"The ARM® Cortex®-M processor family is a range of scalable, energy efficient and easy to use processors that meet the needs of tomorrow’s smart and connected embedded applications. "

*/

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 不是没有这样的用法,有!直接加载到ram,但是缺点是掉电程序丢失,每次上电重新烧写bin。

    但是,什么情况下会这样用?


    1.当处理器在一个很辅助的地位时候,没必要为他专门设计flag。比如各大厂家的transceiver(比如ADI的ad9371,里面的arm core就是这个机理)


    2.某些极端特殊场合



    总之,这些场合此处理器都是在协处理器的地位,一定有其他处理器给他下程序。

    第二,厂家之所以设计flash的原因就在于他们不希望每次上电程序或者重要的数据就丢失!




    • 发布于 2017-01-12
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 这是问题还是讲解?而且没写完?
    • 发布于2017-01-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个样子的话,断电ram中程序不是就没有了吗?然后启动再把所有程序复制到ram中,然后在ram中运行,其实没有太大价值吧


    • 发布于2017-01-12
    • 举报
    • 评论 0
    • 0
    • 0

  • /*注:此提问是对大神提问拿京东卡的一个响应,静候Peter蒎来答题哦*/
    • 发布于2017-01-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 嗯,看了您的回應有點搭不起來,

    1. 應該是講MCU,只要將Function的入口地址和程式碼放到RAM即可,這個可以參考IAP作法,只是拿掉Program Flash部分而已

    2. 應該是講MCU,IAP做法就是先將自己程式碼區塊搬到RAM後,從Main跳到IAP入口開始執行,MPU的話bootloader可用ASM code來實作搬移,即將Uboot搬到DDR再跳到Uboot入口執行

    所以這應該是問單片機(MCU)的問題為主,不太算嵌入式問題(MPU)

    小小解析

    • 发布于2017-01-12
    • 举报
    • 评论 2
    • 0
    • 0
AnalogSynth 回复了 MOP :对于Application Processor(eg. Cortex-A)来说本身程序就该在RAM中运行,在Flash上In-Place运行反而是小概率事件 回复
AnalogSynth 回复了 MOP :According to ARM's website, Cortex-M series processor is eligible to be called as ‘embedded processor’. "The ARM® Cortex®-M processor family is a range of scalable, energy efficient and easy to use processors that meet the needs of tomorrow’s smart and connected embedded applications. " 回复

  • 1:就像 @MOP 所提及的 函数在RAM中运行,其做法和IAP是类似的,只要将PC指针执行RAM中函数执行地址就可以运行,主要的是你存在flash中的函数的执行地址与RAM相关联。

    2:bootloader 也就是一个IAP程序,只是运行的app程序需要关联RAM地址

    3:对于为什么在RAM中执行,可能考虑存放的程序在一个PC 指针无法到达的地方 比如SD卡,在资源稀缺的MCU中一般不会将程序放在RAM中执行。

    4:对bootlader 这种程序一般不会放到RAM中执行

    5:对于RAM资源丰富的MCU,确实可以将flash中的程序放到ram中执行

    6:IAP实现与说明 http://www.openedv.com/thread-11494-1-1.html

    • 发布于2017-01-13
    • 举报
    • 评论 1
    • 0
    • 0
AnalogSynth 回复了 Peter蒎 :那么,有必要/办法将运行于RAM中的目标代码编译成位置无关的吗? 回复

相关问题

问题达人换一批

如何让MCU优雅地运行RAM中的程序?