cortex-m3关于中断向量和程序跳转一点问题

hliu2009 2017-08-24 09:46:28
问题1:我们知道cortex-m3单片机启动是从绝对地址0x0000 0000开始,绝对地址0x0000 0004存放的是程序的启动代码reset_handle,是不是单片机的中断向量表的存放就是以绝对地址为0x0000 0000开始的?
问题2:若程序烧写在Flash区,假设Flash首地址为0x0040 0000,那么0x0040 0004存放的也是中断向量表的reset_handle吗?如果是,这和绝对地址0x0000 0004的reset_handle有什么区别呢?
问题3:如果我烧写两段代码到flash区间,两段代码的起始绝对地址分别是0x0040 0000和0x0040 1000,是不是意味着两段代码各自有一个中断向量表在其Flash起始地址的开始,即0x0040 0004和0x0040 1004分别为程序1和程序2的reset_handle的入口地址,想要从程序1跳转到程序2,只需要在程序1中用指令跳转到0x0040 1004即可呢?
...全文
500 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ObrienHuang 2017-08-30
  • 打赏
  • 举报
回复
你有多个程序,那在程序的启动函数中需要对中断向量表进行重定向,否则程序遇到中断就跑飞了 ,具体设置的是这个寄存器SCB->VTOR
tianxj001 2017-08-25
  • 打赏
  • 举报
回复
所谓中断向量表,其实就是一个绝对跳转指令,跳转的目标,才是真正的中断服务程序,这个是由编译器在编译过程确定,并把绝对地址加载到向量表,而cortex-m3包括其他cortex-mx系列其向量表地址都是固定在00000000开始的一段固定地址。 烧写两段代码到flash区间,两段代码的起始绝对地址分别是0x0040 0000和0x0040 1000,只需要在程序1中用指令跳转到0x0040 1004,这是正确的,事实上我们各种子程序,调用时候,编译器就是这样操作的。 但是“是不是意味着两段代码各自有一个中断向量表在其Flash起始地址的开始”这个描述就是错误的。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧