구조체에 약간의 문제가 있으며 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 = 0을 전달해야합니다. 필수 임베디드 헤더 파일에서 PINB4 및 PINB의 크기와 유형을 다시 확인하고 일치하는지 확인하십시오. – DanielV
죄송합니다. 아마도 BUTTONS_ID_1 = 0이라고 가정해야합니다. – DanielV
'PINB4'가 0 ~ 31 범위를 벗어난 것으로 의심됩니다. 그렇다면'1 << PINB4'는 원하는 것이 아닙니다. – chux