在微芯片C30編譯我可以設置銷的i /使用LAT O值以這種方式寄存器:[ANSI C]通行證bitifield作爲參考
LATBbits.LATB10=1;
LATBbits定義爲:
typedef struct tagLATBBITS {
unsigned LATB0:1;
unsigned LATB1:1;
unsigned LATB2:1;
unsigned LATB3:1;
unsigned LATB4:1;
unsigned LATB5:1;
unsigned LATB6:1;
unsigned LATB7:1;
unsigned LATB8:1;
unsigned LATB9:1;
unsigned LATB10:1;
unsigned LATB11:1;
unsigned LATB12:1;
unsigned LATB13:1;
unsigned LATB14:1;
unsigned LATB15:1;
} LATBBITS;
extern volatile LATBBITS LATBbits __attribute__((__sfr__));
我目標是寫可以使用LAT寄存器作爲參數設定的I/O值的函數,在僞代碼:
void setPin(unsigned int* latReg, unsigned int value){
(*latReg)=value;
}
setPin(&LATBbits.LATB10, 1);
不幸的是此代碼不會編譯是因爲「無法獲取位域'LATB10'的地址」。
我需要它,因爲我想實現一個可以處理端口擴展器的simil類庫。每個端口擴展器可以有不同的引腳,所以我需要配置它,我認爲做這樣的事情:
typedef struct sPortExpander{
unsigned int* CS;
unsigned int* SPBUFF;
ecc...
} PortExpander
void PortExpander_setOutput(PortExpander p, unsigned char value){
(*p.CS)=0;
// Send SPI data
(*p.CS=1);
}
這樣,我可以管理多個端口擴展。
那麼,有一種方法可以做我想做的事情嗎?
謝謝。
爲什麼不能使用宏? – ouah 2012-08-12 12:45:48
@ouah:我已更新我的問題。 – blow 2012-08-12 13:00:53