Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL中的串行中断,使用哪种结构? 我正在编写一个OpenGL的软件,它是由Linux在.C++下用UART(串口中的Boox::Asio)驱动的。_Opengl_Boost_Serial Port_Boost Asio_Uart - Fatal编程技术网

OpenGL中的串行中断,使用哪种结构? 我正在编写一个OpenGL的软件,它是由Linux在.C++下用UART(串口中的Boox::Asio)驱动的。

OpenGL中的串行中断,使用哪种结构? 我正在编写一个OpenGL的软件,它是由Linux在.C++下用UART(串口中的Boox::Asio)驱动的。,opengl,boost,serial-port,boost-asio,uart,Opengl,Boost,Serial Port,Boost Asio,Uart,我目前已经完成了数据的接收和处理,并准备用OpenGL将其可视化。这个问题可能不限于OpenGL,无论如何,我的问题是: 如何从UART回调函数调用OpenGL绘图函数 当然,我应该能够通过以下方式运行它: 使用任何IPC(管道、套接字、信号量)方法 将OpenGL绘图函数或其类作为变量传递给UART回调 把所有的东西都放在一节课上 我遇到过很多类似的案例,并且以不同的方式实现。但我还是不知道正确的答案是什么 我个人不喜欢管道或文件IO IPCs,唯一剩下的选择是套接字、信号量和共享内存,我一直

我目前已经完成了数据的接收和处理,并准备用OpenGL将其可视化。这个问题可能不限于OpenGL,无论如何,我的问题是:

如何从UART回调函数调用OpenGL绘图函数

当然,我应该能够通过以下方式运行它:

  • 使用任何IPC(管道、套接字、信号量)方法
  • 将OpenGL绘图函数或其类作为变量传递给UART回调
  • 把所有的东西都放在一节课上
  • 我遇到过很多类似的案例,并且以不同的方式实现。但我还是不知道正确的答案是什么

    我个人不喜欢管道或文件IO IPCs,唯一剩下的选择是套接字、信号量和共享内存,我一直在使用它们

    如何从UART回调函数调用OpenGL绘图函数

    不要

    只能从绘图处理程序中绘图。串行I/O应该像其他输入一样处理:在事件循环或空闲处理程序中处理它,使用接收到的数据更新表示新状态的变量,并发出重画


    它不是一个tty,而是一个Linux evdev,但总体思路是一样的:这是一个小型演示程序,演示如何从3D Connextion Space Navigator读取输入并将其处理为3D场景,使用OpenGL渲染:

    当然取决于应用程序

    串行通信回调函数访问OpenGL状态确实很有意义,但是如果您正在做一个原型/概念验证,为什么要让您的工作更困难呢

    共享内存是一个不错的选择;回调可以将数据放在某个地方,触发绘图线程并等待它完成。(这离调用绘图函数本身的回调只有一步之遥。)


    虽然我可能更喜欢传递信息。收到数据后,回调可以打包并发送(复制)到绘图线程,绘图线程可以在收到数据时绘制数据。这将增加UART代码不等待绘图代码的好处,尽管考虑到OpenGL的速度,尤其是与串行通信相比,这不太可能成为问题。

    我喜欢它的实现方式。然而,我问这个问题是因为我还不熟悉OpenGL。在idle()函数中,在每个变量更新并调用glutPostRedisplay()之后;。然后,idle函数是否等待直到GLUTPOSTREDIDISPLAY();完成了,还是只是告诉GPU去画?因为,在前一种情况下,我担心在绘图期间丢失一些接收到的数据。@Tae:glutPostDisplay告诉GLUT在完成下一个事件循环迭代后进行绘图。它不会等待。此外,您不会丢失数据,因为输入由Linux缓冲。这不像DOS,在下一个IRQ击中您之前,您必须从IO mem中获取数据,否则FIFO溢出。如果您真的想尽快并持续地读取数据,请仅为IO使用第二个线程。我想线程是一个不错的选择……我已经用idle()进行了测试,但它的空闲频率不足以进行采样。