2013-01-15 60 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; 
}