arm - ARM (Cortex M3) 的应用程序内编程如何工作?

标签 arm embedded cortex-m3 stm32

我正在开发一个基于 Cortex-M3 的定制设备,我需要实现应用程序内编程 (IAP) 机制,以便可以在没有 JTAG 的情况下更新设备固件(我们将使用 TFTP 或 HTTP)。虽然 ST Microelectronics 提供的与 IAP 相关的代码示例对我来说已经足够清楚,但我并不真正理解重新刷新的工作原理。

据我了解,指令是由 CPU 通过 ICode 总线(当然还有预取块)从 Flash 中提取的。所以,这是我非常愚蠢的问题:为什么正在运行的程序在重新闪烁时不会被破坏(即更改正在运行的闪存)?

最佳答案

一个常见的解决方案是在闪存中有一个小的保留区域,用于存储实际的闪存程序。下载新固件后,只需跳转到该区域的代码即可。

当然,这个小区域在刷固件的时候不会被覆盖,只能通过其他方式(比如JTAG)来完成。因此,请确保此闪烁程序运行良好。 :)

关于arm - ARM (Cortex M3) 的应用程序内编程如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994648/

相关文章:

c - 此代码段中的索引如何达到 2154? (gcc、嵌入式 C、ARM Cortex M0)

c - 从 if 语句内部声明全局变量 (C)

c++ - ARM:如何获取当前上下文

c - 这个代码是什么意思?

c++ - LPC1700不会从深度 sleep 中醒来

c++ - 对 __cxa_end_cleanup' 的 undefined reference

assembly - STP 中的寄存器存储顺序

arm - 试图了解STM32L4的ADC

linux - Debian 喘息 : how to set noatime parameter for root FS?

arm - 如何使用llvm + clang编译为stm32