2014-05-23 2 views
2

안녕하세요, 도움이 필요합니다. ARM에 C++ 임베디드 애플리케이션을 만들고 있습니다. 푸시 버튼 이벤트를 얻을 필요가 있습니다. 인터넷에서 찾고 있었는데 방해가되는 가장 좋은 방법이라고 생각합니다. 나는이 "echo raise> /sys/.../gpio/gpio81/edge"와 같이 터미널을 통해 하나의 핀을 설정할 수 있음을 알고있다. 하지만 C++ 응용 프로그램에서 인터럽트를 어떻게 얻을 수 있는지 알아야합니다. 일부 특수 라이브러리를 사용해야하는지 모르기 때문에 몇 가지 예가 필요합니다.C++로 GPIO 버튼 이벤트 처리

누군가 저를 도울 수 있기를 바랍니다.

답변

2

수동 '기계식'푸시 버튼에는 디 바운싱이 필요합니다. 즉, 버튼을 누르는 것이 높은 I/O 성능을 필요로하지 않는다는 사실은 GPIO 인터럽트가 지나치게 과장되어 있음을 의미합니다. '물론 할 수는 있지만, 타이머 인터럽트로 GPIO 포트를 폴링하고, 입력 상태를 저장하고 이전 상태와 비교하는 것이 더 쉽고 안전합니다. GPIO 라인이 충분한 수의 샘플을 위해 상태를 변경하면 버튼 이벤트가 발생하고이를 처리 할 수 ​​있습니다.

작업 OS를 사용하는 경우 기존 타이머 인터럽트를 연결할 수 있습니다. 이는 GPIO 폴링을 처리하는 몇 가지 지침 일 뿐이므로 현저한 성능 저하가 발생하지 않아야합니다. button이 눌려 지거나 릴리즈 된 것으로 결정되면, 대기중인 쓰레드가 이벤트를 빠르게 처리 할 수 ​​있도록 세마포어를 신호 할 수 있습니다. 난 그냥 원하는 것을 해결책을 찾을 수

+0

안녕 마틴 답변 주셔서 감사합니다 어쨌든 감사합니다. 그래서 당신은 타이머 인터럽트를 만드는 것이 더 좋다고 제안하지만 C++로 어떻게 할 수 있습니까? "time_t"variable 및 time.h 라이브러리를 사용해야합니까? 미안하지만 인터럽트 및 GPIO에 대한 경험이 없습니다. – user3536692