赞
踩
IDE:IAR8.32,硬件平台:GD32F4xx
修改ROM地址为0x08010000,vector地址0x08010000,main函数中中断向量表不设置为0x08010000(即默认值),dubug模式全速运行时出现Hardfault。main函数中中断向量表设置为0x08010000时dubug运行正常。无论是否设置中断向量表,断电重启时,程序无法正常运行。
ROM地址为0x08010000,vector地址为0x08010000,在debug模式下,能在(0x08010000+4)处找到ResetHandler,进而能正常进入main函数,不过SCB->VTOR的值是默认值0x0(对应flash地址应该就是0x08000000),当系统中断发生时,在中断向量表里找不到中断服务函数的地址,因此出现Hardfault。main函数开始时对SCB->VTOR=0x08010000,因此能够正常运行。
断电重启后,系统会从0x08000000处启动,给sp,和pc指针赋值,而ROM地址为0x08010000,vector地址0x08010000,即烧程序时会将程序烧在0x08010000地址处,0x08000000处是空的,因此断电重启无法正常启动
vector地址0x08000000,ROM地址0x08010000呢?
实际测试结果是无论是调式状态运行还是断电重启运行,都正常。因为此时ResetHandler的地址在0x08010000之后,中断向量表在0x08000000之后,中断向量表的内容(中断函数地址),有正确的ResetHandler的地址,因此中断发生时能够正常运行。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。