有人问:代码中类似 /*lint !e750... */代表什么意思?
回答这个问题,就要牵涉到本文说的PC-Lint这个工具。
1写在前面
可能有一定编程经验的朋友,应该在一些地方都看到过类似 /*lint !e750... */ 这种“注释”。
但,有多少人去分析过它的含义呢?
比如:在FreeRTOS的tasks.c源码中有如下一行语句:
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */
后面 /*lint !e961 !e750. */ 作用就是:在使用PC-Lint工具进行静态分析时,隐藏本行宏定义未被调用的“错误”。
换种方式理解:编译时,这条语句不出现警告信息(注意:这里是比喻为编译,其实是PC-Lint静态分析)。
2关于PC-Lint
PC-Lint 是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析工具,它的全称是PC-Lint/FlexeLint for C/C++。
你可以把它看作是一种更加严格的编译器。它除了可以检查出一般的语法错误外,还可以检查出那些虽然符合语法要求,但很可能是潜在的、不易发现的错误。
C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。
PC-Lint识别并报告C语言中的编程陷阱和格式缺陷的发生。它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码等。
软件除错是软件项目开发成本和延误的主要因素,PC-lint能够帮你在程序动态测试之前发现编码错误,这样消除错误的成本更低。
错误号
PC-Lint 能够检查出很多语法错误和语法上正确的逻辑错误,PC-Lint 为大部分错误消息都分配了一个错误号:
这些错误号在文档中有详细说明:
命令格式:
更多相关内容可以参考官网:
www.gimpel.com
3Keil支持PC-Lint说明
在Keil官网有这样一段信息:
X PC-lint is a powerful static analysis tool that will check your C/C++ source code and find bugs, glitches, inconsistencies, non-portable constructs, redundant code, and much more. It looks across multiple modules, and so, enjoys a perspective your compiler does not have.
A C compiler cannot always detect each and every potential problem in your source files.
This is where PC-Lint comes in.
Supports K&R C, ANSI C, and ANSI/ISO C++ standards
Explicit support for MISRA C and MISRA C++ (Motor Industry Software Reliability Association) standards
Value tracking of auto and static variables detects subtle initialization and value misuse problems
Inter-function Value Tracking - powerful inter-statement value tracking crosses function boundaries
Optional strong type checking (typedef-based) with a rich option set to detect nominal type differences
User-defined semantic checking for function arguments and return values
Each of the Keil development tools, ARM, C51, C251, and C166, support Gimpel Software's PC-Lint. Configuration files are included in the Keil development tools which enable you to quickly and easily begin using PC-Lint in your application development and testing.
http://www.keil.com/pclint
大概意思就是Keil(ARM, C51, C251, and C166)支持PC-Lint,配置文件包含在Keil开发工具中,使您能够在应用程序开发和测试中快速轻松地开始使用PC-Lint。
还提供了一个例子:
示例代码:
C51编译输出结果:
执行PC-Lint输出:
示例程序列表(错误以突出显示),C51编译器输出和PC-Lint输出。当PC-Lint检测到并报告26个错误和警告时,C51编译器会检测并报告12个错误和警告。
4MDK中添加PC-Lint
要使用PC-Lint,大概需要以下两步:
安装PC-Lint
MDK添加PC-Lint
1.安装PC-Lint
PC-Lint是一款收费的工具,大家可以网上搜索相关po解版本,相关安装很简单,这里不说明。
2.MDK添加PC-Lint
在MDK的帮助文档中,有相关添加和配置说明,我这里也简单说下。
A.菜单Tools -> Set-up PC-lint 进入配置界面(如上图)
B.添加lint-nt.exe
前提需要安装PC-Lint,指向安装路径下的lint-nt.exe。点击“...”即可添加(标记1)。
C.添加co-ARMCC-5.lnt
这个路径是MDK安装目录下面,可参看上图(标记2)。
D.MISRA 规则配置
这里参看帮助文档,选择MISRA_C_2012_Config (标记3)。
E.增加PC-Lint命令
例如,要禁止PC-lint输出的info 714消息,可以在此对话框中输入-e714 (标记4)。
当然,本文重点在于引导大家了解PC-Lint这个工具,想要运用PC-lint这个工具,还需要掌握更多相关规则、配置。
上一篇:SPCE061A使用时基,实现从8Hz到1024Hz的定时器
下一篇:STM8学习笔记四——STM8的GPIO基础知识
推荐阅读最新更新时间:2024-11-10 01:36
设计资源 培训 开发板 精华推荐
- AM2S-0505SZ 5V 2瓦直流转直流转换器的典型应用
- 使用 ROHM Semiconductor 的 BD48L50G-TL 的参考设计
- LT1236BILS8-5 精密、低噪声、薄型密封电压基准的典型应用电路,以在励磁放大器中提供精确匹配
- ADM7172CP-EVALZ,用于评估 ADM7172 2A 线性稳压器的评估板
- FRDM-17533EV-EVB: Freedom扩展板 - MPC17533,双H桥,步进马达驱动器,2.0V-8.6V,0.7A,外部VG
- LTM4622EY 3.3Vin、1.5V 和 1.2V 输出、2.5A 设计的典型应用电路,具有输出一致跟踪功能
- USB Type-C™和电力输送双端口接口板,带汽车级STUSB1702Y USB Type-C控制器
- 具有 I2C 兼容监视功能的 LTC4215 和 LTC4215-2 热插拔控制器的典型应用
- DDS信号发生器 (基于AD9833模块和51单片机的)
- LTC3860 的典型应用 - 双路、多相降压型电压模式 DC/DC 控制器,具有均流功能