使用直接寄存器寻址时的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

我有一个现有的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 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错误。