优化嵌入式软件的特性包括系统时序,代码大小,RAM使用和能耗等。虽然优化每个特性通常都需要自己的方法和技术,但开发人员在优化嵌入式软件时可以遵循几个一般性提示。 始终创建比较基线 首先创建一个比较优化结果的基线是显而易见的,但是我们也能发现很多团队是匆忙地直接进入优化而没有任何基线。基线测量很重要,因为每个优化周期的回报都会减少。例如,优化能量的第一次通过可以导致20%的改善。第二10%,然后是5%,依此类推。开发人员需要能够看到这种趋势,并根据他们的时间输入量化他们在系统中看到的改进。 设置优化目标 每次优化过程都需要越来越多的时间来从系统中挤出最小的改进。团队需要仔细平衡他们的时间投资,并确定最终的改进是否值得花时间。在意识到这一点之前,可以花费数周来优化不再需要优化的系统。在优化开始之前,团队应该设置一个目标,一旦实现,就足以满足当前应用程序的要求。实现该目标表明优化过程已完成。 获取正确的工具进行测量 没有正确的测量工具,优化系统可能非常困难。例如,如果没有准确的方法来测量系统和微控制器能量消耗,则无法优化能量。在许多情况下,团队无法将这两种不同的能量测量结果分开,并试图在微控制器无法降低时将其最小化。如果没有可以准确测量或允许开发人员查看系统行为的工具,那么尝试优化系统是没有意义的。 使用优化工具 嵌入式软件有许多领域可以进行优化,以减少代码大小或提高性能。在某些情况下,可以使用单独的或附加的工具链来执行优化。但有时可能不需要外部工具。只选择合适的工具链就足够了。 使用编译器属性和#pragma 在微调嵌入式软件时,开发人员通常无法做出选择。使用属性和#pragma可以提高速度,有选择地将优化应用于单个函数,致力于优化软件的开发人员应该熟悉属性,还要阅读用C编写可移植优化,以便他们能够理解如何编写仍然可移植的优化,并且不会再回过头来讨论它们。 不要犹豫,试验一下 没有用于优化系统的固定实践,开发人员不应该感到受限于遵循任何特定技术。有时,学习和优化系统的最佳方法是将实验放在一起,看看会发生什么。通过实验和记录结果能够弄清楚哪些有效,哪些无效,以及什么是浪费资源和时间。通过尝试不同的驱动程序模型,有很多方法可以大大提高开发人员在使用printf时获得的实时性能,通常认为这比实际情况要好得多。 深入研究编译器生成的指令 在资源极为受限的应用程序中,开发人员只需要卷起袖子并深入研究编译器生成的指令。通过if / else选择三元运算符可能是正在执行的三个或四个额外指令之间的差异,这会导致应用程序崩溃。虽然C等语言是标准的,但每个编译器优化并生成机器指令的方式略有不同。了解编译器正在做什么的唯一真正方法是查看程序集。 应用程序的优化需求将大不相同。一些小批量生产的应用可能根本不需要优化。在其他每个时钟周期或纳米放大器都很重要的情况下,可能会花费大量时间来尝试从系统中挤出最后一点性能或能量。虽然每个系统都不同,但这些技巧为开发人员和团队提供了一个起点,可以帮助他们实现更高效的系统。
|