新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ARM的嵌入式系统程序开发要点(五)

基于ARM的嵌入式系统程序开发要点(五)

作者: 时间:2016-12-02 来源:网络 收藏


3ARM/Thumb之间的函数调用

在无交互的子程序调用中,其过程比较简单。实现调用通常只需要一条指令:
BL function

实现返回也只需要从LR恢复PC即可:
MOV PC, LR

函数的调用过程如图3所示。



如果子函数和父函数不在同一种状态下执行,因为状态切换,需要对函数调用作更多的考虑。
①BL不能完成状态切换,需要由BX来切换状态。
②BX不能自动保存返回地址到LR,需要在BX之前先保存好LR。
③用“BX LR”来返回,不能使用“MOV PC, LR”,因为这条指令同样不能实现状态切换。返回时要仔细考虑保存在LR中最低位的内容是否正确。

假如用户直接使用汇编语言进行状态交互跳转,上述的几个问题都需要用手工编码加以处理。如果用户使用高级语言进行开发,不需要为ARM/Thumb之间的相互调用增加额外编码,但是最好要对其调用过程加以了解。下面以ARM ADS中的编译工具为例进行说明,如图4所示。



①两个函数func1()和func2()被编译成不同的指令集(ARM或Thumb)。
注意:func1()和 func2()在这里位于二个不同的源文件中。
②编译时必须告诉编译器和链接器足够的信息,一方面让编译器能够使用正确的指令码进行编译,另一方面,当在不同的状态之间发生函数调用时,链接器将插入一段链接代码(veneers)来实现状态转换。


评论


技术专区

关闭