说明:
在我的链接器脚本中,我在 SRAM 的 0x20417F80 处有一个 128 字节的邮箱(RAM 顶部,NOLOAD,不包含在 init/零表中)。我用它来在应用程序启动时将标志从应用程序传递给引导加载程序——这些数据需要保留下来以用于编程标志。
为了阻止启动时的 ECC 初始化循环清除该邮箱,我编辑了 startup_cm7.s 文件中的 RamInit 部分。因此,零循环在邮箱之前停止,而不是进入__INT_SRAM_END:
RamInit:
ldr r0,=__RAM_INIT
cmp r0, 0
beq SRAM_LOOP_END
ldr r0,=MCRGM_DES
ldr r1,[r0]
ldr r2,=MCRGM_DES_F_POR
以及 r1、r1、r2
cmp r1,0
beq NO_INIT_STANDBY_REGION
ldr r1, =__INT_SRAM_START
ldr r2, =__PBL_SBL_MAILBOX_ADDR ; <-- 已编辑(原为 __INT_SRAM_END)
b ZERO_64B_RAM
NO_INIT_STANDBY_REGION:
ldr r1, =__BSS_SRAM_START
ldr r2, =__PBL_SBL_MAILBOX_ADDR ; <-- 已编辑(原为 __INT_SRAM_END)
ZERO_64B_RAM:
通过此修改,当应用程序跳转到引导加载程序时,邮箱可以正确保留。用于编程/刷写
但修改后,待机唤醒功能停止工作了。我的应用程序在 IGN-low 状态下进入待机状态,并且不再唤醒——核心卡住无法恢复。在 rasr[] 0x2040012e
如果我将 RamInit 恢复为默认值(循环在 __INT_SRAM_END 结束),则备用唤醒功能可以再次正常工作,但邮箱将不再保留。
所以这两者直接相关:保留我的邮箱的启动编辑破坏了我的备用唤醒功能。
我的问题:
附件: startup_cm7.s(txt)(编辑了 RamInit),PBL 链接器脚本(txt)(显示邮箱位于 0x20417F80),system.c.
S32DS-ARM S32K312EVB-Q172
你好@Arif9845 ,
我看到您也提交了支持工单;我将通过工单回答您的问题,以免产生任何误解。
此致,
朱利安