2014年ARM与嵌入式技术 培训课件 第6章.pptVIP

2014年ARM与嵌入式技术 培训课件 第6章.ppt

  1. 1、本文档共23页,可阅读全部内容。
  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文档。上传文档
查看更多
6.4 交互子程序和Veneer 我们可以通过下面的操作完成两文件间的交互工作: armasm arm.s armasm thumb.s –apcs/interwork armlink arm.o thumb.o 通常在编译程序时,我们应尽量选用-apcs/interwork选项。-apcs/interwork编译器选项可以保证所有的ARM和Thumb 、C或C++编译器编译的模块能够在各种处理器状态间相互调用: tcc -apcs /interwork armcc -apcs /interwork tcpp -apcs /interwork armcpp -apcs /interwork 在interwork选项下编译的代码模块会比原Thumb或ARM代码模块大一些,例如对Thumb程序,典型的会增加约2%的容量。因此没有必要对所有的程序进行交互编译,只对那些包含交互子程序调用的程序进行交互编译即可。 * 6.4 交互子程序和Veneer Veneer 所谓Veneer是由连接器自动生成并插入到汇编程序的一小段代码。通 常在下面两种情况下,连接器会生成Veneer: (1)被调用程序包含状态切换; (2)被调用程序的地址超出了调用指令的寻址范围。 连接时,连接器先找到veneer,再连接需调用的程序。根据被调用程 序的状态,以及其与调用者间距离的远近,Veneer包含三种状态:长、短 以及内嵌。 由此可见,Veneer的使用会增加代码的长度。如果调用者在距离相距 不远的空间内多次调用相同的程序,则连接器会尽量使用相同的Veneer, 而非生成新的Veneer,从而在一定程度上减小了代码量。为了使Veneer尽 量的减少占用空间,我们可以采取以下两种措施: (1)尽量使关联的程序的存储空间靠近; (2)较少状态切换。 * 6.4 交互子程序和Veneer 利用Veneer,在满足下列规则的条件下,可以方便的进行C 和C++以及汇编语言程序间的交互工作: 1)调用者程序的编写可不考虑交互工作的问题,对于汇编语 言编写的程序使用BL指令进行程序调用。 2)若被调用程序为C语言程序,使用-apcs /interwork选项进 行编译;若被调用程序为汇编语言程序,设置其INTERWORK 属性并用BX lr返回。 在Embest IDE集成开发环境中,对于交互工作的编译设置 起来更为简单,只需根据情况,在属性设置界面的assembler 对话框中选中“make the assembled code as supporting interworking”或在complier对话框中选中“ARM interworking” 或“Thumb interworking”即可。 * 第6章 ARM-Thumb交互工作 * AJFJDSHFDHGKHFKLGHSKHGLKDHGJHLKSHDGJLSHLGDHSLHG 6.1 交互工作原理 T版本的ARM体系结构支持ARM程序和THUMB程序混合编程,所谓交互工作就是程序执行过程中,可以根据需要进行ARM状态和THUMB状态的切换。 交互工作的必要性 为一个Thumb兼容的ARM处理器编写代码时,ARM指令的程 序和THUMB指令的程序各有自己的优势,对于8位和16位的存 储系统来说,Thumb指令可以提供更好的代码密度和性能,对 于32位的存储系统来说,ARM指令则占有速度和性能上的优 势。除此之外,在许多场合,也使得arm和thumb之间的切换 变得必要。例如: * 6.1 交互工作原理 (1)速度:某些强调速度的场合下,应考虑在系统中包含一个32位的 存储器,从而利用arm代码提供更好的性能,满足设计要求。 (2)功能:Thumb指令没有ARM灵活,另外某些操作,例如直接读取 PSR的值、使无效或有效中断以及改变工作模式、对协处理器的操作等 等,只能通过ARM指令实现。 (3)异常处理:当进入异常中断处理程序时,处理器会自动进入 ARM状态,这就意味着异常处理程序的起始部分必须用ARM指令编写, 若中断处理程序需要Thumb指令来完成,则需要在中断处理程序中切换 到Thumb指令状态,在处理结束时,还必须切换回ARM状态来完成程序 的返回。 (4)单独的Thumb程序:Thumb兼容的ARM处理器总是从ARM状 态开始执行指令的,因此即使对于简单的Thumb汇编语言程序,也必须 在程序的开头添加一个ARM指令的程序头,使其从ARM状态切换到T humb状态执行。 * 6.1 交互工作原理 交互工作的切换指令 使用分支跳转指令BX即可完成处理器Thumb状态和ARM状态的 切换。语法格式如下: Thumb状态下的切换指令:

文档评论(0)

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

1亿VIP精品文档

相关文档