主题中讨论的其他器件:HALCOGEN
工具/软件:TI C/C++编译器
大家好、我在执行软件复位(在 SYSECR 中写入1<<15)后、尝试在 RAM 上保存几个字节的数据。
我已经尝试像 这样使用 PERSISTENTf
#pragma PERSISTENT (x)
#pragma LOCATION = 0x0801FFF0// 您选择的 RAM 中的存储器地址
静态 uint32_t x;
但它似乎不起作用。
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.
工具/软件: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