2012-10-19 162 views
0
//------------------------------------------------------Experimental 
typedef struct tagPCA21125_00H{ 
union 
    {           
    UCH8 DATA[0x0F];         
    struct { 
        PCA21125_00H_CTRL1_t CTRL1; //Byte 0 
        PCA21125_01H_CTRL2_t CTRL2; 
        PCA21125_02H_tSec_t tSec; 
        PCA21125_03H_tMin_t tMin; // t = time, a = alarm 
        PCA21125_04H_tHr_t tHr; 
        PCA21125_05H_tDay_t tDay; 
        UCH8   tWeekday; 
        PCA21125_07H_tMonth_t tMonth; 
        PCA21125_08H_tYear_t tYear; 
        UCH8   aSec;  
        UCH8   aMin; 
        UCH8   aHr; 
        UCH8   aWeekday; 
        PCA21125_0DH_CLKOUT_t CLKOUT; 
        PCA21125_0EH_Timer_t TimerCTRL; 
        UCH8   TimerData; 
     }; 
    }; 
}PCA21125_t; 
extern volatile PCA21125_t PCA21125; 


//------------------------------------------------------Control 1 
typedef struct tagPCA21125_00H{ 
union 
    {           
    UCH8 Byte;      
    struct { 
       UCH8 :1;  //Bit0 
       UCH8 :1; 
       UCH8 h12_24:1; // Must be 0 (alway) 
       UCH8 POR_OVRD:1;       
       UCH8 :1;     
       UCH8 STOP:1; // Must be 0 (alway) 
       UCH8 :1;      
       UCH8 EXT_TEST:1;       
     }; 
    }; 
}PCA21125_00H_CTRL1_t; 
//extern volatile PCA21125_00H_CTRL1_t PCA21125_CTRL1; 

上面的代碼,我試圖實現,但MPLABX XC8編譯器,但不喜歡的標籤(PCA21125_00H_CTRL1_t CTRL1),所以我在做什麼錯誤?如何解決這個問題?XC8 typedef結構和數組

所提供的編譯器錯誤

0_Main/../5_PCA21125/PIC18_PCA21125.h:29: warning: missing basic type; int assumed 
0_Main/../5_PCA21125/PIC18_PCA21125.h:29: error: ";" expected 
0_Main/../5_PCA21125/PIC18_PCA21125.h:29: warning: missing basic type; int assumed 
0_Main/../5_PCA21125/PIC18_PCA21125.h:30: warning: missing basic type; int assumed 
0_Main/../5_PCA21125/PIC18_PCA21125.h:30: error: ";" expected 
0_Main/../5_PCA21125/PIC18_PCA21125.h:30: warning: missing basic type; int assumed 

等等等等

+0

沒有足夠的信息來幫助您:您認爲'PCA21125_00H_CTRL1_t'在哪裏聲明?編譯器錯誤表明它*不是*。看起來這同樣適用於'PCA21125_01H_CTRL2_t' ... – John3136

+0

John,它們基本上與此處顯示的形式相同,但名稱和位不同,無需全部包含它們。 – riscy

回答

1

它看起來像的typedef PCA21125_t指型PCA21125_00H_CTRL1_t,這在文件中後面定義,所以它沒有在規定它在CTRL1成員的聲明中被引用的點。如果您顛倒了兩個typedef的順序,它可能會編譯。

+0

根據答案解決,我把代碼放在struct的底部,然後嘿,它工作! – riscy