我正在使用 MBD9F126(ARM Cortex R4)微控制器。在那里我将代码闪存到 ROM 中,然后在 RAM 复制后从 RAM 执行代码。我正在使用 Green hills 编译器。在 RAM 复制之前,我正在执行基本的板初始化代码。
LDR r12, ADDRESS_START_PREINIT
BLX r12
ADDRESS_START_PREINIT:DCD Start_PreInit
Start_PreInit 是板卡初始化函数。如果我在 BLX 之后这样给出,它将分支到 RAM 位置。由于 RAM 复制尚未完成,因此它会进入未知区域。
而不是这个如果我在写
bl Start_PreInit
它工作正常,将进入代码的 ROM 位置。我不明白为什么编译器会有这样的行为?
还有 ADDRESS_START_PREINIT:DCD Start_PreInit 。它是在链接期间完成的吗?