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.

[参考译文] TMS320F28375S:我可以在从 RAM 运行的引导加载程序结束时清除 RAM 吗

Guru**** 2378650 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1461072/tms320f28375s-can-i-clear-ram-at-the-end-of-a-bootloader-running-from-ram

器件型号:TMS320F28375S

工具与软件:

我有一个从闪存运行的引导加载程序。 最后、此 BL 选择闪存中两个可能的应用(A 或 B)之一并跳转到该应用。 应用程序应该从 RAM 运行。

在跳转之前、这些操作会按顺序完成(BL 中完成的最后一项操作):
WD_DISABLE > init_ram (清除整个 RAM)> 将所选应用从闪存复制到 RAM (A 或 B)>跳转到所选应用的闪存中的起始地址(A 或 B)

这样、所选的应用程序将开始运行(从 RAM)


首次实现此功能时、我决定从闪存而不是 RAM 运行 BL、因为我认为如果从 RAM 运行、在我最后清除整个 RAM 时、BL 本身会崩溃、然后它可能成功跳至所选的应用 A 或 B。当 BL 从闪存运行时、我遇到了非常奇怪的问题(在这里和这里介绍)。 有时工作正常、有时我会随机发生奇怪的行为。

我尝试从 RAM 运行 BL、发现它与我预期的不同、工作正常。  

现在我的问题是:具有此结构并从 RAM 而不是闪存运行 BL 是否安全? 如果可以、那对我来说就是一个解决方案。 但如果您认为它可能并不总是能正常工作、我就必须丢弃这种情况(从 RAM 运行的 BL)、并专注于从闪存运行 BL、并解决  在这种情况下出现的问题。

我应该补充的是、 在 BL 末尾(在跳转之前)完成上述(清除 RAM +将选定的应用程序复制到 RAM +分支到其闪存的起始地址)完成的序列在一些链接到闪 存的汇编文件中完成(在专用于 BL 的闪存区域中)、即使我尝试从 RAM 运行 BL 时、仍然会将这些文件链接到闪存。  


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Saeed、  

    是的、这是可能的 、尽管可用的 RAM 空间是一个严格的限制。   引导加载程序的大小是多少?  

    此致!

    Matt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt

    我认为 RAM 空间不是问题。 闪存中的 BL 代码位于前两个扇区。 此外、它已用于从 RAM 运行的另一个设计中、没有任何问题。 在本项目中、我决定从闪存中运行它、因为在项目结束时、我必须清除整个 RAM、同时我们还在 BL 代码内(跳转之前)。  

    为了从 RAM 运行 BL、我尝试了这种情况、很好:

    在 BL 中:
    整个代码 从 RAM 运行(从闪存加载、从 RAM 运行)、但 BL 末尾的汇编指令除外、它们执行序列[清除整个 RAM +将下一级应用复制到 RAM +跳转到闪存中下一个应用的起始地址]、仅链接到闪存。 所以看起来我们仍然在 BL 中、RAM 被清除、 那时 BL 中的所有其他部分都 从闪存运行。 因此、BL 可以继续完成这些指令而不会崩溃、即使此时 RAM 已清除。

    这是我的理解,但我不得不要求你确保这里的一切都是正常的,可以解释。  

    我在另一个案例中遇到的问题(从闪存运行的 BL)都是随机发生的。 我会看到这个问题,尝试一些东西,它是修复的,但几天后,它会再次意外发生,当我在代码中的其他地方做了一个不相关的更改,这可能不可能是问题的根源! 所以你可以理解,即使我有一个运行的版本没有任何问题,我不能 相信它真的很好.

    这也是为什么在这种情况下 (从 RAM 运行 BL ),即使它现在工作,我仍然有疑问,并张贴这个问题以确认我的理解。


    此致、
    Saeed

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Saeed、

    如果 RAM 空间不是问题、并且存储器管理很干净、则从 RAM 运行引导加载程序是一种有效的方法。  

    此致!

    Matt