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中可以观察到相应的值也发生了变化。
以上是我调试发现的现象,希望有人能为我指点迷津。