中级会员
 
- 积分
- 297
- 金钱
- 297
- 注册时间
- 2016-6-2
- 在线时间
- 49 小时
|
1金钱
[mw_shl_code=applescript,true]u16 iapbuf[512];
//appxaddr:应用程序的起始地址
//appbuf:应用程序CODE.
//appsize:应用程序大小(字节).
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)//2556
{
u16 t;
u16 i=0;
u16 temp;
u32 fwaddr=appxaddr;//当前写入的地址
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==512)
{
i=0;
STMFLASH_Write(fwaddr,iapbuf,512);
fwaddr+=1024;//偏移1024 16=2*8.所以要乘以2.
}
}
if(i)STMFLASH_Write(fwaddr,iapbuf,i);//将最后的一些内容字节写进去.
}
[/mw_shl_code]
当appxaddr:应用程序的起始地址数值超过 0x08040000时,不工作,啥原因?
小的时候没问题。
|
最佳答案
查看完整内容[请看2#楼]
解决了,是因为在APP的其他初始化里面调用了NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);,导致前面设置的向量偏移量被更新。 谢谢原子哥。
|