ch32v208 flash讀寫問題

我在使用了藍(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;

}


1、藍(lán)牙有OTA的無線升級功能,可以參考使用;

2、查看代碼的編譯結(jié)果,操作FLASH的地址大于編譯的大小,如操作0x10000,則正好是藍(lán)牙運(yùn)行代碼,可能會出現(xiàn)問題;


優(yōu)化后已能寫入任意字節(jié),本函數(shù)使用時需要提前擦除寫地址。

void dc_dfu_flash_write(uint32_t dest,? void const * p_src, uint32_t len)

{

? ? const char *p = p_src;

? ? uint32_t addr = dest;

? ? uint8_t data_buff[256];

//? ? __disable_irq();



? ? if(len >= 256)

? ? ? ? for (int var = 0; var < (len / 256); var++)

? ? ? ? {

? ? ? ? ? ? FLASH_Unlock_Fast();

? ? ? ? ? ? tmos_memcpy(data_buff, p, 256);

? ? ? ? ? ? FLASH_ProgramPage_Fast(addr, (uint32_t *)data_buff);

? ? ? ? ? ? FLASH_Lock_Fast();

? ? ? ? ? ? addr += 256;

? ? ? ? ? ? p += 256;

? ? ? ? ? ? len -= 256;

? ? ? ? }

? ? 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();

}



只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频