ARM的中断向量表,及DCD伪指令

ARM的中断向量表,及DCD伪指令当中断或异常发生的时候,CPU自动将PC指向一个特定的地址,这个地址就是中断向量表。在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中断服务例程的功能。例如: IRQEntryBHandleIRQ;跳转范围较小 LDRPC,=HandleFIQ   ;LDR伪指令等效生成1条存储读取指令和1条32位常数定义

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

当中断或异常发生的时候,CPU自动将PC指向一个特定的地址,这个地址就是中断向量表。

在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中

断服务例程的功能。例如: 
IRQEntry B HandleIRQ ;跳转范围较小 
LDR PC,=HandleFIQ     

;LDR伪指令等效生成1条存储读取指令和1条32位常数定义指令。32位常数存储在LDR指令四周的存储单元
中,相对偏移小于4KB。该32位数据就是要跳转到的中断服务程序入口地址。 
之所以使用LDR伪指令,是因为ARM的RISC指令为单字指令,不能装载32位的立即数 (常数),无法直接
把一个32位常数数据或地址数据装载到寄存器中。所以我们一般将中断向量按如下方式设置中断向量表

[plain] 
view plain  
copy

  1. LDR     PC, Reset_Addr             1  
  2. LDR     PC, Undefined_Addr  
  3. LDR     PC, SWI_Addr  
  4. LDR     PC, Prefetch_Addr  
  5. LDR     PC, Abort_Addr  
  6. NOP                             ; Reserved vector must be remained  
  7. LDR     PC, IRQ_Addr  
  8. LDR     PC, FIQ_Addr  
  9.    
  10. Vector_Addr_Table  
  11.    
  12. Reset_Addr      DCD     Reset_Handler          9  
  13. Undefined_Addr DCD     UndefinedHandler  
  14. SWI_Addr        DCD     SWIHandler  
  15. Prefetch_Addr   DCD     PrefetchAbortHandler  
  16. Abort_Addr      DCD     DataAbortHandler  
  17. IRQ_Addr        DCD     IRQHandler  
  18. FIQ_Addr        DCD     FIQHandler  
ARM的中断向量表,及DCD伪指令

上面中断向量表的第9行就是从地址0X00000020开始分配一个字的空间(也就是4字节),这4个字节的内容就是Reset_Handler函数的地址0X00001000。Reset_Addr的值就是这4个字节的首地址0X00000020。
DCD是ARM的伪指令。作用是分配一个字的空间。功能类似于C51里定义一个数组并初始化。
Unsigned char Reset_Addr[4]={0x00,0x00,0x10,0x00};
对比一下就明白了。
 
再分析第1行。LDR只能在当前PC的4KB范围内跳转,B命令只能在当前PC的32MB范围内调转。
Reset_Handler的地址是0X00001000,已经超出了当前PC的4K范围,所以不能用
LDR     PC, 
Reset_Handler
这里不好理解,涉及到ARM的寻址方式。
LDR Rn,语句标号
这种表达式里,是相对寻址,基址是程序计数器PC,偏移量是语句标号到PC处的指令条数。
LDR PC,语句标号只能在当前PC的4KB范围内跳转的原因是这条指令译码后,偏移表达式占用指令代码32位的最后12位,也就是2^12=4KB。
 
完整的分析下,以复位为例。地址0X00000020开始的4字节内容是复位处理函数Reset_Handler的地址0x00001000。Reset_Addr的地址是0X00000020。当产生复位时,PC=0x00000000,跳到第1行语句执行。LDR     PC, Reset_Addr把
0X00000020处的一个字的内容送到PC,然后PC跳转到0X00001000处开始执行。
LDR     PC, Reset_Addr是间接寻址,就是把地址Reset_Addr处的一个字送


/************************************************************************************/
 以下内容是自己猜测补充,在看课程的时候,用C语言实现中断的时候 ,直接将函数地址赋值给中断向量表 ,我觉着应该是将一条跳转指令赋给中断向量表才符合上面所讲,在此还有疑问但是我猜测,我猜测经过编译后该中断向量表处还是一条跳转指令,跳转的地址就是向该地址写入的值。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/223027.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • web前端技术讲解之CSS中position的定位技术

    web前端技术讲解之CSS中position的定位技术

  • 系统管理日志怎么看_19年发生了太多事日志

    系统管理日志怎么看_19年发生了太多事日志说起日志,大家都是耳熟能详的,一大堆日志插件映入眼帘,日志收集的方式也历历在目,但是,今天我们的重点不仅仅是收集日志了,今天我们主要说说怎么管理日志收集日志日志管理的第一件事,就是日志的收集。日志

  • javase学习笔记

    javase学习笔记01.01_计算机基础知识(计算机概述)(了解)A:什么是计算机?计算机在生活中的应用举例计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成,没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、笔记本计算机、大型计算机等。应用举例1:科学计算2、数据处理3、自动控制4、计算机辅助设计…

  • aic准则和bic准则_用户故事准则

    aic准则和bic准则_用户故事准则aic准则和bic准则免责声明:这篇文章摘自内部Codurance文档,该文档用于帮助我们的学徒学习我们的工作方式。我们都知道每个项目都是不同的,而且我们绝不能在任何地方应用完全相同的技术和实践。但是,以下文字不仅作为基础,而且还是我们所有人涉及用户故事时的指南。有很多关于用户故事的好书和帖子。这篇文章绝不是该领域所有良好实践的总结。用户故事是收集需求,就需要完成的事情达成共识…

  • pve 删除虚拟机「建议收藏」

    qmdestroy100#之后以一下查看虚拟机qmlist100常用命令:qmguestcmd<vmid><command>qmguestexec-status<vmid><pid>qmguestpasswd<vmid><username>[OPTIONS]qmguestexec<vmid>[<extra-args>][OP.

  • STM32 JLINK接口定义 JTAG/SWD「建议收藏」

    STM32 JLINK接口定义 JTAG/SWD「建议收藏」

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号