问题描述
我正在使用FreeRtos,并且在其中一项任务中,我使用以下代码擦除闪存扇区
HAL_FLASH_Unlock();
// Fill EraseInit structure
static FLASH_EraseInitTypeDef EraseInitStruct;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
EraseInitStruct.Sector = sector;
EraseInitStruct.NbSectors = numOfSectorsToErase;
HAL_FLASHEx_Erase_IT(&EraseInitStruct);
HAL_FLASH_Lock();
我认为这是擦除该扇区的非阻塞调用,但是,当调用该扇区时,所有其他线程似乎都被抢占了100 ms(在示波器上看到),直到擦除完成。我一定做错了,因为我正在使用擦除的中断版本。它不应该像这样正确地悬挂所有东西吗?
(我确定要擦除程序代码所在的扇区。扇区6)
解决方法
文件清晰:
始终阅读文档,而不是Internet论坛。
,所以@ Hs2似乎正确。在进一步的研究中,如此处https://www.w3schools.com/js/tryit.asp?filename=tryjs_cookie_username
所述,擦除闪存上的扇区将阻止执行。说“闪烁阻止代码执行”。
现在这带来了更多的问题,尽管为什么无论哪种方式调用都将阻塞,stm的工程师为什么会在世界上包括扇区擦除的中断版本。其非常误导。似乎没有用例。