ARM中断向量表与响应流程..docxVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM中断向量表与响应流程.

一首先中断向量表定义在哪里?如何加载??二中断向量表与中断服务程序三处理流程////////////////////////////////////////////////////////////////////////////////////////////////////一首先中断向量表定义在哪里?__vectors_start首先中断向量表定义的是什么?定义的就是中断服务程序的跳转指令,因为每个中断向量在向量表中只有一个字节的存储空间,只能存放一条指令,所以通常存放跳转指令,使程序跳转到存储器的其他地方,再执行中断处理。这里cpu就可以找中断服务程序,跳转指令如例如:LDR PC, =ISR_HANDLER;或者指令与不同的cpu平台有关系。?1.1 vector表定义的方式:往往是变量地址:如..globl __vectors_start定义__vectors_start符号,这样外部程序可以访问到。entry-armv.S__vectors_start:swi SYS_ERROR0bvector_und + stubs_offsetldr pc, .LCvswi + stubs_offsetbvector_pabt + stubs_offsetbvector_dabt + stubs_offsetbvector_addrexcptn + stubs_offsetbvector_irq + stubs_offsetbvector_fiq + stubs_offsetARM的异常处理向量表在entry-armv.S文件中:1.2 中断向量表 类型?From ARM.globl __vectors_start定义__vectors_start符号,这样外部程序可以访问到。__vectors_start:定义异常(地址逻辑自上而下0x00----0x1c) 跟具体的cpu特性有关 ARM(????????swi????????SYS_ERROR0????????)向量0:reset,但是这里被修改了,如果是cpu跑到了0地址,用软件中断SYS_ERROR0来处理. THUMB(????????svc????????#0????????????????)向量1 THUMB(????????nop????????????????????????)向量2W(b)????????vector_und + stubs_offset向量3 #未定义指令异常W(ldr)????????pc, .LCvswi + stubs_offset向量4#软中断W(b)????????vector_pabt + stubs_offset #向量5指令预取异常中断(Prefetch Abort )W(b)????????vector_dabt + stubs_offset #向量6数据中止W(b)????????vector_addrexcptn + stubs_offset #向量7地址异常These arent too critical.W(b)????????vector_irq + stubs_offset #向量8.IRQ(一般中断)W(b)????????vector_fiq + stubs_offset #向量9 FIQ(快速中断)??/*关于.globl指令:? ? .global/.globl 命令?? ? .global symbol?? ? .global 使得连接程序(ld)能够识别 symbl????声明symbol是全局可见的。标号_start是GNU链接器用来指定第一个要执行指令所必须的,同样的是全局可见的(并且只能出现在一个模块中)?? ? 例如:? ??? ? .global _start? ? #定义 _start 为外部程序可以访问的标签 ?__vectors_start符号,又存放在哪里呢?有不同的方式,可以指定加载的ram地址,如\kernel\arch\c6x\kernel平台SECTIONS{/* * Start kernel read only segment */READONLY_SEGMENT_START?.vectors :{_vectors_start= .;*(.vectors). = ALIGN(0x400);_vectors_end= .;}指定好了vector在内核镜像加载到内存后的地址0x400;?但是arm就不指定,如下,在启动之后存放的地址://中断服务处理程序c000b500 T __kuser_helper_startc000b500 t __kuser_memory_barrierc000b520 t __kuser_cmpxchgc0

文档评论(0)

kaiss + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档