如何在Keil Scatter加载描述文件中设置自定义内存区域

时间:2018-09-26 07:38:16

标签: linker stm32 scatter keil rom

所以我对我将要使用的自定义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微控制器。

1 个答案:

答案 0 :(得分:1)

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