我想知道是否有办法获取用于播种RAM变量初始值的ROM地址?给定一个语句static uint32_t foo = 0x12345678;,初始值0x12345678作为ROM存在于某处作为初始值&foo.在某个时间点,我希望能够重置foo其初始状态的值.
我可以创建第二个const static uint32_t initial_foo = 0x12345678;要使用的变量,但这会使为此用例存储变量所需的ROM数据空间加倍.
&foo从RAM开头的偏移量(或者更具体地说&_srelocate,参见下面的链接描述文件)是否可以与ROM空间中的一个符号可靠地相关联?
下面是ARM/GNU C链接器v 6.3.1脚本的选定部分.
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
SEARCH_DIR(.)
/* Memory Spaces Definitions */
MEMORY
{
rom (rx) : ORIGIN = 0x00400000, LENGTH = 0x00100000
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000
}
/* The stack size used by the application. NOTE: you need to adjust according to your application. */
__stack_size__ = DEFINED(__stack_size__) …Run Code Online (Sandbox Code Playgroud)