2013-01-13 103 views
1

在微控制器/嵌入式系统中是否有任何通用编程等价于低级中断?C++中的自定义事件/中断处理

我对事件(鼠标事件等)的概念模糊不清,它似乎相似但不够通用。 是否有一种机制(本机或其他),特别是在C/C++中处理自定义事件,即触发由用户定义的条件决定的事件,比如说,当鼠标指针移动到特定区域时一个特定的用户操作发生?

为了提供一些上下文,我正在开发一个基于OpenCV的交互式项目,我想在用户指向屏幕上的特定位置时触发特定的操作。

在视频流的每次迭代中,检查指针当前是否位于屏幕上的某个位置似乎是计算的特别浪费,我希望根据预定义的条件自动执行函数调用。

或者是否有任何其他(更有效)的机制,我可以改善这一过程?

谢谢。

回答

1
  1. 在microP或microC中没有C/C++中的中断编程。
  2. 如果您的屏幕是触摸屏,那么您尝试获取操作系统的SDK或操作系统的API以在触摸发生时得到通知。 (操作系统在内部维护一个中断表,用于触摸或键盘按下或鼠标移动,我们可以编程我们想要在这样的事件上执行的逻辑,无非就是如此..)。
  3. 如果不触摸,则必须使用传感器(通常是摄像头(网络摄像头))监视用户的位置。为此,您必须检查相机的每个框架以确定用户的位置。 编辑:
  4. 你提到的是正确的方式。它更好地检查每一帧或否则系统的响应会缓慢。您可以将计数器分配给1,并在每帧中增加一个计数器,并在达到任何所需值时重置计数器。这几乎等同于一个无限循环。
  5. 或者你可以接受键盘上的某个按键来打开循环(OpenCV具有这样的功能)
  6. 更高级一点的方法是在与执行程序的主线程不同的线程中从相机抓取帧。所以你所要做的就是开始和停止那个线程。
+0

我正在为桌面编程,所以(2)不适用。那么,我将不得不轮询每个帧的所有条件?还是有什么替代方法可以减少每帧检查次数? –

+0

如果您使用相机,那么理想情况下您必须...但是因为相机的速度是20 - 30 fps,所以您每50 - 30毫秒就会对手部运动进行取样。通常人手不会移动得太快,所以您可以每隔500毫秒或每秒采样一次...因此在20至15帧的间隔后检查... –

+0

在相关主题上,如何监视已经过去的帧数?我的意思是,如果您以相当快的速度进行采样,则在某些时刻,保持帧数的变量会溢出并需要重置。这是通常的程序还是有更好的出路?我对此很陌生,请原谅我缺乏知识。 –