OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4393|回复: 1

帮忙解释一下原子哥iap实验的写入函数(iap_write_appbin)

[复制链接]

23

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2021-5-30
在线时间
36 小时
发表于 2021-9-28 11:03:29 | 显示全部楼层 |阅读模式
1金钱
//appxaddr:应用程序的起始地址
//appbuf:应用程序CODE.
//appsize:应用程序大小(字节).

void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
        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==1024)
                {
                        i=0;
                        STMFLASH_Write(fwaddr,iapbuf,1024);       
                        fwaddr+=2048;//偏移2048  16=2*8.所以要乘以2.
                }
        }
        if(i)STMFLASH_Write(fwaddr,iapbuf,i);//将最后的一些内容字节写进去.  
}

问题1:appbuf的值是什么?是串口缓存区(USART_RX_BUF)的地址吗?*appbuf是什么,是串口缓存区的值吗?
问题2:u8 *dfu=appbuf; 这一句的作用?
问题3:。。。。感觉全是问题,dfu是8位的,左移8位不是和原来一样吗?为啥要便宜俩个字节,

最佳答案

查看完整内容[请看2#楼]

问题1:appbuf是从串口那边接收到的新程序,例程里把串口接收到的新程序全部存在【USART_RX_BUF】这个数组里面了。 问题2:定义个u8的指针,把appbuf也就是USART_RX_BUF的值传过来,主要是要把高8位和低8位组合成16位,而且要反过来组合,然后用【STMFLASH_Write】这个函数写进去FLASH。 问题3:dfu是8位,但是2个dfu组合成1个 temp,那下一个temp不就是要偏移两个字节才正确吗?比如dfu[0]+dfu[1]=temp[0],那下一个temp[1]=dfu ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-10-2
在线时间
5 小时
发表于 2021-9-28 11:03:30 | 显示全部楼层
问题1:appbuf是从串口那边接收到的新程序,例程里把串口接收到的新程序全部存在【USART_RX_BUF】这个数组里面了。
问题2:定义个u8的指针,把appbuf也就是USART_RX_BUF的值传过来,主要是要把高8位和低8位组合成16位,而且要反过来组合,然后用【STMFLASH_Write】这个函数写进去FLASH。
问题3:dfu是8位,但是2个dfu组合成1个 temp,那下一个temp不就是要偏移两个字节才正确吗?比如dfu[0]+dfu[1]=temp[0],那下一个temp[1]=dfu[2]+dfu[3],dfu[2]相比dfu[0]是不是偏移2个字节。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 21:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表