我正在嘗試使用C在PIC24F MCU上將參考傳遞給I/O引腳作爲函數參數。對於PIC,設備頭文件提供對I/O緩衝區的訪問PIC通過特殊功能寄存器地址在C中運行
LATAbits.LATA2 = 0; // sets the pin (RA2 in this case) low.
if (PORTAbits.RA3) { // reads the state of the pin. (RA3)
我想要做這樣的事情:通過寄存器
int main() {
Configure(); // Sets up peripherals, etc.
WaitForHigh(PORTAbits.RA3); // waits for pin RA3 to go hi.
...
return 0;
}
void WaitForHigh(?datatype? pin_reference) {
while(!pin_reference); // Stays here until the pin goes hi.
}
所以我在想在這裏通過什麼數據類型?當我調查這個引腳時,究竟發生了什麼?下面,我從PIC24F器件頭中複製相關部分,以防萬一。
#define PORTA PORTA
extern volatile unsigned int PORTA __attribute__((__sfr__));
typedef struct tagPORTABITS {
unsigned RA0:1;
unsigned RA1:1;
unsigned RA2:1;
unsigned RA3:1;
unsigned RA4:1;
unsigned RA5:1;
} PORTABITS;
extern volatile PORTABITS PORTAbits __attribute__((__sfr__));
提前致謝!
我明白了。這似乎是我提出的問題的一個簡單而好的解決方案,但更一般地評估[宏與功能](http://stackoverflow.com/questions/9104568/macro-vs-function-in-c),它似乎對某些任務使用宏存在缺點。 – 2014-10-12 09:16:00
我會建議'#define WaitForHigh(p)do {while(!(p));} while(0)'既強制執行預期的'p'評估並防止代碼被意外包含在循環中, ;'被省略了。兩個*更多*原因宏需要特別的關心,並且可能是最好的避免。 – Clifford 2014-10-12 10:11:46