例程中IAP升级那块的疑问 急求帮助

2019-07-20 22:14发布

没看明白这个函数
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
                }
        }
        if(i)STMFLASH_Write(fwaddr,iapbuf,i);//&#189;&#171;×&#238;oóμ&#196;ò&#187;D&#169;&#196;úèY×&#214;&#189;úD′&#189;&#248;è¥.  
}




我想问每512个字往Flash里面写一次,执行第一次可以写进去,那以后的写不会把之前写进去的擦除吗?所在的扇区又是一个扇区 。有点不明白了  求解
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
numbqq
1楼-- · 2019-07-21 03:15
fwaddr+=2048;
guoxiaoyan
2楼-- · 2019-07-21 03:28
 精彩回答 2  元偷偷看……
numbqq
3楼-- · 2019-07-21 04:52
 精彩回答 2  元偷偷看……
黑knight
4楼-- · 2019-07-21 07:03
numbqq 发表于 2016-5-6 11:07
写之前如果扇区需要擦除就已经对整个扇区擦除了,所以地址增加了2k即使还在这个扇区,那么写入的时候也不 ...

flash写的函数中,在擦除前把整个扇区都读如BUF,然后再把整个扇区擦除,接着把要写入的部分写入BUF的对应位置。最后把整个BUF写入。所以不会数据丢失具体看STMFLASH_Write函数

一周热门 更多>