我在使用了藍(lán)牙協(xié)議棧的工程中想實(shí)現(xiàn)iap功能,目前遇到的問題是從flash中讀n字節(jié)數(shù)據(jù),再寫到flash時(例如將0x8030000做為起始地址,將后面0x10000個數(shù)據(jù)復(fù)制到0x8010000處)在下面程序中卡死。請問是不能同時對flash讀寫還是其他問題造成的?
Fun_Return dc_dfu_flash_write(uint32_t dest,? void const * p_src, uint32_t len)
{
? ? const char *p = p_src;
? ? uint32_t addr = dest;
//? ? __disable_irq();
? ? FLASH_Unlock_Fast();
? ? if(len >= 256){
? ? ? ? FLASH_ROM_WRITE(addr, (uint32_t*)p, len & ~0xFF);
? ? ? ? addr += len & ~0xFF;
? ? ? ? p += len & ~0xFF;
? ? ? ? len &= 0xFF;
? ? }
? ? FLASH_Lock_Fast();
? ? if(len){
? ? ? ? uint32_t word_buf;
? ? ? ? uint32_t world_len = (len + 3) / 4;
? ? ? ? FLASH_Unlock();
? ? ? ? for(uint32_t i = 0; i < world_len; i++){
? ? ? ? ? ? word_buf = (*(const uint32_t*)p);
? ? ? ? ? ? FLASH_ProgramWord(addr, word_buf);
? ? ? ? ? ? addr += 4;
? ? ? ? ? ? p += 4;
? ? ? ? }
? ? ? ? FLASH_Lock();
? ? }
//? ? __enable_irq();
? ? return FUN_SUCCESS;
}