void program_data(u16 flash_addr, u8 buffer[], u8 len)
{
u8 i,flagstatus = 0x00;
// u16 address;
// int8_t trycnt=1;
// retry_lbl:
// if(trycnt-- <= 0) return (0);
FLASH->CR1 &= (u8)(~0x01);
FLASH->CR1 |= (u8)0x00;
// address = flash_addr;
for(i = 0; i < len; i++)
{
clr_watchdog(NULL);
/* Unlock Program memory */
FLASH_Unlock(FLASH_MEMTYPE_PROG);
*((u8 *) flash_addr) = buffer[i];
while (flagstatus == 0x00)
{
flagstatus = (u8)(FLASH->IAPSR & ((u8)(0x04) |(u8)(0x01)));
//timeout--;
}
FLASH_Lock(FLASH_MEMTYPE_PROG);
flash_addr++;
}
// address = flash_addr;
/* for(i = 0; i < len; i++)
{
if(*((u8*) address) != buffer[i])
goto retry_lbl;
address++;
}
return 1;*/
}
void program_data(u16 flash_addr, u8 buffer[], u8 len)
此函数是在dev_ctrl.c里,调用函数是在up_date.c里面。在up_date.c里面没有申明此函数,因此会产生单字节,或者多字节写不进去的问题。
被化为注释的代码是用来读出判断用的,写入和读出的不一样就会重新写入。
另外注意void是没有返回值的,在此函数里return 1 是编译通不过的。
想编译通过应该修改为:
u8 program_data(u16 flash_addr, u8 buffer[], u8 len)
两天了问题解决了,解决问题要有耐心。