打印

【转】GD32(Cortex-M3)启动过程(入口地址)

[复制链接]
2896|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ARM7和ARM9启动时从绝对地址0X00000000开始执行复位中断程序,即固定了复位后的起始地址,但中断向量表的位置是可变的。
沙发
niuyaliang|  楼主 | 2015-1-24 11:01 | 只看该作者
Cortex-M3内核规定中断向量表中第一个32位数据内容为栈顶地址,第二个32位数据内容则是复位中断向量的入口地址。

使用特权

评论回复
板凳
niuyaliang|  楼主 | 2015-1-24 11:02 | 只看该作者
这样CPU复位后会自动从中断向量表中第二个32位数据中取出复位中断向量的入口地址,PC就跳转到中断服务程序。这也就是为什么调试的时候程序会直接跳到0x08000144(中断向量表中第二个32位数据为0x08000145),而不是停在0x08000000。

使用特权

评论回复
地板
niuyaliang|  楼主 | 2015-1-24 11:02 | 只看该作者
Cortex-M3的中断向量表的结构是固定的,而位置的地址是可变的。
Cortex-M3的初始中断向量表有三个位置,通过BOOT引脚进行启动设置。

BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。中断向量表定位于FLASH区,复位后PC=0x80000000.  

BOOT1=0 BOOT0=1 从系统存储器启动(相当于厂家在存储器中固化了BOOTLOADER),这种模式启动的程序功能由厂家设置。

BOOT1=1 BOOT0=1从内置SRAM启动,这种模式可以用于调试。这种模式下,中断向量表位于SRAM区,起始地址为0x20000000.复位为PC=0x20000000.

当STM32复位完成后,可通过设置VECTOR_TABLE,将中断向量表放置在任何地方。

使用特权

评论回复
5
vivilzb1985| | 2015-2-10 21:26 | 只看该作者
niuyaliang 发表于 2015-1-24 11:02
这样CPU复位后会自动从中断向量表中第二个32位数据中取出复位中断向量的入口地址,PC就跳转到中断服务程序 ...

楼上这样讲解的,,我明白了一些的额。

使用特权

评论回复
6
firstblood| | 2015-2-11 22:20 | 只看该作者
这个需要注意中断向量表的啊。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝