OpenEdv-开源电子网

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

IAP中STM32的工作流程,有疑惑!

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-12-20
在线时间
5 小时
发表于 2018-12-20 15:08:57 | 显示全部楼层 |阅读模式
1金钱
如图所示,文中说到,在IAP工程中(两个工程:1个BootLoader,1个APP)有两份中断向量表,在APP程序运行中,当中断来临时,硬件体系使得,PC指针跳转至Bootloader代码段的向量表,然后再根据偏移量跳转至APP段的中断服务函数运行,这一句话我没有弄明白啊,以下是我的理解:

1,中断向量表里存放的是每个中断服务函数的入口地址,那么,Bootloader段的向量表里,存放的是bootloader工程的中断服务函数的地址。 这些函数(xxx_Handler)的地址 与 APP中的同名函数的地址应该是不一样的,那怎么能通过查向量表一,获取得到APP工程中函数的地址呢??? 所以这个步骤⑤的跳转机制,哪位大神能否再细致的讲解一下。
2,如果从向量表一可以直接跳转到APP的中断函数, 那么向量表二还有什么用呢? 如果这样的话, 那仅仅是在BootLoader跳转至APP的时候,通过向量表调用一下 Reset_Handler 而已了,以后的中断响应里,根本用不到了。

应该是我的理解有误区,请大神们指点一下。
1545288693.png

最佳答案

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

这个地方确认讲解有误,STM32的中断是通过查找中断向量表来响应的,而中断向量表的位置记录在SCB->VTOR寄存器中,跳转至APP后,相应的VTOR内容也在System_Init函数中更新,当中断来临,从VTOR取出向量表的位置,再从该表位置开始检索,再跳转至服务函数。 并不需要跳转至0x08000004的位置, 只有复位STM32的情况,硬件机理使得必须从0x08000000(栈顶)和0x08000004(PC指针)启动。 而且,向量表中存放的是函数入口地址,函数的 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-12-20
在线时间
5 小时
 楼主| 发表于 2018-12-20 15:08:58 | 显示全部楼层
这个地方确认讲解有误,STM32的中断是通过查找中断向量表来响应的,而中断向量表的位置记录在SCB->VTOR寄存器中,跳转至APP后,相应的VTOR内容也在System_Init函数中更新,当中断来临,从VTOR取出向量表的位置,再从该表位置开始检索,再跳转至服务函数。 并不需要跳转至0x08000004的位置,  只有复位STM32的情况,硬件机理使得必须从0x08000000(栈顶)和0x08000004(PC指针)启动。    而且,向量表中存放的是函数入口地址,函数的地址是有编译器分配的,在0x08000004的向量表,怎么可能找到的APP的服务函数的地址,两个工程都是分开编译的。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-12-20
在线时间
5 小时
 楼主| 发表于 2018-12-20 15:16:11 | 显示全部楼层
Anybody?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-12-21 02:48:55 | 显示全部楼层
多看几遍我的教程,从头看起,你就明白了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-12-20
在线时间
5 小时
 楼主| 发表于 2018-12-21 08:28:30 | 显示全部楼层
正点原子 发表于 2018-12-21 02:48
多看几遍我的教程,从头看起,你就明白了

你好坏
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-12-21
在线时间
3 小时
发表于 2018-12-21 14:20:01 | 显示全部楼层
兄嘚,这TM硬件机制就是这,或者你可以给ST或者ARM建议一下
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-12-20
在线时间
5 小时
 楼主| 发表于 2018-12-24 17:26:03 | 显示全部楼层
zh3251241 发表于 2018-12-21 14:20
兄嘚,这TM硬件机制就是这,或者你可以给ST或者ARM建议一下

兄嘚,我知道是硬件机制, 问题是我没有理解到“为什么查BootLoader的向量表却执行了APP的中断服务函数”,  脑子没有转过这个弯弯呀。难受~
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-12-25 02:09:11 | 显示全部楼层
BrandonYuan 发表于 2018-12-24 17:26
兄嘚,我知道是硬件机制, 问题是我没有理解到“为什么查BootLoader的向量表却执行了APP的中断服务函数” ...

因为有中断向量偏移量。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2017-1-22
在线时间
12 小时
发表于 2019-10-30 11:45:17 | 显示全部楼层
BrandonYuan 发表于 2018-12-20 15:08
这个地方确认讲解有误,STM32的中断是通过查找中断向量表来响应的,而中断向量表的位置记录在SCB->VTOR寄存 ...

我和楼主有完全相同的疑问,不知道楼主的解释是否确认了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-30 19:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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