我在使用了蓝牙协议栈的工程中想实现iap功能,目前遇到的问题是从flash中读n字节数据,再写到flash时(例如将0x8030000做为起始地址,将后面0x10000个数据复制到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;
}