求问IAP串口例的一段代码

2019-07-20 18:26发布

//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;//&#198;&#171;ò&#198;4&#184;&#246;×&#214;&#189;ú
                iapbuf[i++]=temp;            
                if(i==512)
                {
                        i=0;
                        STMFLASH_Write(fwaddr,iapbuf,512);
                        fwaddr+=2048;//&#198;&#171;ò&#198;2048  512*4=2048  &#213;yo&#195;ê&#199;2K
                }
        }
        if(i)STMFLASH_Write(fwaddr,iapbuf,i);
}


这段代码里的<<24 <<16<<8 <<0是什么意思

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
ysq7120
1楼-- · 2019-07-20 19:31
iapbuf 是u32类型数据,这个代码是将接受到的数据u8每4个变成一个u32放到iapbuf里面,然后满512个就写flash。
因为flash一个page是2048个字节,512*4=2048
a514582920
2楼-- · 2019-07-21 00:46
位操作,左移多少位的意思。多看看c语言基础
名扬天下
3楼-- · 2019-07-21 03:42
 精彩回答 2  元偷偷看……
ysq7120
4楼-- · 2019-07-21 04:49
dfu是u8,通过移位将4个dfu数据拼成一个u32.
这不是很基础的东西吗
a514582920
5楼-- · 2019-07-21 05:45
 精彩回答 2  元偷偷看……
名扬天下
6楼-- · 2019-07-21 11:41
a514582920 发表于 2016-9-26 17:39
把8位的数据转换为32位

为什么第一次要左移24变成32位,然后第二次左移16位变成48位,第三次左移8位变成56位?

一周热门 更多>