//appxaddr:ó|óÃ3ìDòμÄÆeê¼μØÖ·
//appbuf:ó|óÃ3ìDòCODE.
//appsize:ó|óÃ3ìDò′óD¡(×Ö½ú).
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
u32 t;
u16 i=0;
u32 temp;
u32 fwaddr=appxaddr;//μ±Ç°D′èëμÄμØÖ·
u8 *dfu=appbuf;
for(t=0;t<appsize;t+=4)
{
temp=(u32)dfu[3]<<24;
temp|=(u32)dfu[2]<<16;
temp|=(u32)dfu[1]<<8;
temp|=(u32)dfu[0];
dfu+=4;//Æ«òÆ4¸ö×Ö½ú
iapbuf[i++]=temp;
if(i==512)
{
i=0;
STMFLASH_Write(fwaddr,iapbuf,512);
fwaddr+=2048;//Æ«òÆ2048 512*4=2048 ÕyoÃêÇ2K
}
}
if(i)STMFLASH_Write(fwaddr,iapbuf,i);
}
这段代码里的<<24 <<16<<8 <<0是什么意思
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
为什么第一次要左移24变成32位,然后第二次左移16位变成48位,第三次左移8位变成56位?
(u32)dfu[3]<<24 如果 dfu[3]=0x07,那么移动后就是0x07000000,
(u32)dfu[2]<<16 如果 dfu[3]=0x06,那么移动后就是0x00060000,
temp用|运算,那么temp 不就等于0x07060000了。
后面的是一样的情况。
再不懂我就无法帮你了
明白了!
嗯,32位就是4个字节,每32位数据存在temp里面,然后偏移4个字节(也就是寻找接下来的32位数据),然后把32位数据存在了iapbuf[0]里面,这个if(i==512)512个是什么意思?
一周热门 更多>