snifer

[原创]基于blackfin 平台的嵌入式系统的分散装配机制的优化

0
阅读(17795)

前面我通过一个例子介绍了基于blackfin 平台的嵌入式系统的分散装配机制,下面我从几个方面来介绍blackfin 平台的嵌入式系统的分散装配机制的优化。

提到RVCT就不能不提编译器的四个优化级别和两个编译选项,-O1、-O2、-O3、-O4,以及-Otime、-Ospace。
-Ospace与-Otime负责给编译器提供代码优化的大方向, 告知编译器编译任务的主要目标是代码密度(-Ospace)还是代码性能(-Otime) 。而-O1、-O2、-O3、-O4则分别代表4种逐次递进的不同优化级别。

OSpace 还是 OTime?
显然代码密度与代码执行速度在很多情况下是一对矛盾。以下面的代码为例。例1中左右两段代码可以完成相同的任务,但是左边的有较高的代码密度,右边的则有较高的执行速度。因为当expr = 0时,标志循环结束时,右边的代码可以顺序执行下去;而左边代码必须先跳转至循环体首部判断expr的值,随后再跳转道循环体尾,继续执行下一条指令。

例 1 代码速度与尺寸的对比

while (expr) if (expr) do
{ { do
body; { body; }
while (expr);
} }
那么我们什么时候使用Otime 什么时候使用Ospace呢?Otime与Ospace需要开发人员根据系统实际需求来决定, 最好的情况是在两者之间找到一个合适的平衡点,而不是单纯的追求速度或者代码尺寸的缩小。即,将不同的代码模块根据其特性分别使用不同的编译选项。

此外,RVCT编译器支持很多非常有用的编译选项,如--no_inline(取消所有代码的内联函数) 、--split_ldm(限制LDM/STM指令的最大操作寄存器数目) 、--split_sections(将每个函数,而不是源文件,作为一个编译单元进行操作)等
等。
编译器的所有这一切都可以严格根据开发者的要求,帮助我们开发人员得到系统真正需要的优化过了的代码。

这方面还是比较冷门,希望大家能一起探讨一下这方面的技术,最近开始嵌入式竞赛了,每年一次,哈哈

Baidu
map