Welcome

首页 / 软件开发 / C++ / 十招编写更易维护的嵌入式代码

十招编写更易维护的嵌入式代码2011-04-04 yeeyan 风中纸页应用程序开发的一个重要方面就是代码的维护,但也却是被更快的产品上市要求所忽 略。这对于某一些程序来说,也许并不严重。这是因为这类产品的生命周期很短,或者这 类产品一旦部署就再也不会动它了。

然而,嵌入式软件的生命周期却往往长达数 年,这就意味着前期的一些失误会导致后期的大量损失。

嵌入式软件就意味着有 较长的生命周期,在设计和实现的时候就一定要考虑维护的问题。下面的技巧虽然不能保 证完整,但的确能够点出一些常见的问题。记住他们并不要成为那些拥有痛苦记忆的一员 。

技巧#1 避免汇编代码

当然,在一些低端PIC单片机上你没得选择,而在 一些高端ARM处理器上你也可能不需要,但在此两个极端之间,还有很多平台使用汇编来 提高性能,减少代码。然而,简单的使用汇编来也可能把你的项目打回几个月前。

汇编可以直接访问机器功能,但性能的提升会被真正理解程序在做什么这件事所 替代。这也就是为什么高级语言,例如C和Java,被设计出来的原因。

当调试的时 候,每一段汇编代码都可疑,而高级语言的异常安全特性就显得容易的多了。如果必须使 用汇编,尝试逐句注释。C和Java中,注释可能会把代码弄乱,但在汇编语言中,注释可 就会节约很多时间并不会让人觉得挫败了。

注释也可以针对程序块,但确保程序 块不要超过5~6条语句。理想情况下,算法可以用伪码的形式写在注释中。(参见技巧 #8)

技巧#2 避免注释变更

这是一条通用编程技巧,但在嵌入式编程中,保 证代码和其注释关联尤其重要。当代码更新的时候,这中错误非常容易发生,并且导致代 码很难理解。下面的例子就展示了随时间流逝,注释是多么容易被变更。

(译者 注:为了理解方便,代码中的注释不做翻译)

// This function adds two numbers and returns the result
#if __DEBUG
void printNumber(int num) {
printf("Output: %dn", num);
}
#endif
// This function multiplies two numbers and returns the result
int multiply(int a, int b) {
return a*b;
}
int add(int a, int b) {
#if __DEBUG
// Debugging output
printNumber(a+b);
#endif
return a+b;
}

可以看到函数Add的注释和代码之间插入了 printNumber函数。后来的人发现这个Add函数并挨着它加入了multiply函数,这样就使得 Add函数和它的注释文档断开了。为了避免这个问题,将注释可以写在函数内部,或者用 线条来前后隔开注释。