一文分享提升嵌入式代码的分析工具

news2024/11/19 6:44:32

当前标准的C语言编译器存在普遍只能找出代码中潜在的缺陷,而对程序方案设计并没有效。

使用静态代码分析器有助于提升固件和捕获编译器难以察觉的问题。

1、用于嵌入式的常见代码静态分析工具

代码静态分析工具,顾名思义就是对代码进行静待分析,以提前预判(分析出)代码潜在的一些问题的工具。换句话说,就是通过工具找出你代码的bug(错误、警告)。

代码静态分析工具需要你的代码遵循一定规范,比如遵循C99MISRA C:2012等,不然工具不支持对你代码的静态分析。代码静态分析工具有独立存在的(就是一款软件工具),也有集成在IDE中的。比如:IAR EWARM就自带静待分析工具。

同时,有些工具支持通过“安装插件”的形式集成在IDE中,比如:在keil MDK中添加PC-lint代码静态分析工具

下面罗列几个常见的代码静态分析工具:

  • PC-lint
  • LDRA
  • Parasoft C / C ++ test
  • PVS-Studio
  • VectorCAST

以下是每一位嵌入式软件开发工程师都应该熟悉的静态代码编译器的七种功能和用法。

2、捕捉潜在的漏洞

静态代码分析器广为人知的用途之一就是扫描软件中潜在的问题和漏洞。这些问题小到switch case遗漏了break语句,大到缓存溢出的潜在风险。

静态代码分析器能够发现那些容易被编译器或者代码审核人员忽略的问题。在开发的早期阶段配置一个静态代码分析器在实践中能够确保潜在风险被立即处理,而不是等到开发的后期阶段。

3、强制执行代码规范

执行代码规范是确保软件开发一致性和代码可读性的重要举措。代码规范不仅会涉及代码可读性等问题,它还能迫使代码变得优雅。一个典型的例子就是许多静态代码分析器支持MISRA C。

静态代码分析器能够确保开发者没有违背大多数推荐实现方法,也没有违背标准的优雅实践(但是有些规则要求人工检查,机器无法自动判别)。如果真的发生了违规行为,静态分析器会将违规行为报告给开发者,开发者可以给予纠正。使用静态分析器能够快速判断代码是否遵循了已定义的标准。

4、确保严格执行ANSI-C标准

那些想严格按照ANSI-C标准开发可移植软件的开发者可以用静态代码分析器判断是否有非标准的用法混杂在代码里。

将分析器设置为“strict”将会查找出那些可移植性较差的或者兼容性较弱的代码区域。开发者随后可以再次检查这部分代码,使得软件更好地遵守ANSI-C标准,或者至少在文档中注明这部分代码。

5、强大的类型检查功能

C语言并不支持强类型检查。在C语言中,如果开发者自己创建了一种类型,编译器会忽略新类型而使用底层的C语言类型。

举个例子,如上图所示,编译器会视变量Var1为int类型(实现时定义)而不是新的MyEnum_t类型。开发者也许想区分int和MyEnum_t两种类型,并让编译器在两者混用之时做出警告。

然而,在第13行编译器并不认为把变量Var2(底层是int类型)的值赋给变量Var1(底层也是int类型)存在什么错误。静态代码分析器能够设置严格的类型检查,将Var1=Var2因不同类型间的赋值而置为高亮,以及检查出其它不符合开发者本意的问题。

6、提供量纲检查

1998年发射失败的火星气候探测器是我最关注的航空器失事事故之一。航空器的失败是由于输入轨道插入参数时使用了非标准的lbs*s 而不是 N*s (哎呀!)。火星气候探测器的失事永远警示着我们确保度量单位正确的重要性。但C编程语言没有提供任何的量纲分析来确保计算的一致性。

但是,静态代码分析器能够完成这些检查,以确保不会将千米误乘以英尺从而得到一个错误的结果。量纲分析的设置在各种工具中各不相同,但开发者应该好好利用这个重要的特性。

7、支持基本的堆栈分析

理解栈的最坏使用场景是开发任何实时嵌入式系统的关键。有很多的方法能分析和确定堆栈的最坏情况下的的使用状态,但可以用静态代码分析器来找找合理使用堆栈的感觉。静态分析器可以计算函数的堆栈使用情况和调用图来给出堆栈所需的大致空间。

静态分析工具还可以帮助深入了解程序对函数调用,以及函数结果的确定性。使用静态分析来熟悉堆栈的使用和最坏工作状态有助于初步理解堆栈的最坏状态分析。

 资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linuxc/c++高级开发【直播公开课】

零声白金VIP体验卡:零声白金VIP体验卡(含基础架构/高性能存储/golang/QT/音视频/Linux内核)

8、帮助检查线程

静态分析工具也可以用来查看在相同处理器上同时执行的线程和任务所出现的问题。

举个例子,分析工具可以识别是否有与加锁或解锁互斥相关的任何异常。线程检查对在实时系统中查找问题非常有效,但配置此类分析却要花费很大的代价。只要能发现存在异常的线程,这种代价还是值得付出的。

9、总 结

静态分析是开发人员开发实时系统的一个宝贵工具。静态分析器的七种用途只是其强大功能的几个例子。

静态代码分析器的使用可以大大提高代码的质量和鲁棒性,如果设置得当,甚至可以确保代码与常见的或自定义的编码标准的一致性。

原文作者:【一起学嵌入式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1150103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python图像处理局部放大】输入图像,选择两处不同的区域进行放大操作,然后将原始图像、处理后的两个区域以及标记合成新图像进行展示

NeRF-w 渲染后的图像效果的定性对比,对局部放大以观察细节效果。如下 对单张渲染后的图像,选择指定区域并进行放大操作,然后将原始图像、处理后的两个区域以及标记连线的新图像,如下图 代码 from PIL import Image, ImageDraw# 读…

预制件二维码怎么做

凡尔码的二维码管理系统不仅提供了高效便捷的二维码生成功能,还配备了一套完善的预制构件管理方案。通过扫描二维码,用户可以查看预制构件的详细信息,包括项目名称、构建名称、安装位置、重量、生产日期、生产单位、产品出厂检验材料、尺寸等…

《2023整车操作系统发展趋势研究》丨附下载

✦ ✦✦ ✦✦ ✦✦ ✦ 1996年,Gartner提出SOA其核心思想在于“通过将庞大的计算系统按照实际业务拆分为独立部署的大小合适的功能模块,提高功能单元的复用性,降低产品开发的复杂度和成本”。 如今,软件定义汽车领域引入SOA&…

竟然还有人不知道这个app?注册即可在线管理各类地理空间数据

「四维轻云」是一款轻量化的地理空间数据管理云平台,具有项目管理、数据浏览、数据分享、场景编辑、素材库等功能。 此外,用户还可以在应用商店及官网下载安装“四维轻云”APP。安装完成后,用户可以在APP中管理、查看及分享倾斜摄影模型、激…

一文看懂完整的研究生生活规划

很多人在刚从本科步入研究生生活的时候,总是对于自己三年的研究生生活没有清晰的规划,总是在各种浪费时间,没有拿到想要的东西,也没有学到想学的东西,亦或是没有找到理想的工作,最后草草的毕业。这个时候我们就应该对于自己的研究生生活有个清晰的规划,帮助我们不留遗憾…

集群/堆叠的常用部署实施方式,你会吗?

你们好,我的网工朋友。 交换机的连接方式大家应该都知道吧,一共有三种,分别是:级联、堆叠和集群。 级联一般用来实现多台交换机之间的互相连接。 堆叠和集群,就总有网工把这两给搞迷糊了。 堆叠就是将多台支持堆叠特…

python_PyQt5日周月K线纵向对齐显示_1_数据处理

目录 写在前面: 图形结果显示: 数据设计: 代码: 从日数据中计算周数据、月数据 生成图形显示需要的数据格式 写在前面: “PyQt5日周月K线纵向对齐显示”,将分三篇博文描述 1 数据处理。将数据处理成…

Python学习——Day12

目录 一、实例方法、类方法、静态方法 1.1实例方法 1.2类方法 1.3静态方法 1.4实例 二、 __slots__ 三、错误和异常 3.1语法错误 3.2异常 3.3异常处理 一、实例方法、类方法、静态方法 1.1实例方法 实例方法入参第一个值,默认self指代当前调用的对象,不建…

数字转型下的保险业:可视化大屏的光明未来

在当今不确定性充斥的世界中,保险行业扮演着关键的社会角色。无论是财产保险、健康保险还是生命保险,它们都提供了一种安全网,帮助个人和企业在不可预测的风险面前保护自己。然而,随着信息时代的来临,数据变得愈发重要…

FreeRTOS系统下看门狗定时器的使用总结

文章目录 前言定时器分类何为看门狗定时器 系统复位系统级看门狗SWDT的使用1.看门狗配置2、独立监测多任务方式 前言 本文记录自己使用看门狗定时器的过程,起因是系统不知名原因总是跑挂,查了很久找不到原因(排除了变量溢出、中断冲突等&…

解决找不到vcruntime140.dll无法执行代码的方法分享

在我们用电脑的过程中,总免不了碰到些问题,比如“找不到vcruntime140.dll”。这通常是我们在运行某些软件的时候,电脑找不到它需要的一个叫动态链接库的文件。这个问题有很多原因,比如软件安装的时候出了问题,系统文件…

2023上海初中生古诗文大会初选将于11月5日开始,划重点来了

好消息! 根据主办方通知,2023年上海市中学生古诗文大会(初中组),以下简称初中生古诗文大会,初选将于11月5日开始。 有许多家长和初中同学关心,初中生古诗文大会如何参加?考多长时间…

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库安装 IndexDB类库引入 localForage测试 新增数据、获取数据 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 大部分场景使用 LocalStore都…

Windows域控制器的部署以及加入

域控制器:Windows Server 2022 域内主机:Windows7、Windows Server 2008 R2 安装部署预控 服务器管理器-添加角色和功能,一路下一步,到“服务器角色”,勾选“Active Directory 域服务”,一路下一步直到安…

审核 Microsoft SQL Server 日志

手动审核数据库活动是一项艰巨的任务,有效完成审计的最佳方法是使用简化和自动化数据库监控的综合解决方案,该解决方案还应使数据库管理员能够监控、跟踪和即时识别任何操作问题的根本原因,并实时检测对机密数据的未经授权的访问。 什么是 S…

基于SpringBoot+Vue实现前后端分离的房屋租赁系统

大家好✌!我是Dwzun。很高兴你能来阅读我,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,还为大家分享优质的实战项目,本人在Java项目开发领域有多年的经验,陆续会更新更多优质的Java实战项目&#x…

ARL灯塔安装与使用

ARL灯塔安装与使用 1. 系统要求2. ARL灯塔安装2.1. docker环境安装2.1.1. 更新yum包2.1.2. 卸载老版docker2.1.3. 安装docker所需要的依赖包2.1.4. 设置yum源2.1.5. 查看仓库中docker版本2.1.6. 安装docker最新版2.1.7. docker设置2.1.8. docker其它命令 2.2. 安装docker-compo…

世微 60V高端电流采样降压恒流驱动IC LED电源驱动器AP51656

1产品描述 AP51656是一款连续电感电流导通模式的降压恒流源,用于驱动一颗或多颗串联LED输入电压范围从 5 V 到 60V,输出电流 最大可达 1.5A 。根据不同的输入电压和 外部器件, 可以驱动高达数十瓦的 LED。 内置功率开关,采用高端…

ModelMapper

ModelMapper用于将视图对象和实体类进行转换。 依赖: 单例模式: API控制器: 使用:

Mac电脑矢量编辑必备:Sketch 最新中文 for mac

Sketch是一款专门为Mac设计的矢量图形绘制软件,广泛应用于UI/UX设计领域。它拥有丰富的设计工具和功能,使得设计师可以轻松创建高质量的界面设计和交互原型。Sketch基于矢量图形,可以无损放大和缩小,保证设计的清晰度和质量。它还…