OpenEdv-开源电子网

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

IAP例程里设置IROM1的作用?

[复制链接]

22

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
493
金钱
493
注册时间
2013-12-19
在线时间
111 小时
发表于 2017-5-12 17:08:04 | 显示全部楼层 |阅读模式
10金钱
      网上说的:bin文件只是程序的二进制码,而hex文件还包含地址信息。
      IROM1有两个值可以设置,分别是 start 和 size 。
      start的值应该会影响hex文件,而不会影响bin文件吧?start的值 只在用ISP或JLink下载时 才有影响吧?用IAP程序烧写bin文件时,和start的值无关的吧?

      再看《STM32F1开发指南-库函数版本 》(V3.1)P714第2段:
      在 main 函数执行过程中,如果 CPU 得到一个中断请求,PC 指针仍强制跳转到地址0X08000004 中断向量表处,而不是新程序的中断向量表,如图标号④所示;程序再根据我们设置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中,如图标号⑤所示;

      得到中断请求后,PC指针先跳到原中断向量表(0x08000000),然后就跳到新的中断服务程序了?应该是  PC指针先跳到原中断向量表(0x08000000),再根据中断向量表偏移量  跳到新的中断向量表,然后再跳到新的中断服务程序把?
      为什么复位中断不受 SCB->VTOR(中断向量表的起始地址)的影响,不会跳到APP的复位中断向量?

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

使用道具 举报

22

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
493
金钱
493
注册时间
2013-12-19
在线时间
111 小时
 楼主| 发表于 2017-5-12 17:27:52 | 显示全部楼层
还有,size的值有什么作用?只是让编译器产生警告 当程序的大小超过这个值的时候?
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2020-10-31
在线时间
12 小时
发表于 2022-3-4 16:17:13 | 显示全部楼层
同问,我也有这个困惑
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2022-3-5 00:20:45 | 显示全部楼层
1,是的bin文件不包含地址信息了,所以烧录的时候要注意起始地址,错了就不会运行的。2,复位中断位置是不可修改的,不然怎么跑?
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2020-10-31
在线时间
12 小时
发表于 2022-3-5 18:19:39 | 显示全部楼层
图中是FLASH APP修改 IROM1的start地址,FLASH APP 是最终是会生成bin文件的,bin既然不受IROM1的影响,那么修改IROM1 的start值是否没有什么意义?是不是不修改IROM1 start的值FLASH APP也可以正常使用? 但我实验了,我不修改IROM1 start的值的话,FLASH APP通过IAP烧录进STM32里面是运行异常的。总的来说 就是不清楚 IROM1 start 的值除了影响倒hex文件外,还影响到了什么。
2022-03-05_175739.png
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2020-10-31
在线时间
12 小时
发表于 2022-3-6 23:07:55 | 显示全部楼层
我对比了改了IROM1 start的值和没改IROM1 start值生成的bin文件,发现生成的bin文件内容不一样,说明IROM1 start的值会对bin文件内容产生影响。
bin文件对比.png
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2022-3-7 00:08:16 | 显示全部楼层
qq1260746351 发表于 2022-3-5 18:19
图中是FLASH APP修改 IROM1的start地址,FLASH APP 是最终是会生成bin文件的,bin既然不受IROM1的影响,那 ...

对hex来说,是有意义的。
对bin来说,基本可以认为他没有意义。
但是bin文件的烧录你得自己指定地址,而这个地址必须根据这个IROM1的设置来。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2020-10-31
在线时间
12 小时
发表于 2022-3-7 09:08:06 | 显示全部楼层
正点原子 发表于 2022-3-7 00:08
对hex来说,是有意义的。
对bin来说,基本可以认为他没有意义。
但是bin文件的烧录你得自己指定地址, ...

好的,感谢原子哥!
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
发表于 2022-5-5 11:23:35 | 显示全部楼层
但是修改IROM1和不修改,生成的bin文件是不一样的啊。烧录我可以自己指定地址去烧录,但是运行还是会异常,请问楼主搞清楚没?
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
发表于 2022-5-5 11:26:35 | 显示全部楼层
正点原子 发表于 2022-3-7 00:08
对hex来说,是有意义的。
对bin来说,基本可以认为他没有意义。
但是bin文件的烧录你得自己指定地址, ...

原子哥,我还是没理解这里,我修改 APP的IROM1和不修改,生成的bin文件我对比是有区别的。我也做了测试,不修改IROM1生成的bin文件在做IAP升级的时候明显是异常的。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2022-5-6 00:00:18 | 显示全部楼层
JImLu 发表于 2022-5-5 11:26
原子哥,我还是没理解这里,我修改 APP的IROM1和不修改,生成的bin文件我对比是有区别的。我也做了测试, ...

你怎么操作的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
发表于 2022-5-6 09:18:26 | 显示全部楼层

其实整体思路和IAP实验一样的,首先完全按照实验做是没问题的,但是假如我APP代码不修改IROM1的start,生成的bin文件升级是有问题的。我对比了修改IROM1的bin文件和不修改,两个bin文件是不同的。所以我没理解IROM1到底起了什么作用。我一开始的理解是IROM会在生成hex文件的时候增加上地址信息,和生成bin文件没有关系的,但是自己实验测试对比bin文件,发现不是这么回事。
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
发表于 2022-5-6 09:30:02 | 显示全部楼层

也就是要IAP的固件APP必须要修改IROM1的start地址,那么就出现一个问题,假如我做两个APP区,那就不能只使用一个工程项目,而且IAP的时候还要不同的升级区对应不同的工程项目,那也太麻烦了。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2022-5-7 00:24:05 | 显示全部楼层
JImLu 发表于 2022-5-6 09:18
其实整体思路和IAP实验一样的,首先完全按照实验做是没问题的,但是假如我APP代码不修改IROM1的start,生 ...

IROM1就定义了你的程序首地址和大小
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2016-8-10
在线时间
5 小时
发表于 2023-3-11 11:28:15 | 显示全部楼层
正点原子 发表于 2022-5-7 00:24
IROM1就定义了你的程序首地址和大小

我觉得这个IROM1设置的不一样,编译成的bin文件也是不同,估计是编译的时候根据这个IROM1进行了程序内部函数的地址偏移了,原子感觉你没理解12楼的意思
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2016-8-10
在线时间
5 小时
发表于 2023-3-11 11:28:59 | 显示全部楼层
JImLu 发表于 2022-5-6 09:30
也就是要IAP的固件APP必须要修改IROM1的start地址,那么就出现一个问题,假如我做两个APP区,那就不能只 ...

这个我现在也遇到了,请问楼主最终怎么解决呀
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
发表于 2023-7-4 15:43:28 | 显示全部楼层
Jodelin 发表于 2023-3-11 11:28
这个我现在也遇到了,请问楼主最终怎么解决呀

考量了很多方式,最终最优解就是APP1区作为运行区,APP2作为接收新固件存储区,上电bootloader判断APP2是否有新固件,有的话对固件完整性校验,校验完成copy到APP1区再跳转APP1区运行。
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
发表于 2023-7-4 15:45:01 | 显示全部楼层
Jodelin 发表于 2023-3-11 11:28
我觉得这个IROM1设置的不一样,编译成的bin文件也是不同,估计是编译的时候根据这个IROM1进行了程序内部 ...

是的,就是因为IROM1 START的地址导致生成Bin文件的偏移,所以没办法运行。
回复

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4418
金钱
4418
注册时间
2018-5-11
在线时间
923 小时
发表于 2023-7-5 07:09:19 | 显示全部楼层
JImLu 发表于 2023-7-4 15:43
考量了很多方式,最终最优解就是APP1区作为运行区,APP2作为接收新固件存储区,上电bootloader判断APP2是 ...

原子的例程不就是类似这样的么
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 07:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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