基于RTOS下FLASH编程的疑问

现在在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擦除的时候,不允许线程切换?


不知道为什么帖子修改之后,上面的空格编程问号了……

现在尝试FLASH_EraseBlock_32K_Fast和FLASH_ErasePage不混用,只使用FLASH_EraseBlock_32K_Fast好像就没有这个问题出现了……是因为快速模式下不允许使用标准模式的编程指令么?


您好,在调用FLASH_ErasePage函数和FLASH_EraseBlock_32K_Fast函数进行擦除时,需要先执行对应的解锁操作。FLASH_ErasePage函数需要调用FLASH_Unlock函数进行解锁,FLASH_EraseBlock_32K_Fast函数需要调用FLASH_Unlock_Fast函数,你是不是整个过程只使用了FLASH_Unlock_Fast函数进行解锁,你可以都进行解锁试一下


只有登录才能回复,可以选择微信账号登录