现在在rt-thread下,使用其中一个线程接收IP数据编程FLASH。发现随机出现问题(概率还极高)。打印信息,擦除地址应该是没问题的:
erase?32K:8038000 erase?32K:8040000 erase?32K:8048000 erase?4K:8050000 erase?4K:8051000 erase?4K:8052000 erase?4K:8053000
????while(e_page_cnt>=8) ????{ ????????FLASH_EraseBlock_32K_Fast(addr); ????????DBG_PRINT("erase?32K:%x\r\n",?addr); ????????addr?+=?32?*?1024; ????????e_page_cnt?-=?8; ????} ????while?(e_page_cnt) ????{ ?????????FLASH_ErasePage(addr); ?????????DBG_PRINT("erase?4K:%x\r\n",?addr); ?????????addr?+=?4?*?1024; ?????????e_page_cnt--; ????}
但是擦除并编程完毕后,重启就发现无法启动。调试查看FLASH内容,发现0x8038000后面的数据的确成功擦写了。但是第一个4K页的数据好像也被擦除了(显示全部39E339E3)。是不是FLASH擦除的时候,不允许线程切换?
不知道为什么帖子修改之后,上面的空格编程问号了……