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.

MSPM0L1306: 在中断里对flash进行操作后,全局变量的值被修改

Part Number: MSPM0L1306
Other Parts Discussed in Thread: SYSCONFIG

在MSPM0L1306上,我想要实现GPIO中断触发flash写入操作。

当中断触发时,将一个长度为16的char型数组writeStr(这是一个全局变量)存入flash地址0x00008000中。但是很奇怪的是,我的这段代码在运行完DL_FlashCTL_unprotectSector(FLASHCTL, MAIN_BASE_ADDRESS, DL_FLASHCTL_REGION_SELECT_MAIN);后,writeStr数组的值被修改。

我尝试了一些方法,有一些确实能够解决问题。比如:

1、把flash操作放在main函数里而不是中断里;

2、将其他.c文件中的全局变量改为局部变量,以改变writeStr的地址;

3、在声明writeStr时对其填入有效数据,这样也能改变writeStr的地址。

虽然上述方法能够帮我解决问题,但我还是很好奇究竟是什么导致flash在操作的时候,全局变量的值会被覆盖修改。

我在keil软件里对代码进行了单步调试,并将writeStr添加到了Watch中,可以看到地址为0x200000D4。

在Memory中查看0x200000D4地址存放的数据,可以看到有三个字节数据,这是我通过键盘外设输入的值。

当程序进入GROUP1_IRQHandler,运行完DL_FlashCTL_unprotectSector(FLASHCTL, MAIN_BASE_ADDRESS, DL_FLASHCTL_REGION_SELECT_MAIN);后

会发现Memory中0x200000D4存放的数据被修改

当设置writeStr值被修改就触发断点后,可以看到上面Disassembly窗口代码停在了下图,此时Memory中可以观察到相应的值也发生了变化。

以上是我调试发现的现象,希望有人能为我指点迷津。