WindowsCE异常和中断服务程序

WindowsCE异常和中断服务程序,第1张

 

  1.中断/异常相量的装入和执行方式

  中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行的代码转而执行事件响应的服务程序。而事件服务程序的入口点就是中断/异常向量所在的位置。ARM的中断向量可以是0x0开始的低地址向量,也可以是在FFFF0000位置的高向量地址。winCE下使用高地址作为trap区,所以在CE下arm使用高地址向量。

  VectorINStrucTIONs

  ldr pc, [pc, #0x3E0-8] ; reset

  ldr pc, [pc, #0x3E0-8] ; undefined inSTrucTIon

  ldr pc, [pc, #0x3E0-8] ; SVC

  ldr pc, [pc, #0x3E0-8] ; Prefetch abort

  ldr pc, [pc, #0x3E0-8] ; data abort

  ldr pc, [pc, #0x3E0-8] ; unused vector locaTIon

  ldr pc, [pc, #0x3E0-8] ; IRQ

  ldr pc, [pc, #0x3E0-8] ; FIQ

  而在ffff03e0的位置放上如下的数据,每一项(32bit)对应一个异常的跳转地址也就是winCE的异常/中断向量跳转表。该表项的内容就是发生异常后将要执行的服务程序的入口地址。具体如下。

  VectorTable

  DCD -1 ; reset

  DCD UndefExcepTIon ; undefined instruction

  DCD SWIHandler ; SVC

  DCD PrefetchAbort ; Prefetch abort

  IF :DEF:ARMV4T :LOR: :DEF:ARMV4I

  DCD OEMDataAbortHandler ; data abort

  ELSE

  DCD DataAbortHandler ; data abort

  ENDIF

  DCD -1 ; unused vector

  DCD IRQHandler ; IRQ

  DCD FIQHandler ; FIQ

  在上面的这些代码/数据在内存空间上按照上述要求放置好以后,每次触发一个异常就自动运行到相应跳转表项所对应的地址执行。

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2713931.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存