LOADING

加载过慢请开启缓存 浏览器默认开启

在RAM中调试

2024/5/1 MCU

在 RAM 中调试的好处?

FLASH 的擦除寿命

需要了解的是FLASH的擦除次数有限,例如:STM32g0xx的擦除耐力大约在10K次。

而每次烧录程序是会对 部分 / 所有 扇区进行擦除然后再写入的,即使10K是一个较大的值,但更具有优势的是把程序放在RAM中运行,并不用担心擦除耐力这个问题。而且,在RAM中烧录程序会非常迅速,因此省去了擦除FLASH操作所带来的时间。

操作步骤

设置启动地址

STM32中可以设置 BOOT引脚 / 选项字节 使MCU在不同的地址区域上电运行。

  • 通过BOOTx来设置启动地址。
  • 通过BOOT选项字节来设置启动地址。

链接设置

虽然设置了MCU上电在RAM中启动,但是需要仔细的是编译之后生成的文件并没有全部正确的链接到RAM所属的地址当中。这时需要修改ld文件,将所有的分区映射到RAM当中。

  • 这里仅演示部分修改。

修改之后,编译输出信息里会观察到FLASH占用为0%

Debug 设置

如果顺利完成上述中设置启动地址链接设置这两步,并且烧录后进行软复位(复位 PC 等寄存器),程序会正常运行,但是看上去似乎和在FLASH中运行没有区别。因为即便是烧录到FLASH中,程序也会“搬移”到RAM中运行,所以大多数情况在RAM或者FLASH中调试结果区别不大。

那如何判断之前的工作是否成功呢?一个有效的办法是在程序运行时,观察PC的值是否在RAM所属的地址区域内。

  • 在示例图中:PC 值为0x20000226,值得高兴的是,这属于RAM的地址。