OpenEdv-开源电子网

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

请教一个iap的flash写入的代码

[复制链接]

17

主题

170

帖子

0

精华

高级会员

Rank: 4

积分
562
金钱
562
注册时间
2018-7-8
在线时间
118 小时
发表于 2019-12-17 11:19:03 | 显示全部楼层 |阅读模式
1金钱
请问原子哥,在iap串口中,有一段代码我看不太懂:

iapfun jump2app;
u16 iapbuf[1024];
//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]要左移?是不是stm32是小端模式, 生成的bin文件是小端模式的??
        temp = (u16)dfu[1] << 8;
        temp += (u16)dfu[0];


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

170

帖子

0

精华

高级会员

Rank: 4

积分
562
金钱
562
注册时间
2018-7-8
在线时间
118 小时
 楼主| 发表于 2019-12-17 11:23:47 | 显示全部楼层
是不是bin文件通过串口发送就是低位地址的数据先发送??
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2019-12-17 11:48:02 | 显示全部楼层
按照半字写,写的时候要小端,文件不说大小端,字段才说大小端
回复

使用道具 举报

17

主题

170

帖子

0

精华

高级会员

Rank: 4

积分
562
金钱
562
注册时间
2018-7-8
在线时间
118 小时
 楼主| 发表于 2019-12-17 11:51:48 | 显示全部楼层
Sun_Fly 发表于 2019-12-17 11:48
按照半字写,写的时候要小端,文件不说大小端,字段才说大小端

好的,我去看看bin 和hex文件的布局。
回复

使用道具 举报

17

主题

170

帖子

0

精华

高级会员

Rank: 4

积分
562
金钱
562
注册时间
2018-7-8
在线时间
118 小时
 楼主| 发表于 2019-12-17 13:22:27 | 显示全部楼层
本帖最后由 wdliming 于 2019-12-17 13:24 编辑
Sun_Fly 发表于 2019-12-17 11:48
按照半字写,写的时候要小端,文件不说大小端,字段才说大小端

flash.png
请问是这么写入吗,那言下之意就是串口传输的过程,是先传输『0』的数据了?然后把『0』的数据保存的USART_RX_BUF[0]喽?,
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-17 19:48:15 | 显示全部楼层
帮顶                                 
成功没有捷径
回复

使用道具 举报

1

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2019-6-17
在线时间
29 小时
发表于 2019-12-20 09:11:56 | 显示全部楼层
因为你传进来的u8类型的数组,写入stm32的内部flash是按照u16类型来写的,需要将2个u8合成1个u16写入flash
回复

使用道具 举报

1

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2019-6-17
在线时间
29 小时
发表于 2019-12-20 09:24:44 | 显示全部楼层
ben4 发表于 2019-12-20 09:11
因为你传进来的u8类型的数组,写入stm32的内部flash是按照u16类型来写的,需要将2个u8合成1个u16写入flash

不好意思。貌似我回答的不是你提问的。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-21 10:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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