工具/软件:
尊敬的专家:
我需要选择 AWRL6844中的 RAM 部分作为保留内存、以便它在热复位后继续保留数据。
哪个 RAM 块适合用于此目的? 如何实现这一目标? 请给我一些建议。
谢谢
Rick
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
嗨、Rick、
最好使用其中一个 DSS 共享存储器、因为这些存储器不由 RBL 初始化、并且不应在重新进入 RBL 时被清除。 注意:应用程序将负责在使用前通过 SOC_memoryInit 初始化存储器、因此此处应使用未初始化的段、例如.bss。
假设 SFLASH 中存储了单个 appimage、您可以将.bss 分配给 DSS 共享存储器、给器件上电并运行应用程序、该应用程序应初始化 DSS 共享存储器、然后将数据存储在.bss 中、此时会触发 SOC_WarmResetWthoutEclipse、然后重新加载应用程序、检查是否触发了热复位、如果触发了热复位、否则不再次初始化.bss 或将其清除。
有关如何利用共享内存的更多信息、它们可以参考 SDK 中的共享内存使用示例文档。
他们是否尝试交换 appimages? 如果是、他们查看下的 SBL Lite 示例可能会有所帮助 \examples\drivers\boot\sbl_lite。
如果任何此类信息有用、请告诉我。
此致、
Kristien
尊敬的 Kristien:
消息流 SoC_WarmResetWithoutEclipse 对于热复位、仍会清除共享存储器。 但是、使用 SoC_WarmResetWithEclipse 不。
RBL 似乎正在清除或覆盖相应的 RAM。 程序基于空工程、因此没有用于清除存储器的应用函数。 例如、此处不调用 SOC_memoryInit。
这是什么原因造成的? 您能更准确地告诉我正在使用哪个 RAM 吗?
我们使用的 RAM 区域如下:
Rick
嗨、Rick、
进一步检查代码后、.bss 段将在程序重新启动时始终归零。 您可以在_c_int00中看到、我们调用_system_pre_init、将.bss 存储器设置为零、从而有效地将其清除。 您可以删除此初始化、但这可能会导致意外行为。
为什么客户正尝试在重置过程中保留数据? 他们是否尝试交换应用图像并使用另一个应用图像中的一个应用图像中的数据? 也许、如果我了解这些变更背后的意图、我们还有另一种方法可以解决这些限制。
此致、
Kristien
尊敬的 Kristien:
客户的冷启动和热复位执行 SBL 过程不同。 需要在 SBL 和应用之间传递数据、以了解需要执行哪些 SBL 进程、因此必须保留相关数据。
.bss 段似乎没有被清零。 出于某种原因、_system_pre_init 中的 bss_size 始终为0、并且__bss_start 和__bss_end 的地址相同。 如下图所示:
RBL 似乎已清除相关的 RAM。