原理是 startup_stm32xxxx.s 里会清理 ram 区,如果你有初值,那么从 rom 中载入初值。大致是这样的过程。
你给出的图44是一个 mdk 的链接器脚本,可以在此基础上加一个段,使用 UNINIT 标志告诉链接器,这部分软重启时不必初始化,
[C] 纯文本查看 复制代码 LR_IROM1 0x08000000 0x00100000
{
....其他
BL_UINT32 0x20000000 UNINIT 0x00000004 ; bootload共享的指示烧录区,作为内存,掉电重置,非掉电软启动不重置
{
*(.bss.BLFlag)
}
....其他
}
然后将 g_JumpInit 变量放到对应位置。 |