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.

[参考译文] 编译器/TMS570LS1227:软件复位后保持 RAM 数据。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/572502/compiler-tms570ls1227-retention-ram-data-after-software-reset

器件型号:TMS570LS1227
主题中讨论的其他器件:HALCOGEN

工具/软件:TI C/C++编译器

大家好、我在执行软件复位(在 SYSECR 中写入1<<15)后、尝试在 RAM 上保存几个字节的数据。

我已经尝试像 这样使用 PERSISTENTf

#pragma PERSISTENT (x)
#pragma LOCATION = 0x0801FFF0// 您选择的 RAM 中的存储器地址
静态 uint32_t x;

但它似乎不起作用。

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

    我需要查找该 pragma 的作用、但我怀疑您的第一个问题是 、此器件上的 RAM 在硬件中使用内存初始化功能自动初始化为0。

    由于 RAM 具有 ECC 保护以及 RAM 和 ECC 内容、因此存在硬件存储器初始化
     仅加电且未初始化、您的 RAM 将充满单位和双位 ECC 错误。


    因此、您提出的问题可以解决、但并不像您想象的那样简单。   此外、我认为我们没有一个很好的示例供您参考。

    您将需要跟随复位后入口点 c_int00 ()的 HalCoGen (假设您正在使用它)代码、并查看它在何处初始化 RAM。    您可能需要

       -添加代码以读取您的永久存储器位置并将该值保存在 CPU 中的寄存器中。

      -执行内存初始化  

      -将值写回 RAM 以获取持久性位置


    因此、这是一个非常自定义的东西   这个解决方案的扩展性也不是很好、因为我建议将值保存在 一个 CPU 寄存器中、这些值是有限的、另外一些值被内存初始化调用使用。

    第二、您需要考虑如何验证持久性存储器位置的数据是否正常。  您可能会在读取 ECC 错误时产生错误、因此需要注意使用适当的处理程序、以防它是下电上电后的第一次...

    由于 这些复杂性、我认为您需要花相当多的时间来完成这项任务。  只是提醒一下、这并不是一件简单的事情。


    -Anthony

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

    您好、Anthony、

    感谢您的回答!  

    由于我可以从 系统异常状态寄存器(SYSESR)中读取软件 REST 标志(SWRST)、我想知道如果执行软件复位、是否可以跳过 RAM 的初始化。

    最棒的

    Charlie

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

    您可以尝试执行此操作、但必须考虑可能发生复位的原因... 可能需要进行热复位、这是 RAM 中一些双位错误的影响。

    因此、您可能会决定系统在始终初始化 RAM 时会更加稳健、但需要持久性的微小位除外。

    这在某种程度上与在启动之外的其他时间运行 CPU LBIST 的问题相关。 我们说您可以将状态保存到 RAM 中、但说它并执行它是两个不同的操作、遗憾的是我们没有任何示例来展示如何操作。 它将是一些非常棘手的代码。

    谢谢、此致、
    Anthony
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、Anthony、我想知道如果发生位错误会发生什么情况。 是否会有任何标志指示它从异常而不是正常的软件复位进行复位?