使用直接寄存器寻址时的PC Lint错误
我有一个现有的C代码(第三方源代码,我无法更改),PC Lint(9.0版)不会接受该代码。代码运行在嵌入式环境中,使用了Green Hills编译器 有人知道如何配置PC Lint以接受代码定义吗? 我只附加了结构中第一个成员的错误消息 以下是来自头文件的定义:使用直接寄存器寻址时的PC Lint错误,c,embedded,cpu-registers,lint,pc-lint,C,Embedded,Cpu Registers,Lint,Pc Lint,我有一个现有的C代码(第三方源代码,我无法更改),PC Lint(9.0版)不会接受该代码。代码运行在嵌入式环境中,使用了Green Hills编译器 有人知道如何配置PC Lint以接受代码定义吗? 我只附加了结构中第一个成员的错误消息 以下是来自头文件的定义: typedef struct { uint32_t PINSEL0; // see ERROR message from PCLint, line 153 in LPC23.h uint32_t PINS
typedef struct
{
uint32_t PINSEL0; // see ERROR message from PCLint, line 153 in LPC23.h
uint32_t PINSEL1;
uint32_t PINSEL2;
} LPC_PINCON_TypeDef;
#define LPC_PINCON_BASE (0xE002C000)
#define LPC_PINCON ((LPC_PINCON_TypeDef *) LPC_PINCON_BASE)
#define PINSEL_BASE_ADDR 0xE002C000
#define PINSEL0 (*(volatile unsigned long *)(PINSEL_BASE_ADDR + 0x00))
/**************************/
/* function in c-file */
void Port_Init()
{
LPC_PINCON->PINSEL0 &= ~(3 << 4); //p0.2
LPC_PINCON->PINSEL0 |= (1 << 4); //
LPC_PINCON->PINSEL0 &= ~(3 << 6); //p0.3
LPC_PINCON->PINSEL0 |= (1 << 6); //
// etc................
}
/*******************************************/
// ERRORS from PC-Lint
// **********ERROR MESSAGES**************
#... (volatile unsigned long *)(PINSEL_BASE_ADDR + 0x00))
uint32_t PINSEL0;
LPC23.h 153 Error 10: Expecting identifier
#... BASE_ADDR + 0x00))
uint32_t PINSEL0;
LPC23.h 153 Error 102: Illegal parameter specification
#... BASE_ADDR + 0x00))
uint32_t PINSEL0;
LPC23.h 153 Error 10: Expecting ';'
typedef结构
{
uint32\u t PINSEL0;//请参阅LPC23.h中来自PCLint的第153行的错误消息
uint32_t PINSEL1;
uint32_t PINSEL2;
}LPC_PINCON_TypeDef;
#定义LPC_PINCON_底座(0xE002C000)
#定义LPC_PINCON((LPC_PINCON_TypeDef*)LPC_PINCON_BASE)
#定义PINSEL_BASE_ADDR 0xE002C000
#定义PINSEL0(*(易失性无符号长*)(PINSEL\u BASE\u ADDR+0x00))
/**************************/
/*c文件中的函数*/
无效端口_Init()
{
LPC|u PINCON->PINSEL0&=(3 PINSEL0&=(1 PINSEL0&=(3 PINSEL0)&=(1摘自:
如何告诉lint不要抱怨我的编译器头?
Lint使用“library”标题的标签来指定这些标题
程序员没有控制权(例如编译器头)。默认情况下
来自外部目录或包含在中的所有#include都是
被认为是“库”。可以通过使用+libclass
选项,并使用+/-libdir
和+/-libh
选项进行进一步微调。
然后,您可以使用-wlib
、-elib
和-elibsym
选项来控制这些
从库头发出的消息。编译器选项文件已分发
PC lint通常包含一个-wlib(1)
选项,该选项限制
库标题仅指向错误(禁止显示警告和信息性消息)
我想,这应该适合您的需要。如果不是,那么,一个重现您警告的最小示例就好了;上面的内容让我感到困惑,因为#PINSEL0的定义是在它在结构中用作标识符之后进行的。如果#define PINSEL0…
宏定义在端口_Init()时处于活动状态
函数已编译,我无法理解您是如何避免编译器错误的。似乎一定有某种东西(一个#ifdef
或其他什么东西)在编译过程中禁用了PINSEL0
宏-这是不必要的(而且是有害的)如果您使用的是LPC\u PINCON\u TypeDef
struct来访问寄存器
您需要确保在运行lint步骤时设置了相同的控制选项/macro/whatever
你能显示实际的LPC23.h
文件吗(或者在网上的某个地方指向它)?我找到了一个类似的文件()仅使用“直接宏”技术,不提供结构成员访问技术。我假设LPC\u PINCON\u TypeDef
和宏PINSEL0
来自或用于不同的情况。我希望允许您更改其中一个,因为定义立即发生冲突信息和通信技术。
如果我假设代码本身编译正确,那么这两个定义在一个翻译单元中永远不会同时使用,并且PC Lint可能使用了不正确的设置
我认为您可能没有向Lint提供编译器的隐式宏定义。至少必须定义\uuuughs\uuugh
宏,使用选项-d\uuugh\uugh
。并查看手册中的更多选项
您可能希望使用选项-vf
检查确切的文件及其包含顺序(或者为了完整性,您可以使用-vaif
检查Lint用于查找包含文件的搜索位置);但要小心,输出非常大,很容易从窗口甚至其缓冲区中滚动。最好将输出导入一个文件,然后检查它
虽然我不太愿意指出我自己的网站,但如果你愿意,看看我的PDF,你会发现从零到使用PC Lint正确地过滤代码的简单步骤,所有选项都需要设置
如果所有这些都不起作用,那么您必须详细说明正在使用的设置以及编译器和PC Lint的选项。当您不愿意更改代码时,为什么要使用Lint?它不是编译器,而是分析器。软件项目由第三方代码组成(我不想更改)如果可能的话,我只希望我自己的书面代码有lint错误。