OpenEdv-开源电子网

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

iap更新

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-4-24 19:27:37 | 显示全部楼层 |阅读模式
原子哥:请问一下,在串口IAP例程里有这么一句话:if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000这里为什么是等于0x08000000?

在(0X20001000+4)这个地址里面的数据为什么是0x08000000呢?
0x08000000只是代表FLASH的起始运行地址啊?

*(vu32*)(0X20001000+4)这个串口缓冲区取出的数据应该是.BIN文件发过来的更新程序的二进制数据,怎么是起始运行的地址值了呢?
我用ULTRAEDIT打开.BIN文件,从0X04地址开始也没发现有0X08这个数据显示啊?
不知我的理解哪里有出入?
谢谢 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-24 20:18:57 | 显示全部楼层
回复【楼主位】lhs0415101:
---------------------------------
这句if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000,用于判断所给的IAP数据(FLASH IAP的时候)是否合法,你也知道STM32的FLASH其实地址是0X0800,0000开始的一段FLASH区间.
如果给的起始地址如果不是0X08XXXX,XXXX区间内,你觉得这个地址合法么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-4-24
在线时间
0 小时
 楼主| 发表于 2013-4-24 22:14:01 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥:我的疑问其实就是当取*(vu32*)(0X20001000+4)这个地址保存的IAP数据的时候,它就是0X08XXXXXX吗?
我在一个.BIN文件中摘了这么一段:

              0   1   2    3    4     5     6    7    8    9     A    B     C     D     E    F 
00000000H: 78  08 20  00  89   01   00  08  E9  14   00  08   E1   14   00   08

如果将这一.BIN文件发送给以0X20001000为起始地址的接收缓冲区后,那么当读取(0X20001000+4)这个地址的值我理解的应是0X89010008.
请原子大哥帮我解惑一下,谢谢!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-24 22:25:42 | 显示全部楼层
回复【3楼】lhs0415101:
---------------------------------
先了解下STM32是大端模式,还是小端模式.
然后就知道数据应该从高到低排列,还是从低到高排列.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-4-25 09:46:22 | 显示全部楼层
回复【3楼】lhs0415101:
---------------------------------
你搞错了,是 0x8000189.BIN是以大端模式存储的,STM32是小端,读取的值是 反向的。
1-1
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-4-24
在线时间
0 小时
 楼主| 发表于 2013-4-25 11:53:55 | 显示全部楼层
非常感谢原子大哥和MYGOD两位仁兄的指点!!!!这个论坛真好!
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-4-24
在线时间
0 小时
 楼主| 发表于 2013-4-25 15:03:50 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
那么原子大哥:
      如果.BIN文件是按大端格式发STM32的接收缓存,那么STM32在读取时需要用*(vu32*)(0X20001000+4)这一先强制转换,再取值的办法,将.BIN文件大端模式的数据在编译后自动转为小端模式了。这样理解对否?谢谢!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-25 17:16:43 | 显示全部楼层
stm32读取时没这么多操作,直接就去取了.
就和螃蟹是横着走路一样,只要你是个螃蟹,那就是横着走路,不需要强制转换.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-20 22:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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