新闻中心

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

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

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


上述过程中的一个特点是:func1()还是使用通常的BL指令来进行子程序调用,而 func2()返回时则直接使用“BX LR”,没有对LR进行判断和最低位的设置。这是因为当执行BL指令对LR进行保存时,其最低位会被自动设置,以满足返回时状态切换的需要,可直接使用 “BX LR”。

在上面的例子中,为了让编译器在编译函数func2()时使用BX而不是BL进行返回,必须告诉编译器要按照满足交互工作要求的方式进行编译。在ARM的编译器选项设置中,应选择“-apcs /interwork”。这样,函数的返回指令会被正确设置,并且当链接器进行目标代码的链接时,能够在需要的地方插入正确的链接代码实现状态切换。

当然,插入了链接代码会相应地增加代码长度,通常一段veneer包含3条指令,即12B字节长度。可以用“-info veneers”选项使链接器输出所有veneers的位置和长度信息。

4交互程序之间的兼容性

因为在指定交互选项后,编译及链接后的输出代码跟在无交互情况下不同,所以当多个源文件如果使用了不同的设置进行编译,相互之间的调用可能产生兼容性问题。图5说明了这些关系。




在一个使用交互工作的项目工程管理中,对此要加以仔细考虑。

5V5架构的扩展

ARM在V5版本的架构中,对ARM/Thumb的交互增加了新的支持。针对前面第3节中提到的函数调用和返回问题,V5版本中专门对指令做了扩展。
①增加了新指令BLX,解决了原来BX和BL指令各自的欠缺。使交互的函数调用可以由一条指令实现,省去了跳转代码的开销。
②扩展了以PC为目标地址的数据传输指令功能。PC加载值的最低位将被自动送到状态寄存器CPSR的T状态位。也就是说,通过给PC赋值的方法也能实现状态的切换,这样就使习惯的函数返回方法——从堆栈中恢复寄存器,也能实现交互调用函数的正确返回了。

所以,V5架构以后的代码,不再需要额外的链接代码,缩小了代码长度,提高了状态切换时的执行效率。当然,在V5及以后的架构中,继续保持了对以前代码的良好兼容性。

6Thumb-2

ARM和Thumb因为其各自的优势,都得到了极为广泛的应用。在一个应用程序中,用户要根据系统的具体情况灵活分配,使用不同的编译器,把不同的代码编译成ARM或Thumb,以希望得到最优的代码长度和性能平衡。这样做能够达到系统优化的目的,但是也给设计人员带来了额外的交互处理工作。最近,ARM公司公布了一项新的发明——Thumb-2指令集,该指令集同时包含32位和16位指令,在代码长度和性能之间作了最佳的平衡。这样,以后用户就可以用一个统一的Thumb-2编译器来解决现在面临的很多问题了。

如图6所示,是Thumb-2指令集跟ARM和Thumb之间的比较。




引证文献

1. 杨志强嵌入式系统设计与发展 [期刊论文] -青海师范大学学报(自然科学版)2005(03)
2. 刘志勇 基于ARM的无线视频传输硬件系统的初步研究与开发 [学位论文] 硕士2005
3. 李晶 基于 LINUX的无线局域网芯片驱动程序的设计与开发 [学位论文] 硕士2005

上一页 1 2 3 下一页

评论


技术专区

关闭