您好!欢迎访问体育外围平台!
专注精密制造10载以上
专业点胶阀喷嘴,撞针,精密机械零件加工厂家
联系方式
陈小姐:13899999999
周先生:13988888888
您当前的位置: 主页 > 新闻动态 > 常见问题 >

常见问题

ARM嵌入式系统中断向量表的动态配置

更新时间  2011-01-14 20:43 阅读
本文摘要:一般32位ARM嵌入式系统的中断向量表是在程序编译器之前设置的。在编写32位ARM嵌入式系统的中断服务程序时,设置和更改ARM架构的中断向量表,往往会非常困难,被迫更改编码代码,特别是对于不讨厌编码的程序员。当中断向量程序在程序运行过程中必须动态改变时,会比较不方便,而且会被迫减少很多分支处理指令才能构建。 因此,本文明确提出了一种简单高效的分配方法,构建了arm嵌入式系统中断向量表在运行时动态分配给ROM烧结程序的功能。

体育外围平台

一般32位ARM嵌入式系统的中断向量表是在程序编译器之前设置的。在编写32位ARM嵌入式系统的中断服务程序时,设置和更改ARM架构的中断向量表,往往会非常困难,被迫更改编码代码,特别是对于不讨厌编码的程序员。当中断向量程序在程序运行过程中必须动态改变时,会比较不方便,而且会被迫减少很多分支处理指令才能构建。

因此,本文明确提出了一种简单高效的分配方法,构建了arm嵌入式系统中断向量表在运行时动态分配给ROM烧结程序的功能。1在32位arm系统中设置arm中断向量的两种方法,一般是在中断向量表中放置一条分支指令或一条PC寄存器读取指令,构造调用程序函数的函数来中断服务例程。

体育外围平台

比如:IRQEntryBHandleIRQ函数调用范围小BHandleFIQ或IRQEntryLDRPC,=handleinrq函数调用的范围给定32位地址空间LDRPC,伪指令=HandleFIQLDR等效分解一条存储加载指令和一条32位常量定义指令。32位常量存储在LDR指令附近的存储单元中,比较位移大于4KB。32位数据是函数要调用的中断服务程序的入口地址。之所以在LDR伪指令中使用,是因为arm的RISC指令是单字指令,不能加载32位立即数(常量),也没有必要将32位常量数据或地址数据加载到寄存器中。

下面的通用程序在功能上等同于上面的伪指令,但是中断向量表描述的比较清楚。矢量是比较LDR指令的偏移量:IRQEntryLDRPC,矢量0;相当于LDRPC,=HandleIRQLDRPC,vector table 4;相当于LDRPC,=handleFiq vectorablecdhandletrqdcchandlefiq HandleFIQ。一般情况下,ARM嵌入式系统的程序都是烧结在从00000000H开始的低端ROM空间,中断VectorTable也是烧结在ROM中的,所以上述两种方法在程序运行时无法动态随机改变中断向量表。对于arm处理器的新手和有经验的程序员来说,设置中断向量都是非常复杂的,因此需要改变ARM的C程序的启动代码。

编译一个难的代码不方便,更容易出错。X86和arm处理器中断向量表比实模式更为X86程序员所熟悉。在X86架构的PC系统中,无论是编译还是C语言,中断向量表都是可以动态随机设置和更改的。

只有简单地把中断例程的入口地址加载到中断向量表的数据区,才能设置向量表。设置X86向量表的方便有两个原因。一种是中断向量表几乎与程序代码分离,中断向量表设置在ram数据空间,向量表存储的数据是纯地址数据;存储在arm向量表中的是与中断服务例程入口相关的分支指令。还有一个原因是,除了BIOS之外,大部分PC程序都是在运行时读入RAM的,程序数据是无法区分的,所以在程序运行时更容易将程序从数据中分解出来,也更容易将CPU控制权转移给新分解的程序。

体育外围平台

从表面上看,ARM的第二种中断向量设置方法中的VectorTable也是显式的地址数据,没有指令代码,所以有可能在RAM数据段中设置VectorTable。


本文关键词:ARM,嵌入式,系统,中断,向,量表,的,动态,配置,体育外围网站

本文来源:体育外围平台-www.whbsjs.com