【发布时间】:2010-05-04 19:54:28
【问题描述】:
我已经编写了一个嵌入式软件(当然是使用 C),现在我正在考虑改进系统运行时间的方法。我系统中最重要的单个模块是一个非常大的嵌套 for 循环模块。
该模块由两个嵌套的 for 循环组成,最多循环 122500 次。这还不是很多,但问题是在嵌套的 for 循环中,我有一个对另一个源文件中的函数的函数调用。该特定功能主要由两个嵌套的 for 循环组成,循环总是 22500 次。所以现在我必须调用 122500 次函数。
我已经使要调用的函数变得更轻更短(但仍然可以正常工作),现在我开始认为撕掉该函数调用并直接在其中编写该过程会更快前两个 for 循环?
该系统中的处理器是 ARM7TDMI,频率为 55MHz。系统本身的时间要求不是很高,因此不必具备实时能力。然而,它处理职责的速度越快越好。
使用while循环而不是fors也会更快吗?任何关于如何提高运行时间的建议都值得赞赏。
-zaplec
【问题讨论】:
-
写两个并比较它们。没有其他方法可以确定。当您无法访问分析工具(我猜您在嵌入式系统中没有)时,您必须测试这些东西。
-
你没有这么说,但是你有没有在上面运行分析器?在关注 for 循环或 while 循环哪个更快之前,您应该加倍确定您的算法没有做出愚蠢的假设。再说一遍,您对此运行分析器?
-
是的,绝对让它内联。还要告诉我们你在这个“关键函数”中做了什么......虽然循环并不比 for 循环快,但是如果你在代码中(重新)使用循环计数器很多,那么你可能会发现边际加速从 N 迭代到 0,而不是反过来。
-
同意剖析和使用剖析结果。我们无法知道哪种方法最适合您的具体情况。
-
@Welbog:您可以在使用周期精确指令集模拟器时部署分析工具。 ARM 的 GNU 工具链包括一个,Keil RealView 工具链和其他工具链也是如此 - 所以是的,您可以对其进行分析。
标签: c embedded runtime inline-code function-call