小编mje*_*mje的帖子

找到RAM变量的ROM地址

我想知道是否有办法获取用于播种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)

c embedded linker arm

2
推荐指数
1
解决办法
106
查看次数

标签 统计

arm ×1

c ×1

embedded ×1

linker ×1