2013-01-13 5 views
1

마이크로 컨트롤러/임베디드 시스템에 저수준 인터럽트와 같은 범용 프로그래밍이 있습니까?C++에서 사용자 지정 이벤트/인터럽트 처리

나는 유사하지만 일반적으로는 보이지 않는 이벤트 (마우스 이벤트 등)의 개념을 모호하게 알고 있습니다. C/C++에서 특별히 사용자 정의 이벤트, 즉 마우스 포인터가 특정 영역으로 이동할 때 말처럼 사용자 정의 조건에 의해 트리거링이 결정되는 이벤트를 처리하는 메커니즘 (원시 또는 기타)이 있습니까? 특정 사용자 작업이 발생합니까?

일부 컨텍스트를 제공하기 위해 사용자가 화면의 특정 위치를 가리킬 때 특정 동작을 트리거하려는 OpenCV 기반 대화 형 프로젝트에서 작업하고 있습니다.

비디오 스트림의 각 반복에서 포인터가 현재 화면에 너무 많이 위치하는지 확인하는 것은 특별한 낭비처럼 보입니다. 미리 정의 된 조건에 따라 함수 호출을 자동화하고 싶습니다 .

또는이 절차를 개선 할 수있는 다른 (더 효율적인) 메커니즘이 있습니까?

감사합니다.

답변

1
  1. microP 또는 microC 에서처럼 C/C++에서 인터럽트 프로그래밍이 없습니다.
  2. 화면이 터치 스크린 인 경우 터치 할 때 알림을 받으려면 운영 체제의 SDK 또는 OS의 API를 유지하려고 시도하십시오. (OS는 내부적으로 터치 나 키패드 누르기 또는 마우스 움직임을위한 인터럽트 테이블을 유지 관리하며, 우리는 그러한 이벤트에서 실행하고자하는 로직을 프로그래밍 할 수 있습니다.
  3. 센서에 접촉하지 않으면 센서 (일반적으로 카메라 (웹 카메라))를 통해 사용자의 위치를 ​​모니터링해야합니다. 이를 위해서는 사용자의 위치를 ​​결정하기 위해 카메라의 각 프레임을 확인해야합니다. 편집 : 당신이 언급 한 어떤
  4. 이 부진 할 각 프레임 또는 다른 시스템의 응답을 확인하는 올바른 way.Its 좋습니다. 1에 카운터를 할당하고 각 프레임마다 카운터를 증가시키고 원하는 값에 도달 할 때 카운터를 재설정 할 수 있습니다. 이것은 무한 루프와 거의 같습니다.
  5. 키보드에서 어떤 키를 받아 루프를 깨뜨릴 수 있습니다 (OpenCV는 그러한 기능을 가지고 있습니다)
  6. 조금 더 고급 방법은 실행중인 프로그램의 메인 스레드와 다른 스레드에서 카메라의 프레임을 잡는 것입니다 . 그래서 당신이해야 할 일은 그 실을 시작하고 멈추는 것입니다.
+0

데스크톱 용으로 프로그래밍 중이므로 (2)는 적용되지 않습니다. 그래서 모든 조건에 대해 각 프레임을 폴링해야합니까? 아니면 프레임 당 수표 수를 줄일 수있는 대안이 있습니까? –

+0

카메라를 사용하면 이상적으로 카메라가 20 ~ 30 fps이므로 매 50 ~ 30 ms마다 손 움직임을 샘플링합니다. 일반적으로 인간의 손이 너무 빨리 움직이지 않습니다. 500ms 또는 매 초마다 샘플 ... 그래서 20 ~ 15 프레임의 간격 후에 확인하십시오 ... –

+0

관련 항목에서 어떻게 경과 된 프레임 수를 모니터링합니까? 제 말은, 상당히 빠른 속도로 샘플링하면 어떤 시점에서 프레임 수를 유지하는 변수가 오버플로되어 다시 설정해야한다는 것입니다. 이것은 일반적인 절차입니까 아니면 더 나은 방법이 있습니까? 나는이 부분에 익숙하지 않으므로 나의 지식 부족을 용서해주십시오. –

관련 문제