野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1009|回复: 4

[求助] 裸机开发篇-第80讲中断向量表,start.s一级查表配置问题

[复制链接]
发表于 2023-7-28 22:22:55 | 显示全部楼层 |阅读模式
.global _start
_start:
    ldr     pc, =Reset_Handler          /* Reset                 */
    ldr     pc, =Undefined_Handler      /* Undefined instructions */
    ldr     pc, =SVC_Handler            /* Supervisor Call       */
    ldr     pc, =PrefAbort_Handler      /* Prefetch abort        */
    ldr     pc, =DataAbort_Handler      /* Data abort            */
    .word   0                            /* RESERVED               */
    ldr     pc, =IRQ_Handler            /* IRQ interrupt         */
ldr     pc, =FIQ_Handler             /* FIQinterrupt          */
Reset_Handler:
……   //此处省略Reset_Handler中间代码   
    /*跳转到到 main 函数执行,*/
   b main   
   b .        /*死循环*/

为什么在_start标签中要逐一为pc指针赋值?
我的理解是:第一条指令执行ldr  pc, =Reset_Handler后,程序跳转到Reset_Handle执行,然后直接跳转到main函数?那后面的指令还会被执行吗?
不知道是不是我的理解有问题,求懂的大哥指导


野火论坛202306272235168803..png
回复

使用道具 举报

 楼主| 发表于 2023-7-28 22:24:02 | 显示全部楼层
不小心贴错图了,忽略下面的图片。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-29 20:55:06 | 显示全部楼层
顶一下顶一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-30 11:26:14 | 显示全部楼层
顶顶顶顶
回复

使用道具 举报

 楼主| 发表于 2023-7-30 16:33:46 | 显示全部楼层
已找到答案,在这里记录一下

在i.mx6ull中断向量表部分的代码中,_start标签表示程序的入口点。程序开始执行时,它会首先执行ldr pc, =Reset_Handler这一指令,该指令将Reset_Handler的地址加载到寄存器pc中,并通过跳转指令实现跳转到该地址处执行中断处理函数。然后,程序会进入中断向量表,寻找相应的处理函数,具体如下:
•        如果发生未定义的指令,程序会跳转到Undefined_Handler处理函数。
•        如果发生SVC类型的中断,程序会跳转到SVC_Handler处理函数。
•        如果发生Prefetch Abort异常,程序会跳转到PrefAbort_Handler处理函数。
•        如果发生Data Abort异常,程序会跳转到DataAbort_Handler处理函数。
•        如果发生IRQ类型的中断,程序会跳转到IRQ_Handler处理函数。
•        如果发生FIQ类型的中断,程序会跳转到FIQ_Handler处理函数。
在Reset_Handler中,程序首先关闭全局中断,然后使用MRC指令读取CP15系统控制寄存器中的值。接下来的一系列BIC指令用于清除寄存器中的特定位,用于关闭I Cache、D Cache、严格对齐、分支预测、MMU等功能。之后,程序通过MCR指令将修改后的值写回CP15寄存器。此外,程序还会定义栈的起始地址,然后跳转到系统初始化函数(SystemInit)进行系统初始化。最后,开启全局中断并通过跳转指令跳转到main函数执行。
对于剩余的ldr pc, =label指令,它们不会被实际执行。这些指令只是用于为中断处理函数指定相应的程序地址,以便在发生中断时跳转到正确的处理函数。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-2 18:11 , Processed in 0.036998 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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