问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是arm中断向量表

发布网友 发布时间:2022-04-05 13:40

我来回答

4个回答

热心网友 时间:2022-04-05 15:09

发生一个中断时,一般都要执行一段中断处理程序。在ARM中预先定义了许多芯片支持的中断类型,但是中断处理程序需要用户自己去写,这样ARM只对不同的中断类型提供了一个预定义的地址,但是这些预定义的地址里面是不够存放用户编写的中断处理程序的。

用户自己写了中断处理程序,然后把中断处理程序的入口放在系统预定义的中断地址处,这样在发生中断后就会跳转到用户编写的中断处理程序处。

中断很多,形成了一个跳转表,成为中断向量表

热心网友 时间:2022-04-05 16:27

arm中断向量表是指 arm在指令执行期间发生异常时,PC自动指向某一地址取指令执行中断响应程序,而PC指向的地址不唯一,这些地址与不同的异常一一对应,这些地址固定的映射到物理内存的低地址,这一段专门用来处理中断响应的地址就构成中断向量表。

热心网友 时间:2022-04-05 18:02

初看ARM中断系统觉得有点乱,写点东西希望对大家有点帮助 
中断详细建立过程(1)
首先我们先来看两个东西.
;/* EXCEPTION HANDLER VECTOR TABLE */

^ DRAM_BASE
HandleReset # 4
HandleUndef # 4
HandleSwi # 4
HandlePrefetch # 4
HandleAbort # 4
HandleReserv # 4
HandleIrq # 4
HandleFiq # 4
小注: 这里的^是MAP,#是FIELD
也就是在DARM的BANK0里面开始的地方定义了一个中断向量表,用于存放中断程序的入口地址。

ExceptionHandlerTable
DCD UserCodeArea
DCD SystemUndefinedHandler
DCD SystemSwiHandler
DCD SystemPrefetchHandler
DCD SystemAbortHandler
DCD SystemReserv
DCD SystemIrqHandler
DCD SystemFiqHandler
这个表中存放的是汇编程序中中断处理函数的入口地址,每一项对应一个中断函数。

下面我们从程序的开始处分析:
AREA Init, CODE, READONLY
ENTRY

B Reset_Handler
B Undefined_Handler
B SWI_Handler
B Prefetch_Handler
B Abort_Handler
NOP Reserved vector
B IRQ_Handler
B FIQ_Handler

FIQ_Handler
SUB sp, sp, #4
STMFD sp!, {r0} FD满递减堆栈 执行寄存器压栈操作.
LDR r0, =HandleFiq 汇编里的处理函数地址,然后跳到C中,在DRAM。
LDR r0, [r0] 中断向量地址给R0.
STR r0, [sp, #4] 中断向量地址给
LDMFD sp!, {r0, pc}
在程序的开始处,首先建立了默认的中断调用函数.这个过程大家一定非常熟悉,
首先执行了压栈,然后给出了中断入口地址.这个HandleFiq就是我们前面提到的在DRAM中建立的中断向量其中一个的地址。
在HandleFiq开始的四个字节中,放着汇编中断处理函数的入口地址。

汇编中断处理函数的地址是如何放到DRAM中断向量表里的呢?

我们上面提到的另一个表就发挥作用了。看下面这段程序:
EXCEPTION_VECTOR_TABLE_SETUP
LDR r0, =HandleReset
LDR r1, =ExceptionHandlerTable
MOV r2, #8

ExceptLoop
LDR r3, [r1], #4
STR r3, [r0], #4
SUBS r2, r2, #1 Down Count
BNE ExceptLoop ;; 从表里取出来给了HandleReset后面的空间
这一段把ExceptionHandlerTable里的中断处理函数的地址拷贝给了DRAM里的中断向量表。这样两者就联系起来
在执行程序开始的跳转之后就自然跳到了*******Handler.真正的处理函数之一如下所示:

它实际上只调用了C语言的中断处理函数,其他什么也没做。
SystemFiqHandler
IMPORT ISR_FiqHandler
STMFD sp!, {r0-r7, lr}
BL ISR_FiqHandler
LDMFD sp!, {r0-r7, lr}
SUBS pc, lr, #4

它实际上只调用了C语言的中断处理函数,其他什么也没做。
void ISR_FiqHandler(void)
{
IntOffSet = (U32)INTOFFSET;
(IntOffSet>>2)
(*InterruptHandlers[IntOffSet>>2])(); // Call interrupt service routine
}

热心网友 时间:2022-04-05 19:53

就是什么情况下会终端
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
膀胱癌医生要为什么要检查上尿路? 游览器书签怎样添加到手机桌面 玫瑰花是早上开还是晚上开 玫瑰是晚上开花吗 左拾遗是什么官左拾遗的解释 怎样炖羊肉好吃又烂 怎样炖羊肉软烂无膻味好吃 ...之心度君子之腹的意思以小人之心度君子之腹的解释以小人之心度君子... 以小人之心度君子之腹什么意思以小人之心度君子之腹出处介绍 苹果macbook pro开机音乐是什么 苹果台式电脑声音苹果电脑开机声音怎么设置 :8088中断向量表的作用是什么 简述中断向量、中断向量表及中断服务程序的区别? 中断向量表的功能是什么?简述CPU利用中断向量表转入中断服务的过程。 在计算器上,+.-.x.÷叫什么键? 计算器中有数字的键叫什么? 电脑360加速球显示CPU到百分之九十什么软件也没开 过几秒又跳到百分之三十啥毛病? 电脑明明没用多少东西,为什么360加速球上升到百分之90呢 电脑没用什么东西,360加速球飙升到百分之90多,卡死了 这电脑东西开多了,360那球球就显示90%多,加个内存条能解决不? 360加速球经常显示cpu占用过高,总是90%以上,电脑还卡,慢,请问怎么解决? 电脑太慢,太卡。360加速球总显示百分90以上 我的电脑360加速球为什么总是满了达到90%多,求解 每次电脑一开机360加速球就显示红色百分之90多,很卡。没运行什么程序。 OPPO R11怎么设置能让所有应用都分屏 手机怎样解除工厂模式 OPPO手机进入工厂模式,退不出来 手机进入工厂模式后恢复出厂设置和重启都退出不了怎么办 手机不知道进入了工程模式还是工厂模式退不出去了? 我的步步高家教机是H8S,开机后出现工厂模式。怎么样才可以退出去? 联想手机开机时出现了工厂测试工具,怎么退出?如果要恢复出厂设置, 中断向量表和中断描述符表的功能是什么?如何利用它们获得中断服务程序的入口地址? 请问在计算机操作系统中,中断号,中断向量和中断向量表的概念各是什么? 8680的中断向量表如何组成?作用是什么? 什么是ARM异常中断处理向量表?他有何作用?储存在什么地方? os资料共享 oppo手机上的计算器被删怎么恢复? OPPO计算器怎么恢复 不小心把oppo自带计算器卸了,怎么回复? oppo计算器不见了 OPPO A72手机自带的计算器,指南针,录音软件被删除了,应用商店找不到了,怎么办,影响使用吗? 我的OPPO手机里的计算器被不小心删除了。怎么可以弄个原来的呢 oppor9的自带计算器不小心卸载了,怎么恢复? oppor9自带的计算机误删了 怎么恢复 隐藏加密了的文件,在哪里找到? 华为手机nove4摄像头怎么用 java单例设计模式 请问,Java中,单例设计模式是个什么意思,优势何在。 java单例设计模式求解惑 将一个类设计成单例设计模式,需要哪些步骤 JAVA里两种单例模式的区别是什么?为什么说一般认为第一种形式要更加安全些?如下见