跳转到主要内容

编译器

如何在ARM下进行高效的C编程?

cathy /

通过一定的方法来编写C程序,可以帮助C编译器生成执行速度更快的ARM代码。下面就是一些与性能相关的关键点:

1.对局部变量、函数参数和返回值要使用signed和unsigned int类型。这样可以避免类型转换,而且可高效地使用ARM的32位数据操作指令。

2.最高效的循环体形式是减计数到零(counts down to zero)的do-while循环。

3.展开重要的循环来减少循环的开销。

4.不要依赖编译器来优化掉重复的存储器访问。指针别名会阻止编译器的这种优化。

5.尽可能把函数参数的个数限制在4个以内。如果函数参数都存放在寄存器内,那么函数调用就会快得多。

6.按元素尺寸从小到大排列的方法来安排结构体,特别是在thumb模式下编译。

7.不要使用位域,可以用掩码和逻辑操作来替代。

8.避免除法,可以用倒数的乘法来替代。

9.避免边界不对齐的数据。如果数据有可能边界不对齐,那么就要使用char *指针类型来访问。

10.在C编译器中使用内嵌汇编可以利用到C编译器本来不支持的指令或优化。

<strong>一、 数据类型使用上的优化</strong>

嵌入式开发需要的不仅仅是处理器

editor Chen /

摘要:嵌入式系统工程师们在花大量时间试图找到最适合应用的完美器件。然而令他们失望的是,现有器件总是缺少其他器件所具备的一项或多项重要功能,因而在设计时总是要权衡利弊而无法实现完美。绝大多数情况下,完美器件只是一个梦想。

对于处理器和单片机,选择标准变得更加抽象和复杂。由于单片机可编程,正常的电气参数选择标准必须要考虑器件执行某项具体任务时的速度和效率。从表面上看,单片机性能取决于处理器内核,但事实上并非完全如此。处理器性能的确与处理器内核息息相关,但同时它还取决于其他因素,包括集成度、支持处理器内核的外设、采用的开发工具、要执行的任务、工程师发挥特定单片机性能的技巧以及系统成本,等等。图 1 中的几个示例显示了在不改变处理器内核的前提下,采用编译器技术所带来的不同效果。

  因此对于单片机而言,工程师心目中理想的器件不仅需要具有正确的电气特性和集成外设,还要有一个处理器能在规定时间内执行应用程序中最复杂的计算。工程师熟悉的单一最佳开发工具平台必须能支持这个器件,这样工程师既能够更快地熟悉器件,又能够更快地学习如何充分利用开发工具。最后,这个器件应该符合工程师负责的所有应用的成本目标。遗憾的是,这种理想的器件是不切实际的。

  <strong>持续变化的需求</strong>