在进行嵌入式软件C语言的开发时,对系统的资源应该优化使用,需要注意以下几点。
1)不要对数据进行快于其更新速度的计算。比如变速器的油路温度信号的采样周期是10ms,那么,软件中基于油路温度的查表运算操作就不应该快于10ms,因为如果用5ms的速率来查表,第一个和第二个的计算内容都是基于同一个值,对系统资源是一种浪费。
2)无需对数据进行快于其被调用周期的确认。比如变速器的转速信号被系统应用,应用的频率是20ms一次,那么系统如果每5ms就刷新处理一次变速器的信号,其中每4次中会有大约(具体还要看开始的时间点)3次是白做功了。
3)消除不必要的多重处理。比如有下面的逻辑:
这样程序的效率就提高很多,同时节省了资源(有些编译器本身带有优化功能,这里不考虑这种情况)。再有,对于一个输入,如果程序中有多个地方应用到该输入的同一种处理结果,就可以重新定义一个新的变量用于使用。
例如:
这样,只用一个新变量进行一次计算赋值,可以替代多次滤波计算。如果重复的次数多,效果更好。
4)充分利用逻辑合理性,减少不必要的软件内容,能消除的就不用优化,不能消除的才用优化。
其中的If(i==100)的情况就不会发生,因此这个执行是多余的,应该被省略掉。(www.zuozong.com)
5)建立只在需要的时候执行的机制,减少不必会要的操作。另外,充分了解汇编语言的产生机理,从软件结构上调整资源的使用。比如,如果能用switch就尽量不用一系列的if条件判断结构等。
对于内存的使用,嵌入式系统软件开发也要注意。
①应用8位(一个byte)的存储单元来存储数据组成标准的数据表格或结构体、联合体等类型的数据可以减少只读存储器的用量。
②在浮点型处理器中,尽量使用8位或16位定点运算,可以很大的减少存储器的用量。
③将多维度表格分解成几个小维度表格,可以有效减少内存用量。
④尽量避免大的If-Then-Else或Case运算,因为首先它们较难纠错,其次执行时间差异很大,使CPU的资源使用波动明显,不能合理均衡。再有,过多的分支造成软件的测试复杂程度以指数形式增长。
⑤堆栈的使用深度应不高于90%,太高就有堆栈溢出的危险,太低则系统内存使用率过低。
⑥随着软件的开发进展,定期消除一些不再使用的数据和功能。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。