1

我正在使用 Visual Studio 2005 并接受构建 WinCE 6.0 OS Image 的培训。我在引脚多路复用器设置部分。我已经设置了一个宏 BSP_HC1,因此单独使用该宏进行编码应该可以工作。编码的一部分是,

#define PAD_ENTRY(x,y)      {PAD_ID(x),y,0},
#define SAFE_MODE            7
#define PAD_ID(x) (offsetof(OMAP_SYSC_PADCONFS_REGS,CONTROL_PADCONF_##x)/sizeof(UINT16))

// OMAP_SYSC_PADCONFS_REGS is a structure and CONTROL_PADCONF_GPMC_A1 (for eg.,) is an element in it.

#define INPUT_DISABLED          (0<<8)
#define MUXMODE(x)              ((x & 0x7)<<0)
typedef struct {
    UINT16 padID;
    unsigned int Cfg:15;    
    unsigned int inUse:1;
} PAD_INFO;



#ifdef BSP_HC1
#define GPMC_PADS \
  PAD_ENTRY(GPMC_A6   ,INPUT_DISABLED | MUXMODE(SAFE_MODE))   \
  PAD_ENTRY(GPMC_nCS2 ,INPUT_DISABLED | MUXMODE(0))   
#else
#define GPMC_PADS \
  PAD_ENTRY(GPMC_A1       ,INPUT_DISABLED | MUXMODE(0))     \
  PAD_ENTRY(GPMC_A2       ,INPUT_DISABLED | MUXMODE(0))     \
  PAD_ENTRY(GPMC_A3       ,INPUT_DISABLED | MUXMODE(0))
#endif

它在 main.c 中被称为,

static const PAD_INFO ebootPinMux[] = {
            DSS_PADS
            GPMC_PADS
        USBOTG_PADS
            END_OF_PAD_ARRAY
    };

编译时出现错误:fatal error C1057: unexpected end of file in macro expansion它指向 GPMC_PADS。msdn解释了我可能会遗漏一些括号的错误。但是,这并没有帮助我解决这个问题。请指导我。

4

2 回答 2

3

实际上,我错过了一个括号!当我添加它时,错误得到了修复。谢谢。

于 2013-06-25T12:53:09.937 回答
1

在你给出的表达中 -

#define GPMC_PADS \
  PAD_ENTRY(GPMC_A6   ,INPUT_DISABLED | MUXMODE(SAFE_MODE))   \
  PAD_ENTRY(GPMC_nCS2 ,INPUT_DISABLED | MUXMODE(0)) 

PAD_ENTRY(GPMC_A6 ,INPUT_DISABLED | MUXMODE(SAFE_MODE)) 和 PAD_ENTRY(GPMC_nCS2 ,INPUT_DISABLED | MUXMODE(0)) 行位于同一行。

请检查 PAD_ENTRY 宏的实现是什么。我强烈认为问题是因为在同一行中使用了 PAD_ENTRY 宏两次。我觉得应该是这样的——

 #define GPMC_PADS \
 PAD_ENTRY(GPMC_A6   ,INPUT_DISABLED | MUXMODE(SAFE_MODE))  + \
  PAD_ENTRY(GPMC_nCS2 ,INPUT_DISABLED | MUXMODE(0))

意味着应该在两个 PAD_ENTRY 宏之间执行一些操作。

于 2013-06-24T09:31:39.293 回答