最近做IAP程序,平台是uCOS/II + LwIP,当然会有几个中断的存在。问题就来了,在对FLASH进行操作时(擦除和编程),会进入usage fault,具体错误是INVPC错误!由于是擦除很多page,我试过如果F10单步运行擦除函数,到地4、5个page时就会fault了,如果F11进入擦除函数内部执行,那么就一直不会进fault,自己编写的擦除函数和固件库函数都是如此。另外,如果我关闭中断,全速运行,也是不会fault的。看来问题是处在中断上。但是具体是什么原因呢?翻了很错资料都找不到,查看堆栈难容找出fault之前的PC值 或者 在中断处理函数中BX LR也没有头绪。只有在《STM32F10x闪存编程》中找到一句:既在进行写或擦除操作时,不能进行代码或数据的读取操作。 不知道是否是这个原因,因为进中断需要读取代码?那么我在擦除函数中在写入查出命令中,也有while循环等待操作完成,执行这个语句就不需要读取代码了么?或者是已经缓存好了? 请高手指教!
另外 |