生活工程体验信仰哲学精神
投稿投诉
精神世界
探索历史
哲学文学
艺术价值
信仰创造
境界审美
体验技术
技能工具
工程信息
医学生产
生活运用
操作能力

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

4月24日 天浪楼投稿
  多年来,开发人员在审查代码时有一些常见的问题,无论公司的规模有多大,开发过程有多成熟,总会出现问题。为了帮助缓解这些常见问题,嵌入式开发人员在审查C代码时可以提出一下10个问题,以帮助找到潜在的bug问题。
  问题1程序构建时没有警告吗?
  如果编译不成功,就无法在目标上加载代码。成功的编译需要程序员努力消除任何语法错误,以使编译器满意并创建输出文件。但是,编译器可以构建一个没有错误的应用程序,但仍然会发现其他异常,如隐式强制转换,并将其报告为警告。因此,一个真正成功的程序编译不仅应该零错误,还应该零警告。
  问题2有任何阻塞功能吗?
  微控制器(MCU)的主要目的之一是能够处理实时事件。MCU应该能够以一种非常确定的方式处理这些事件,这种方式可以被测量和证明。然而一个常见错误是,一个驱动程序或一些应用程序代码段被编写为进入一个循环或调用一个延迟函数很长一段时间。但是,循环或延迟会阻止任何其他代码在处理器上运行,这可能会损害确定性。
  问题3是否存在潜在的无限循环?
  哪个嵌入式开发人员会故意将无限循环放入他们的代码中?(当然不包括那些在任务或应用程序的主循环中需要的代码)。然而,网络上和芯片供应商提供的许多示例代码都表现出无限循环故障行为。例如,将数据写入闪存或EEPROM的代码通常会监控硬件标志是否完成。示例代码将在标志上创建一个while循环,以在继续之前达到某个状态。但是如果硬件出现故障并且标志永远不会被设置,代码就会陷入无限循环!
  可以补救这种无限循环故障的一种方法是让循环监视系统滴答声或限制循环在最终确定发生错误之前可以执行的次数。这些补救措施允许在硬件发生故障时将错误处理内置到系统中。尽管普遍认为,硬件(和软件)确实失败了。
  问题4这个函数参数应该是const吗?
  程序员往往不会尽可能多地使用const,尤其是在涉及函数参数时。将传递的函数参数声明为const是防止该变量在函数中被意外修改的好方法。为什么让未来的嵌入式开发人员意识到他们不应该修改该系统关键变量而应该只使用它呢?
  问题5代码的圈复杂度是否小于10?
  监控函数的圈复杂度度量是帮助限制函数变得复杂的好方法。该指标直接关系到需要在函数上执行以测试每个分支的最小测试用例数量。不仅如此,该指标还真正说明了开发人员在编写或修改函数时需要记住多少。由于大多数人一次只能跟踪7到9件事,因此将圈复杂度保持在10以下是有助于降低错误率的好选择。
  问题6extern是否受限于静态的自由使用?
  C语言默认变量的作用域为extern,这个默认值是隐式的,在模块中声明的不使用静态变量的变量前面有一个不可见的大外部变量。摆脱那个不可见的外部的唯一方法是在声明前面放置一个可见的静态。这种做法的另一个好处是使变量在范围内成为局部变量,有助于数据隐藏和封装。寻找隐式外部变量最常见的地方是模块级变量声明。
  问题7是否所有if。。。elseif。。。条件都以else结尾?
  在switch语句中使用默认情况应该是强制性的。如果不存在默认情况,静态分析工具会报错。嵌入式开发人员可以很容易地看到,如果条件保证在各种情况下使用switch语句,则可能会有一个意外或被忽略的情况,应该有一个默认的endall情况。这也适用于if。。。elseif。。。条件。如果要检查两个或多个条件,如果这些情况都不符合当前条件怎么办?语句中的最后一个else就像switch语句中的默认情况一样。
  问题8是否存在断言和或输入输出检查?
  嵌入式软件开发人员应该在他们的代码中添加断言,以验证他们对程序在某些点的行为的假设是否正确,应对入站和出站数据执行边界检查。还记得那句老话“垃圾进,垃圾出”吗?
  问题9是否有标题保护在场?
  标题保护是一个简单的宏,可确保标题文件在翻译单元中不包含多次。保护是防止双重包含include指令。不包括标题保护可能会导致一些非常奇怪的静态分析行为,更重要的是,嵌入式开发人员使用保护可以防止多个定义错误。
  问题10是否使用了浮点数学?
  浮点数学的使用在嵌入式系统中可能是一个棘手的主题。资源受限的微控制器通常不包括浮点单元(FPU)。这种缺失意味着处理器只有一种执行浮点计算的方法:使用库函数。用于浮点数学的库函数通常缓慢且效率低下,它们不一定具有确定性行为,并且它们可能导致代码规模膨胀。由于这些原因,开发人员应仔细考虑何时在微控制器中使用浮点。他们还应该执行额外的测试,并应该考虑替代方法,例如查找表、缩放和定点数学。
  结论
  许多工程师发现代码审查非常无聊,但实际上很有趣,因为执行代码审查可能是一个非常激动人心的时刻。每个程序员对嵌入式软件开发和C语言都有自己独特的观点和见解,所以总有一些东西需要学习。然而,尽管嵌入式开发人员正在实施许多见解和不同级别的检查和平衡,但错误仍然存在。这十个问题解决了开发嵌入式软件时应在每次代码审查时检查的常见错误和误解。
投诉 评论 转载

颈椎病、车祸谁是脊髓损伤主因?热博聚热点网 随着交通工具的普及和城市化的加快,车祸已经成为了我们生活中经常遇到的一种意外事件。许多车祸引起的伤害,特别是脊髓损伤,给人们的健康和生活带来了很大的影响。然而,颈椎病与车祸之间……2024“熊羊”大电影回归,国产动画IP的迪士尼梦能圆吗?热 一晃《熊出没》系列电影已经走过了10年。继2023年成为春节档电影最大的黑马之后,“熊出没”系列的第10部大电影《熊出没逆转时空》又将在2024年春节如期而至。而2……程前,不是程前热传聚热点网 第一次听说程前,是1980年代。最近一次听说程前,是前几天周鸿祎怒怼故事。还好,两个程前并非同一个人。前者是1980后一代人的记忆,在《正大综艺》中主持节目的……央视揭秘赚钱类App套路阅读、玩游戏就能提现?热博聚热点网 “听音乐赚钱”、“玩游戏赚钱”、“走路睡觉也能赚钱”面对这样的宣传,你心动了吗?最近几年来,层出不穷的赚钱类App,凭借着听起来毫不费力的方式,诱导大批用户前去下载,其中一些下……招聘行业迎来新的转折点:人工智能爆火热议聚热点网 作为HR,你可能常听说人工智能技术可以使招聘工作变得更快速便捷,还能降低招聘成本。那么人工智能技术真的对招聘有奇效吗?它背后的原理究竟是什么?1)深度学习:深度学习……女婿买房可以用丈母娘的公积金吗热博聚热点网 对于现在的人来说买房应该算得上是很重要的事情了,那婚后买房不够怎么办呢?可以提取家人的公积金吗?女婿买房可以用丈母娘的公积金吗?下面为大家整理了这方面的知识,欢迎阅读!住……阿里旗下,支付宝搞钱小项目,拍地图上店照片就能挣钱热议聚热点 2024开年神作《逆天纪》全网最强攻略新鲜出炉!整体玩法简单、易懂、灵石为硬通货、可零撸、可搬砖,加入晓枫团队给最高扶持出售手机流量卡项目,一单最高200元,不需要成本……【歌词】别问我是谁歌手:曾嵘热传聚热点网 从没说过爱着谁为谁而憔悴从来没有想过对不对我的眼中装满疲惫面对自己总觉得好累我也需要人来陪不让我心碎让我爱到深处不后悔其实我并不……南京金融综合竞争力提升排名全国第七热闻聚热点网 1月11日中国(深圳)综合开发研究院发布的“第15期中国金融中心指数报告(CDICFCI15)”显示,南京金融综合竞争力位居全国第七,排名较上一期提升1位。作为国内权威的……逻辑篇2、还原逻辑根据的概念热博聚热点网 逻辑篇2、还原逻辑根据的概念黑格尔逻辑学最有价值的教益就是跨过了形式逻辑这道坎,确立概念是逻辑的根据。对然而在人类意识结构的探究中,我们将察觉,对于逻辑所根据的概念……〔转载〕天玉经》之挨星翻卦龙、穴、水法热评聚热点网 天玉经原文地址:作者:《天玉经》之挨星翻卦龙、穴、水法“天玉经内传中”云:二十四山起八宫,贪巨武辅雄。四边尽是逃亡穴,下后令人绝。惟有挨星为最贵,……嵌入式开发:成功进行代码审查的10个问题热闻聚热点网 多年来,开发人员在审查代码时有一些常见的问题,无论公司的规模有多大,开发过程有多成熟,总会出现问题。为了帮助缓解这些常见问题,嵌入式开发人员在审查C代码时可以提出一下10个问题……
【框架图】这样设计就对了热传聚热点网 大型现代川剧《红漫巴山》在京上演热传聚热点网 瑞幸迎来万店规模会满血复活吗热文聚热点网 315曝光不可注射的妆字号美容针或致毁容热传聚热点网 音质与通话相融合!全新南卡RunnerComm骨传导耳机测评 关于“黄金奶源带”,你了解吗?畅哺品牌骆驼奶来自“黄金奶源地 无力偿债!跨境通第一大股东股份被司法拍卖热闻聚热点网 东方印象2023茶山沉浸体验之旅圆满收官热议聚热点网 房产过户相关费用热闻聚热点网 郑州民事律师不给赡养费会没有继承权吗?热评聚热点网 广州民事律师离婚双方都要孩子怎么判?热博聚热点网 浙江轩辕黄帝祭祀大典直播观看人数突破千万人次热传聚热点网
的新生意经两大赚钱利器雪的风景知识大青树下的小学描写了各民族的小学生的什么我自飘零我自狂出自哪首诗我自飘零我自狂的出处老人大风天出行要远离哪些地方这么多年,数学依然是我摆脱不了的梦魇小学年度工作计划男最爽的的慰方法图片简单有效5大自卫方法爽到了2022新春游园荣国府商务潮流范,华为Mate9托帕蓝原来还可以这么美泛贩如何打造智能新零售生态圈Beyond黄贯中独特魅力再获青睐,哥哥综艺没白上,穿着真低

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找新乡渭南铜川松江山南雅安松原荃湾淮北昭通平凉鞍山赤峰苗栗保亭池州渝北株洲陇南濮阳三沙秀山密云鸡西