linker - 如何在 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
微控制器。
解决方案
您不能将闪存用作 RAM。它是只读存储器。它只能被写入使用非常慢并且必须写入整个页面的特殊例程(我认为无论如何在这个处理器上就是这种情况)。此外,您在编程时不能从同一个闪存页面执行代码(可能根本不会)。运行应用程序时使用闪存作为可写存储器的唯一原因是存储非易失性数据(有更好的方法)或固件更新。
推荐阅读
- ios - UI Button 为 nil,obj c
- ruby - 使用 watir 提交文本字段
- java - 只有 .class 文件的 Java/Android SDK?
- javascript - Json 的字符串路径
- javascript - javascript - 当对象数组完全匹配时如何获取对象数组中的对象的索引
- python - 无法将 python 脚本输出导出到同一个 csv 文件中
- java - 为什么Hibernate源码中没有org.hibernate.hql.antlr包?
- javascript - js中的收银机
- css - ie11忽略css的特定块但不是整个样式表
- javascript - 将数据对象传递给触发事件