首页 > 解决方案 > 如何在 Keil Scatter 加载描述文件中设置自定义内存区域

问题描述

所以我对即将使用的自定义 Scatter 文件有疑问。

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00008000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00008000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00002000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

ROM 存储来自0x08000000 ~ 0x08008000. 是否可以设置从其中占用一些空间,例如0x08007C00 ~ 0x08007FFF并将其设置为读写区域?让我们将该内存地址范围作为“用户数据”

我将在我的程序中使用“用户数据”区域作为一个段,在我的主程序运行时可以写入数据,当我关闭并打开设备电源时,我可以加载之前写入该段的数据.

我正在使用循环并将HAL_Flash_Program数据写入0x08007C00. 我必须对 Scatter 文件以及可能对我的 C 文件进行哪些更改才能在我的主程序运行时将数据写入指定的内存区域?

谢谢

*我正在使用STM32F051微控制器。

标签: linkerstm32scatterkeilrom

解决方案


您不能将闪存用作 RAM。它是只读存储器。它只能被写入使用非常慢并且必须写入整个页面的特殊例程(我认为无论如何在这个处理器上就是这种情况)。此外,您在编程时不能从同一个闪存页面执行代码(可能根本不会)。运行应用程序时使用闪存作为可写存储器的唯一原因是存储非易失性数据(有更好的方法)或固件更新。


推荐阅读