高级会员

- 积分
- 790
- 金钱
- 790
- 注册时间
- 2015-6-28
- 在线时间
- 139 小时
|
1金钱
就直接用的原子的程序。如下两句,BUFF为我收到一次数据存的buff
iap_write_appbin(FLASH_APP_ADDR,buff,size1);
FLASH_APP_ADDR = FLASH_APP_ADDR + size1;
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
u16 t;
u16 i=0;
u16 temp;
u32 fwaddr=appxaddr;//μ±Ç°D′èëμÄμØÖ·
u8 *dfu=appbuf;
for(t=0;t<appsize;t+=2)
{
temp=(u16)dfu[1]<<8;
temp+=(u16)dfu[0];
dfu+=2;//Æ«òÆ2¸ö×Ö½ú
iapbuf[i++]=temp;
if(i==1024)
{
i=0;
STMFLASH_Write(fwaddr,iapbuf,1024);
fwaddr+=2048;//Æ«òÆ2048 16=2*8.ËùòÔòa3ËòÔ2.
}
}
if(i)STMFLASH_Write(fwaddr,iapbuf,i);//½«×îoóμÄò»D©ÄúèY×Ö½úD′½øè¥.
}
|
最佳答案
查看完整内容[请看2#楼]
iap最好是分几个区域,开始收到的数据不要存放到APP区,最好是先放在其他地方,而且要能保证不变砖!至于你的问题,你看看你程序中是否做了中断偏移地址的映射,是否映射正确,或者写flash的时候8位和16位之间长度的变化是否正确!
|