头像-150283

AnalogSynth

  • 能源电源

个人成就

获得 3 次赞

帮助过6人

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

/*注:本提问是“向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. " */