Я использую 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 мс (как видно на осциллографе), пока стирание не будет завершено. Я, должно быть, делаю что-то не так, потому что использую версию стирания с прерыванием. Не должно ли все так вешать правильно?
(Уверен, что стираю сектор, в котором не находится программный код. Сектор 6)