嵌入式开发成功进行代码审查的10个问题

admin 2024-09-17 17:50:56 0

扫一扫用手机浏览

文章目录 [+]

  多年来,开发职员在审查代码时有一些常见的问题,无论公司的范围有多年夜,开发进程有多成熟,总会呈现问题。为了赞助缓解这些常见问题,嵌入式开发职员在审查C代码时可以提出一下10个问题,以赞助找到潜在的bug问题。

  问题 1 – 法式构建时没有警告吗?

  假如编译不胜利,就无法在目的上加载代码。胜利的编译必要法式员尽力打消任何语法差错,以使编译器满足并创立输出文件。然则,编译器可以构建一个没有差错的利用法式,但仍旧会发现其他非常,如隐式强制转换,并将其申报为警告。是以,一个真正胜利的法式编译不仅应该零差错,还应该零警告。

嵌入式开发成功进行代码审查的10个问题
(图片来源网络,侵删)

  问题2 – 有任何壅闭功效吗?

  微节制器(MCU)的主要目标之一是可以或许处置及时变乱。MCU应该可以或许以一种异常肯定的方式处置这些变乱,这种方式可以被丈量和证实。然而一个常见差错是,一个驱动法式或一些利用法式代码段被编写为进入一个轮回或挪用一个延迟函数很长一段光阴。然则,轮回或延迟会阻止任何其他代码在处置器上运行,这可能会侵害肯定性。

  问题3 – 是否存在潜在的无穷轮回?

  哪个嵌入式开发职员会有意将无穷轮回放入他们的代码中?(当然不包含那些在义务或利用法式的主轮回中必要的代码)。然而,收集上和芯片供给商提供的很多示例代码都表示出无穷轮回故障行动。例如,将数据写入闪存或 EEPROM 的代码通常会监控硬件标记是否完成。示例代码将在标记上创立一个 while 轮回,以在继续之前到达某个状况。然则假如硬件呈现故障而且标记永久不会被设置,代码就会陷入无穷轮回!

  可以解救这种无穷轮回故障的一种办法是让轮回监督体系滴答声或限定轮回在终极肯定产生差错之前可以执行的次数。这些解救步伐容许在硬件产生故障时将差错处置内置到体系中。只管广泛以为,硬件(和软件)确切失败了。



  问题 4 – 这个函数参数应该是const吗?

  法式员每每不会尽可能多地使用const,尤其是在涉及函数参数时。将通报的函数参数声明为const是防止该变量在函数中被不测改动的好办法。为什么让将来的嵌入式开发职员意识到他们不该该改动该体系症结变量而应该只使用它呢?

  问题 5 – 代码的圈繁杂度是否小于10?

  监控函数的圈繁杂度器量是赞助限定函数变得繁杂的好办法。该指标直接关系到必要在函数上执行以测试每个分支的最小测试用例数目。不仅如斯,该指标还真正阐明了开发职员在编写或改动函数时必要记住若干。因为年夜多半人一次只能跟踪7到9件事,是以将圈繁杂度坚持在10以下是有助于低落差错率的好选择。

  问题 6 – extern 是否受限于静态的自由使用?

  C 语言默认变量的作用域为extern,这个默认值是隐式的,在模块中声明的不使用静态变量的变量前面有一个弗成见的年夜外部变量。解脱谁人弗成见的外部的独一办法是在声明前面放置一个可见的静态。这种做法的另一个利益是使变量在规模内成为局部变量,有助于数据暗藏和封装。探求隐式外部变量最常见的处所是模块级变量声明。

  问题 7 – 是否所有 if ... else if ... 前提都以 else 结尾?

  在 switch 语句中使用默认环境应该是强制性的。假如不存在默认环境,静态阐发对象会报错。嵌入式开发职员可以很容易地看到,假如前提保证在各类环境下使用 switch 语句,则可能会有一个不测或被疏忽的环境,应该有一个默认的 end-all 环境。这也实用于 if ... else if ... 前提。假如要反省两个或多个前提,假如这些环境都不相符当前前提怎么办?语句中的末了一个 else 就像 switch 语句中的默认环境一样。

  问题 8 – 是否存在断言和/或输入/输出反省?

  嵌入式软件开发职员应该在他们的代码中添加断言,以验证他们对法式在某些点的行动的假设是否正确,应对入站和出站数据执行界限反省。还记得那句老话“垃圾进,垃圾出”吗?


  问题 9 – 是否有题目掩护在场?

  题目掩护是一个简单的宏,可确保题目文件在翻译单位中不包括多次。掩护是防止双重包括 #include 指令。不包含题目掩护可能会导致一些异常奇异的静态阐发行动,更紧张的是,嵌入式开发职员使用掩护可以防止多个界说差错。

  问题 10 – 是否使用了浮点数学?

  浮点数学的使用在嵌入式体系中可能是一个辣手的主题。资本受限的微节制器通常不包含浮点单位 (FPU)。这种缺失意味着处置器只有一种执行浮点计算的办法:使用库函数。用于浮点数学的库函数通常迟缓且效力低下,它们纷歧定具有肯定性行动,而且它们可能导致代码范围膨胀。因为这些缘故原由,开发职员应细心斟酌何时在微节制器中使用浮点。他们还应该执行额外的测试,并应该斟酌替代办法,例如查找表、缩放和定点数学。

  结论

  很多工程师发当代码审查异常无聊,但现实上很有趣,由于执行代码审查可能是一个异常冲动民气的时候。每个法式员对嵌入式软件开发和 C 语言都有本身奇特的概念和见解,以是总有一些器械必要进修。然而,只管嵌入式开发职员正在实施很多见解和分歧级其余反省和均衡,但差错仍旧存在。这十个问题办理了开发嵌入式软件时应在每次代码审查时反省的常见差错和误会。

相关文章

清苑新能源车,引领绿色出行新潮流

随着全球气候变化和能源危机的日益严峻,绿色出行已成为全球共识。作为我国新能源产业的佼佼者,清苑新能源车凭借其卓越的性能和环保理念,...

家电资讯 2024-12-29 阅读3 评论0