大家好、
客户有问题需要您的帮助:
在 MSPM0L1306上、我希望实现 GPIO 中断以触发闪存写入操作。
当中断被触发时、长度为16的 char 数组 writeStr (一个全局变量)将存储在闪存地址0x00008000中。 但很奇怪的是、在我的代码运行 DL_FlashCTL_UnprotectSectSector (FLASHCTL、MAIN_BASE_ADDRESS、DL_FLASHCTL_REGION_SELECT_MAIN)后、 writeStr 数组的值会被修改。
我尝试了几件事,其中一些确实工作。 例如:
1.将闪存操作置于主函数中,而不是中断中;
2.将其他.c 文件中的全局变量更改为局部变量,以更改 writeStr 的地址;
3. 在声明 writeStr 时填写有效数据,这样 writeStr 的地址也可以更改。
尽管上述方法可以帮助我解决问题、但我仍然很好奇在闪存运行时导致覆盖和修改全局变量值的原因。
I 在 Keil 软件中单步执行代码并将 writeStr 添加到 Watch。 我可以看到地址为0x200000D4。

检查存储器中地址0x200000D4处存储的数据。 您可以看到有三个字节的数据。 这是我通过键盘外设输入的值。

当程序在运行 DL_FlashCTL_UnprotectSectSector (FLASHCTL、MAIN_BASE_ADDRESS、DL_FLASHCTL_REGION_SELECT_MAIN)之后进入 Group1_IRQHandler 时;

您将发现存储器中存储在0x200000D4处的数据已修改。

当 writeStr 值被修改时触发断点时、您可以在下图中看到上述反汇编窗口代码停止。 此时、您可以观察到相应的值也在 Memory 中发生了变化。


以上是我在调试过程中发现的现象。 我希望有人能给我一些建议。
此致、
本
