我遇到了一點結構問題,並從atmega328p定義。如何定義一個指向端口地址的指針
我有以下代碼:
typedef struct {
char port;
unsigned char pin;
unsigned long timestamp;
} BUTTONS;
BUTTONS button_1;
BUTTONS button_2;
BUTTONS button_3;
BUTTONS* button[BUTTONS_ID_COUNT] = {&button_1,&button_2,&button_3};
void Button_init(void){
button[BUTTONS_ID_1]->port = PINB;
button[BUTTONS_ID_1]->pin = PINB4;
button[BUTTONS_ID_1]->timestamp = 0;
}
unsigned char Button_instantRead(int id){
//return PINB & (1 << PINB4);
return button[id]->port & (1 << button[id]->pin);
}
我想用我的Button_instantRead()
能夠通過只給它一個ID號來讀取任何端口。我使用我的init函數來設置哪個引腳與哪個端口關聯。但由於某種原因,當我打電話給我的Button_instantRead()
功能時,即使按下我的開關,也不會收到1。
我在我的主文件中使用註釋行嘗試了我的配置,一切正常。
我在return
行中做錯了什麼?
一些谷歌搜索後,我發現char
可能不是引用端口的正確類型。我想我會更適合指向端口地址的第一個元素的指針,但我不知道該如何去做,也找不到答案。
猜測:確保讀取引腳,您傳遞ID = 0,而不是ID = 1。仔細檢查您的強制性嵌入式頭文件中的PINB4和PINB的大小和類型,確保它們匹配。 – DanielV
糟糕,我應該說假設BUTTONS_ID_1 = 0這可能是。 – DanielV
懷疑'PINB4'在0到31之間。如果是這樣,'1 << PINB4'不是你想要的。 – chux