为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 基于ARM的嵌入式系统程序开发要点(五)——ARM/Thumb的交互工作

基于ARM的嵌入式系统程序开发要点(五)——ARM/Thumb的交互工作

2018-04-11 10页 doc 25KB 21阅读

用户头像

is_963767

暂无简介

举报
基于ARM的嵌入式系统程序开发要点(五)——ARM/Thumb的交互工作基于ARM的嵌入式系统程序开发要点(五)——ARM/Thumb的交互工作 基于ARM的嵌入式系统程序开发要点(五) ——ARM,Thumb的交互工作 产业技术与信息 基于ARM的嵌人式系统程序开发要点(五) ARM/Thumb的交互工作 ?ARM中国费浙平 在前面的文章中提到过,很多情况下应用程序需要 在ARM跟Thumb状态之间相互切换,这部分就讨论交 互工作的实现方法和一些注意问题. 1需要交互的原因 前面提到过,Thumb指令在某些特殊情况下具有比 ARM指令更为出色的表现,主要是在代码长度和窄带 ...
基于ARM的嵌入式系统程序开发要点(五)——ARM/Thumb的交互工作
基于ARM的嵌入式系统程序开发要点(五)——ARM/Thumb的交互工作 基于ARM的嵌入式系统程序开发要点(五) ——ARM,Thumb的交互工作 产业技术与信息 基于ARM的嵌人式系统程序开发要点(五) ARM/Thumb的交互工作 ?ARM中国费浙平 在前面的文章中提到过,很多情况下应用程序需要 在ARM跟Thumb状态之间相互切换,这部分就讨论交 互工作的实现方法和一些注意问题. 1需要交互的原因 前面提到过,Thumb指令在某些特殊情况下具有比 ARM指令更为出色的表现,主要是在代码长度和窄带 宽存储器系统性能两方面.正是因为ThUmb指令在特 定环境下的优势,它在很多方面得到了广泛应用.但是 因为下面一些原因,ThUmb又不可能独立地组成一个 应用系统. ?Thumb指令集在功能上只是ARM指令集的一个子 集,某些功能只能在ARM状态下执行,如CPSR和 协处理器的访问. ?进行异常响应时,处理器会自动进入ARM状态. ?从系统优化考虑,在宽带存储器上不应该放置 Thumb代码,很多窄带系统具有宽带的内部存储器. ?即使是一个单纯的Thumb应用系统,也必须加一 个汇编的交互头程序,因为系统总是自动从ARM 开始启动. 所以,不可避免地会产生ARM与Thumb之间交互 的问题. 2状态切换的实现 处理器在ARM/Thumb之间的状态切 换是通过一条专用的跳转交换指令Bx来 实现的.BX指令以通用寄存器(R0,R15) 为操作数,通过拷贝Rn到PC来实现4GB 空间范围内的一个绝对跳转.Bx利用Rn 寄存器中存储的目标地址值的最后一位来 判断跳转后的状态.如图1所示,是用BX 指令实现状态切换. 无论ARM还是Thumb,其指令存储在 存储器中都是边界对齐的(4字节或2字节 对齐).因此,在执行跳转过程中,PC寄 Rn PC 存器中的最低位肯定被舍弃,不起作用.在Bx指令的 执行过程中,最低位正好被用作状态判断的,不会 造成存储器访问不对齐的错误. 下面是一段直接进行状态切换的例程. :从ARM状态开始 C0DE32 ADRR0,Into— Thumb+1 BXR0 C0DE16 Into—— Thumb ADRR5,Back— to— ARM BXR5 C0DE32 ;汇编关键字 ;得到目标地址,末位置1 ;转向Thumb ;执行 ;其它代码 ;汇编关键字 ;Thumb代码段起始地址 ;Thumb代码 ;得到目标地址,末位缺 ;省为0,转向ARM ;执行 ;其它代码 ;汇编关键字 Back— to.. ARM;ARM代码段起始地址 我们知道,在ARM的状态寄存器CPSR中,bit-5是 状态控制位T-bit,决定当前处理器的运行状态.如果直 接修改CPSR的状态位,也能够达到改变处理器运行状 态的目的.但是这样会带来一个问题,因为ARM采用 多级流水线的结构,所以在程序执行过程中,指令流水 当前状态是Thumb时 [三]当前状态是ARM时[ 图1Bx指令实现状态切换 ARM/Thumb选择位: 0一ARM 1一Thumb 82丰?;?u入象惋应两冒皿暖一 线上会存在几条预取指令(具体数目视流水线级数而不 同).当修改CPSR的T.bit后,状态的转变会造成流水 线上预取指令的执行错误.而如果用BX指令,则执行 后会进行流水线的刷新动作,清除流水线 上的残余指令,在新的状态下重新开始指 令预取,从而保证状态转变时指令流的正 确衔接. 3ARM/Thumb之间的调用 在无交互的子程序调用中,其过程比 较简单.实现调用通常只需要一条指令: BLfunction 实现返回也只需要从LR恢复PC即可: MOVPC,LR 函数的调用过程如图2所示. voidfunc1(void) { func20; 方面让编译器能够使用正确的指令码进行编译,另一方 面,当在不同的状态之间发生函数调用时,链接器将插 入一段链接代码(veneers)来实现状态转换. File1.cFile2.c voidfunc1(void)voidfunc2(void) {{ rune20; } } funcl 链接器生成 c2 链接代码—— 图3不同状态间函数调用的示例 上述过程中的一个特点是: 的BL指令来进行子程序调用, 图2普通函数调用 如果子函数和父函数不在同一种状态下执行,因为 状态切换,需要对函数调用作更多的考虑. ?BL不能完成状态切换,需要由BX来切换状态. ?BX不能自动保存返回地址到LR,需要在BX之 前先保存好LR. ?用”BXLR”来返回,不能使用”MOVPC,LR”, 因为这条指令同样不能实现状态切换.返回时要仔细考 虑保存在LR中最低位的是否正确. 假如用户直接使用汇编语言进行状态交互跳转,上 述的几个问题都需要用手工编码加以处理.如果用户使 用高级语言进行开发,不需要为ARM/Thumb之间的相 互调用增加额外编码,但是最好要对其调用过程加以了 解.下面以ARMADS中的编译工具为例进行说明,如 图3所示. ?两个函数func1()和func2()被编译成不同的 指令集(ARM或Thumb). 注意:func1()和func2()在这里位于二个不同 的源文件中. ?编译时必须告诉编译器和链接器足够的信息,一 func1()还是使用通常 而func2()返回时则直 接使用”BXLR”,没有对LR进行判断和最低 位的设置.这是因为当执行BL指令对LR进行 保存时,其最低位会被自动设置,以满足返回 时状态切换的需要,可直接使用”BXLR”. 在上面的例子中,为了让编译器在编译函 数func2()时使用BX而不是BL进行返回,必 须告诉编译器要按照满足交互工作要求的方式 进行编译.在ARM的编译器选项设置中,应 选择”.apcs/interwork”.这样,函数的返回指 令会被正确设置,并且当链接器进行目标代 码的链接时,能够在需要的地方插入正确的链接代码实 现状态切换. 当然,插入了链接代码会相应地增加代码长度,通 常一段veneer包含3条指令,即12B字节长度.可以用 “ 一 infoveneers”选项使链接器输出所有veneers的位置和 长度信息. 4交互程序之间的兼容性 因为在指定交互选项后,编译及链接后的输出代码 跟在无交互情况下不同,所以当多个源文件如果使用了 不同的设置进行编译,相互之间的调用可能产生兼容性 问题.图4说明了这些关系. 在一个使用交互工作的项目管理中,对此要加 以仔细考虑. 5V5架构的扩展 ARM在V5版本的架构中,对ARM/Thumb的交互增 加了新的支持.针对前面第3节中提到的函数调用和返 回问题,V5版本中专门对指令做了扩展. ?增加了新指令BLX,解决了原来BX和BL指令各 |圈田—_Mi.Il&Eb.ddcdsym83 产业技术与信息 允许Thumb-T 图4不同编译方式下函数调用的兼容性 自的欠缺.使 交互的函数调 用可以由一条 指令实现,省100 去了跳转代码80 的开销.60 ?扩展了40 以PC为目标20 地址的数据传0 输指令功能. PC加载值的 最低位将被自 C0deSize 6Thumb—.2 ARM和Thumb因为其各自的优 势,都得到了极为广泛的应用.在一 一 个应用程序中,用户要根据系统的具 体情况灵活分配,使用不同的编译器, 把不同的代码编译成ARM或Thumb, 以希望得到最优的代码长度和性能平 衡.这样做能够达到系统优化的目的, 但是也给人员带来了额外的交互 处理工作.最近,ARM公司公布了一 Performance „l】图5ARM,Thumb和Thumb一2的比较 动送到状态寄存器CPSR的T状态位.也就是说,通过 给PC赋值的方法也能实现状态的切换,这样就使习惯 的函数返回方法——从堆栈中恢复寄存器,也能实现 交互调用函数的正确返回了. 所以,V5架构以后的代码,不再需要额外的链接代 码,缩小了代码长度,提高了状态切换时的执行效率. 当然,在V5及以后的架构中,继续保持了对以前代码 的良好兼容性. 越 项新的发明一Thumb-2指令集,该指令集同时包含32 位和l6位指令,在代码长度和性能之间作了最佳的平 衡.这样,以后用户就可以用一个统一的Thumb-2编译 器来解决现在面临的很多问题了. 如图5所示,是Thumb-2指令集跟ARM和Thumb之 间的比较. 新的指令集将在最新的ARM授权中发布,更多信 息请访问www.arm.com. (本连载最后一部分将发于2004年第l期) 无线发射/接收电路设计 黄智伟编着 北京航空航天大学出版社出版预计出版日期:2004年1月 本书主要介绍无线接收机和无线发射机的体系结构,射频小信号放大器电路,射频功率放大器(RFPA)电路,上变频 器/下变频器电路,调制器/解调器电路,锁相环路(PLL)电路,DDS(直接数字式频率合成器)电路,无线通信系统解 决方案的基本原理,内部结构,技术特性和应用电路设计.本书注重新技术与_T-程性的结合,注重理论性与实用性的结合, _ T-程性好,实用性强. 本书可作为从事无线通信,移动通信,无线寻呼,无绳电话,无线数据采集与传输系统,无线遥控和遥测系统,无线网 络,无线安全防范系统等应用研究的_T-程技术人员,在进行无线通信电路设计时的参考书和_T-具书,也可以作为高等院校通 信,电子等相关专业本科生和研究生的专业教材和教学参考书. 84丰”蠢入式每?{.应固罾皿瞳咽
/
本文档为【基于ARM的嵌入式系统程序开发要点(五)——ARM/Thumb的交互工作】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索