我用的芯片是28035。我先要需要通过uart通讯,将地址写入flash存储,然后在读出来。我利用controlsuite里面的Flash API的例程序(Example_Flash2803x_API),对28035的Flash进行擦除与写入.
经过上面的修改后,我可以进行擦除和写入以及读操作了。但是我发现,有时候擦除的时候,是擦除成功了,但是在没有断电的情况下,程序会重新运行,请问这是为什么啊?
如果是这样的话,有时候一擦除我还没来的及存地址呢,程序从头开始运行,地址就没有存上,给我造成了很大的麻烦。是不是我程序逻辑上编写的有问题,改了程序结构就可以解决?还是这是单片机的问题,不能避免?
PS:我在擦除时把所有的中断关了,擦完在开中断。因为我怕在擦除过程中,有中断进来会影响flash区的擦除。
bkn1860:
你UART通信的代码是在RAM中运行还是Flash中运行的?可以考虑把这部分代码做成一个完整的程序,需要运行的时候复制到RAM中运行,这样对Flash的操作不会对RAM中的代码产生影响,也就不会存在自己复位的情况了,除非操作上有问题才有可能引起CPU复位。Flash操作完成后通过watchdog对CPU进行复位即可重新启动CPU。