我想保存一些变量以用于程序启动。 我输入以下代码:
SYSCFG0 = FRWPPW | DFWP;
myCharVariableInFRAM = 123;
SYSCFG0 = FRWPPW | PFWP | DFWP;
在调试器中、您可以看到 SYSCFG0寄存器是如何更改的。 但变量地址上的内容保持不变。 也不能使用"内存浏览器"中的调试器来更改它。
是否有人可以写下仍必须满足哪些条件才能进行书写?
非常感谢您的支持。
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.
我想保存一些变量以用于程序启动。 我输入以下代码:
SYSCFG0 = FRWPPW | DFWP;
myCharVariableInFRAM = 123;
SYSCFG0 = FRWPPW | PFWP | DFWP;
在调试器中、您可以看到 SYSCFG0寄存器是如何更改的。 但变量地址上的内容保持不变。 也不能使用"内存浏览器"中的调试器来更改它。
是否有人可以写下仍必须满足哪些条件才能进行书写?
非常感谢您的支持。
您好、Luke、
感谢您的思考。
在我看来、示例中使用的代码与我使用的代码相同。 可以认为这是由于地址范围。 链接器已将变量设置为0x8000。 顺便说一下、我已经尝试过 SYSCFG0 = FRWPPW;进行解锁。 然后、根据描述、整个 FRAM 应该被解锁。 但是、程序或调试器无法进行写入。 除了 SYSCFG0寄存器之外、还有其他写入要求吗? 使用信息存储器是否更容易?
许多问候语
哈迪
您好、Hardy、
这取决于您的应用、通常情况下、如果您想要保存校准或某些特定数据、我建议您使用信息存储器。 程序存储器还将包含您的 main、因此 您必须小心变量的地址、否则可能会获得意外结果。
从调试器写入存储器也可能很棘手、因为解锁需要一步写入、读取 FRWPPW 寄存器将始终读取0x96。 您需要将0xA500写入整个 SYSCFG0寄存器、或将0xA5写入 FRWPPW 字段以解锁整个内容。
我建议使用 示例代码 并将代码更改为要写入应用程序中的位置、然后将示例执行的操作与代码进行比较。
在我看来、变量"myCharVariableInFRAM"只是一个普通变量。 您需要将指针变量作为存储器中的特定位置、然后解除对指针的引用以分配123的值、以便将其存储在地址中。 与 FRAM_WRITE_PTR 以及它在 FRAMWrite 函数中的操作方式类似。
此致、
Luke