本发明属于数据处理技术领域,具体涉及一种dmx数据双缓冲方法、装置。
背景技术:
dmx512固定波特率为250kbps,数据长度为512个数据,传输一个88us的低电平数据,作为一包数据的起始帧头,512字节的数据包之前还有一个字节,表示设备的代号或自定义用途,通常是0,该字节的数据可用自动写码命令之用,目前控台厂家设计的控制器发出来的数据有的是64、256个字节非标dmx512信号,所有通常我们接收到了包头(包数据的起始帧头)认为接收完一个数据包(不管是64、256、512个字节),紧接着我们会对接收到的数据进行处理,同时dmx的数据不断的发过来(1个字节的时间为44us速度非常快),很有可能还没有处理完刚刚接收的数据,后面来的数据就把上一半数据包的前面部分数据覆盖掉了,就会出现灯具不同步的现象,还有当几台灯的dmx地址间隔得比较远的时候,不同步的现象更加明显更加容易出现,比如:xy运动系统不一致、颜色系统打出来的颜色不一致等等。
技术实现要素:
本发明的目的是提供一种dmx数据双缓冲方法、装置,解决了现有技术中存在的还没有处理完刚刚接收的数据,后面来的数据就把上一半数据包的前面部分数据覆盖掉的问题。
一种dmx数据双缓冲方法,具体按照以下步骤实施:
步骤1:获取存放dmx数据的地址buff,buff包括buff1和buff2;
步骤2:当接收到包头,根据标志位获取下一个数据包存放的buff地址;当接收到下一个包头,根据标志位获取下一个数据包存放的buff地址;
步骤3:重复执行,同时对获取得到的buff数据进行处理。
在其中一个实施例中,所述buff1和所述buff2为两个长度一样、地址不同的buff。
在其中一个实施例中,所述步骤2中根据标志位获取下一个数据存放的buff地址具体为:
当标志位为0时,获取下一个数据包存放的buff地址为buff2;
当标志位为1时,获取下一个数据包存放的buff地址为buff1。
在其中一个实施例中,所述步骤2中根据标志位获取下一个数据包存放的buff地址具体为:
当标志位为0时,获取下一个数据包存放的buff地址为buff1;
当标志位为1时,获取下一个数据包存放的buff地址为buff2。
在其中一个实施例中,所述对获取得到的buff数据进行处理后,将处理后的数据发送到各个副板。
一种dmx数据双缓冲装置,包括:
地址获取模块,用于获取存放dmx数据的地址buff,buff包括buff1和buff2;
buff设置模块,用于根据标志位设置接收buff;
数据处理模块,用于对获取得到的buff数据进行处理。
本发明的有益效果是:本发明一种dmx数据双缓冲方法,采用两个buff地址对获取到的dmx数据进行缓冲,这样两个buff相互没有冲突,数据不会相互影响。
附图说明
图1是本发明dmx数据双缓冲方法的流程图。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
本发明一种dmx数据双缓冲方法,具体按照以下步骤实施:
步骤1:获取存放dmx数据的地址buff,buff包括buff1和buff2;
其中,所述buff1和所述buff2为两个长度一样、地址不同的buff。
步骤2:当接收到包头,根据标志位获取下一个数据包存放的buff地址;当接收到下一个包头,根据标志位获取下一个数据包存放的buff地址。
其中,根据标志位获取下一个数据包存放的buff地址具体为:
当标志位为0时,获取下一个数据包存放的buff地址为buff2;
当标志位为1时,获取下一个数据包存放的buff地址为buff1。
或者,
当标志位为0时,获取下一个数据包存放的buff地址为buff1;
当标志位为1时,获取下一个数据包存放的buff地址为buff2。
即,使用dmx数据双缓冲机制,一个数据包接完成,设置下一个数据包存放到另一个buff地址,两个buff相互没有冲突,数据不会互相影响。
步骤3:重复执行,同时对获取得到的buff数据进行处理。
上述对获取得到的buff数据进行处理后,将处理后的数据发送到各个副板,包括xy控制系统、颜色控制系统、图案控制系统、其他组件控制系统。
本发明的工作原理是:通常我们接收到了包头(包数据的起始帧头)认为接收完一个数据包,但同时也是下一个数据包的开始,dmx数据的接收是通过串口中断自动接收,接收到数据就会把缓冲区的数据更新,每个字节更新的时间是44us(0.000044s),速度非常的快,所以有时候还没来得及处理这一包数据,下一包的数据已经连续的发过来,这样就会把前面的数据给覆盖掉了,这时候一个buff里面就用两个数据包的数据:前面某几个是当前数据包的后面的大部分数据就是上一个数据的数据。采用dmx数据双缓冲机制避免了上述数据覆盖的问题,因为一个数据包接收完成,设置下一个数据包存放到另一个buff地址,两个buff相互没有冲突,数据不会互相影响。
具体地,在cpu的sram里面开辟两个长度一样、地址不同的buff,因为地址不一样所以数据相互没有冲突、不会互相影响。在cpu的sram里面申请一个标准位,数据接收完会根据这个标准位的标志去判断当前的buff,从而设置下一包数据存放的buff地址。处理buff的数据的时候也是根据这个标志来处理数据。
本发明一种dmx数据双缓冲方法,采用两个buff地址对获取到的dmx数据进行缓冲,这样两个buff相互没有冲突,数据不会相互影响。
本发明一种dmx数据双缓冲装置,包括:
地址获取模块,用于获取存放dmx数据的地址buff,buff包括buff1和buff2;
buff设置模块,用于根据标志位设置接收buff;
数据处理模块,用于对获取得到的buff数据进行处理。