使用#define在C中创建一个数组

时间:2013-01-15 21:32:10

标签: c c-preprocessor pic pragma

我有一个头文件声明:

  #pragma char PORTC   @ 0x07
  #pragma char PORTD   @ 0x08
  #pragma char PORTE   @ 0x09

通过编写PORTC.0,PORTC.1 ... PORTC.7来访问PIC处理器上的端口。

我想用这些端口创建一个数组,我在想这样的事情:

#define ARRAY { {PORTC.5, PORTD.2, PORDC.0}, {PORTE.1, PORTD.3, PORTC.6}.... }

int main ( void )
{
   *type* somestuff[3][9] = ARRAY;
   ...
}

我希望能够以简单的方式循环访问端口。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

pragma显然是某种特定于编译器的语言扩展,但是你的代码看起来可能会起作用。

此示例仅使用常规C语法作为示例来说明正常完成的方式(显然不会对您的设备做任何特殊处理)。你应该进行明显的替换,看看它是否有效。

char PORTC_0 = 1;
....
char PORTE_6 = 42;

int main (void)
{
  struct {char port[3];} dev[3][9] = {{{PORTC_5, PORTD_2, PORDC_0},
                                       {PORTE_1, PORTD_3, PORTC_6},
                                       ....},
                                      {...},
                                      ....};
  int i, j;
  for (i = 0; i < 3; i++)
    {
      for (j = 0; j < 9; j++)
        {
           do_stuff (dev[i][j].port[0], dev[i][j].port[1], dev[i][j].port[2]);
        }
    }

  return 0;
}