1. 引言
C语言在嵌入式领域应用非常广泛,其主要优点是灵活和高效,但若在使用过程中不加以规范,容易引入各种潜在的代码问题。
先来看一段C代码,这段代码中有多少C语言的使用错误?
uint8_t vFunc(void)
{
uint8_t index = 0;
for (index = 0; index {
if (index == 3)
{
vFunc_1(&index);
return true;
}
}
}
比较容易发现的问题有:
● for循环结束后没有返回值
不太容易发现的问题有:
● index初值没有使用
● index值可能在vFunc_2()内被清零,使得循环一直被执行
为了在编码阶段出这些问题,常用的分析方法有静态代码分析和动态代码分析。有研究表明,使用动态代码分析到的问题中的95%都可以用静态代码分析到。
中小型嵌入式软件项目一般使用静态代码分析工具作为主要分析手段,其中最常见的工具是PClint。PCLint是GIMPEL SOFTWARE 公司研发的C/C 软件代码静态分析工具,支持几乎所有流行的编辑环境和编译器。PC-lint不但可以检测单个文件,也可以从整个项目的角度来检测问题。支持Scott Meyes的名著(Effective C /More Effective C )中说描述的各种提高效率和防止错误的方法。
c语言编译器ide代码编辑在我们的项目中,使用C语言作为PIC32单片机的编程语言,开发环境是MPLABX,代码查看工具是source insight。本文的主要内容就是如何将PCLint工具集成到上述两种工具中。集成完成后,可通过快捷键调用lint工具,对目标代码进行静态分析,再根据分析结果优化代码。
2. 配置PCLint
2.1. 安装PCLint
下载PCLint并安装:
升级到最新版本: , 下载下列文件:
● 复制升级包和lpatch到安装路径(C:\lint)
● 按住shift 右键,打开快捷菜单,选择“在此处打开命令窗口”
● 输入命令并执行:lpatch l9-a-b.lp, …, 依次类推直到l9-K-L.lp(每次输入一条执行)
● 输入命令lint-nt -v,完成上述步骤后,显示当前版本是9.00L
2.2. 下载xc32编译器共用的文件
打开 ,下载Compiler Options files:
● co-cci.lnt
● co-xc32.lnt
将上述文件存放在lint安装路径下的lnt文件夹中(c:\lint\lnt)。
2.3. 生成编译器专用的文件
打开co-xc32.lnt文件,将line 12 ~ line 23替换成如下内容:
-header(C:\lint\lnt\lint-cmac.h) // preprocessor macro definitions. Use -E -dM together with your other compilation options
// to generate all preprocessor macro definitions
// xc32-gcc -mprocessor=processor_name -E -dM empty.c (empty file)
// Any options used in the compilation and that would potentially define certain macros
// should be passed as well.
C:\lint\lnt\include-path.lnt // path to header files. Use -v option to find the path to include files.
// xc32-gcc -mprocessor=processor_name -v empty.c (empty file)
// Use these paths as an argument to -i option.
// Common C Interface
C:\lint\lnt\co-cci.lnt
上述co-cci.lnt就是2.3中下载的文件,需要指定一个索引路径。lint-cmac.h和include-path.lnt需要我们自己生成。
2.3.1. lint-cmac.h
● 到PIC32单片机的编译器的路径(C:\Program Files (x86)\Microchip\xc32\v1.40\bin)
● 在相同路径下创建空文件empty.c
● 按住shift 右键打开控制台,输入如下命令:
xc32-gcc -mprocessor=PIC32MX470F512L -E -dM empty.c
● 输出结果复制到lint-cmac.件并保存。如果输出结果不能全部显示,可以加大控制台的缓冲区,方法如下:
右击控制台标题栏,选择属性
选择布局选项卡,屏幕缓冲区大小的高度改成1000
2.3.2. include-path.lnt
● 相同路径下输入如下命令:
xc32-gcc -mprocessor=PIC32MX470F512L -v empty.c
● 从输出结果中到编译器include文件路径:
#include "..." search starts here:
#include <...> search starts here:
c:\program files (x86)\microchip\xc32\v1.40\bin\bin\../../lib/gcc/pic32mx/4.8.3/include
c:\program files (x86)\microchip\xc32\v1.40\bin\bin\../../lib/gcc/pic32mx/4.8.3/include-fixed
c:\program files (x86)\microchip\xc32\v1.40\bin\bin\../../lib/gcc/pic32mx/4.8.3/../../../../pic32mx/include
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论