当前位置:   article > 正文

STM32或GD32修改ROM起始地址和中断向量表起始地址程序运行情况_gd32设置向量表起始地址

gd32设置向量表起始地址

一、实验环境:

IDE:IAR8.32,硬件平台:GD32F4xx

二、实验现象:

修改ROM地址为0x08010000,vector地址0x08010000,main函数中中断向量表不设置为0x08010000(即默认值),dubug模式全速运行时出现Hardfault。main函数中中断向量表设置为0x08010000时dubug运行正常。无论是否设置中断向量表,断电重启时,程序无法正常运行。

三、分析原因:

1.在调试状态下:

ROM地址为0x08010000,vector地址为0x08010000,在debug模式下,能在(0x08010000+4)处找到ResetHandler,进而能正常进入main函数,不过SCB->VTOR的值是默认值0x0(对应flash地址应该就是0x08000000),当系统中断发生时,在中断向量表里找不到中断服务函数的地址,因此出现Hardfault。main函数开始时对SCB->VTOR=0x08010000,因此能够正常运行。

2.在断电重启状态下:

断电重启后,系统会从0x08000000处启动,给sp,和pc指针赋值,而ROM地址为0x08010000,vector地址0x08010000,即烧程序时会将程序烧在0x08010000地址处,0x08000000处是空的,因此断电重启无法正常启动

四、其他思考

vector地址0x08000000,ROM地址0x08010000呢?

实际测试结果是无论是调式状态运行还是断电重启运行,都正常。因为此时ResetHandler的地址在0x08010000之后,中断向量表在0x08000000之后,中断向量表的内容(中断函数地址),有正确的ResetHandler的地址,因此中断发生时能够正常运行。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/56633
推荐阅读
相关标签
  

闽ICP备14008679号