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

Linker 如何在Keil District加载描述文件中设置自定义内存区域,linker,stm32,scatter,keil,rom,Linker,Stm32,Scatter,Keil,Rom,因此,我有一个关于我将要使用的自定义散布文件的问题 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00008000

因此,我有一个关于我将要使用的自定义散布文件的问题

; *************************************************************
; *** 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\u Flash\u程序
将数据写入
0x08007C00
的起始内存地址。在主程序运行时,为了将数据写入指定的内存区域,我必须对散点文件和可能的C文件进行哪些更改

谢谢


*我使用的是
STM32F051
微控制器。

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

您好,我想在那个特定的内存区域做的是在主程序运行某些功能时保存(写入)用户设置,然后在设备重新启动时再次加载(读取)这些设置。我还检查了映射文件,
0x08005000~0x08007FFF
未使用……所以我想我可以使用
0x08007C00
对吗?哈哈,我对这个很陌生。但如果你有其他方法做同样的事情,那么我洗耳恭听,谢谢!请参阅处理器的闪存手册。我有一些ST应用程序注释可以帮助您。