2013-01-15 62 views
0

数组我有一个头文件中声明:语言中使用#define以C语言创建

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

,我写PORTC.0访问我的PIC处理器端口,PORTC.1 ... PORTC.7 。

我想就这些端口的阵列,并且我想是这样的:

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

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

我希望能够循环虽然以简单的方式的端口。我怎样才能做到这一点?

+3

而当您尝试该代码时发生了什么? –

+0

我没有,因为我不知道是什么类型 – Rickard

+0

如果'PORTC'是位于地址0x07处的'char','PORTC.5'会引用什么?该语法只适用于'struct'或'union'。 – tomlogic

回答

0

该编译指示显然是某种特定于编译器的语言扩展,但是您的代码看起来可能正常工作。

此示例仅使用常规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; 
}