一种嵌入式系统中串口分时复用方法

文档序号:6377051阅读:1420来源:国知局
专利名称:一种嵌入式系统中串口分时复用方法
技术领域
本发明涉及一种串ロ分时复用方法。
背景技术
串ロ,即串行接ロ,广泛应用于通信终端设备和エ业控制中,如RS-232、RS-242、RS485等。串ロ多路复用是指在一条物理串行接口上实现多个数据链路连接(DLC),使得可以同时在一条串行接口上存在多个会话,比如语音、数据、USSD等。而分时复用(TDMA,TimeDivision Multiplex Access)则是在网络中应用于用一条线路传输多路数据,基于分时段应用线路的技木,简单点说,就是把多个工作的每个工作都分成多个时间段,然后各个工作的各个时间段交叉使用,这样就好像多个工作同时运行。 随着数字化智能化的发展,嵌入式行业发展迅速,其中很大一部分应用是自动控制,串ロ无疑是设备控制的最佳选择,如何实现高效、精确、实时的串ロ通信是嵌入式控制编程的一大任务。目前很多芯片的功能是多元化的,其外设也不会针对某个特殊应用特别设计,因此就可能出现串口数量不够等问题,此时,如何巧妙高效的复用串ロ是降低系统复杂程度、提升系统健壮性的关键。在一些应用中,通过增加开关和设置软件參数,并对寄存器进行控制的方式,解决在同一串口上驱动功能与调试输出功能分时复用的问题,以保证串ロ驱动功能与调试输出功能之间顺畅地进行切換。这种应用中,匹配終端所需要执行的功能设置ー个标志位,并在如手机串ロ与功能模块之间增加ー屏蔽开关,使串ロ驱动与调试输出互斥,通过所述标志位表示如串ロ驱动的状态,调试输出根据该状态而呈现出另一种状态,据以实现串ロ驱动功能与调试输出功能之间的切換。这种方式只能分时段的进行相关功能的切換,相互制約,串ロ并不能得到有效地使用。Linux系统为终端设备提供了丰富的接ロ,巧妙的运用这些接ロ函数能解决ー些常规思路不能解决的问题,而且还不会影响当前常规的应用,其中ioctl ()函数能根据參数的不同回传特定的数据或者參数,发明人认为对Linux提供的接ロ函数进行探索来解决串ロ分时复用方面的问题尤其可行性。

发明内容
因此,本发明从串ロ驱动入手,提供ー种嵌入式系统中串ロ分时复用方法,在不影响原有线路规程的情况下,实现了直接获取串口数据的目的,从而实现串ロ复用。本发明采用以下技术方案
该发明ー种嵌入式系统中串ロ分时复用方法,包括
1)在驱动层根据接收到的数据的帧头和帧尾筛选目标数据;
2)把筛选出的所述目标数据送入数据缓冲区;
3)调用ioctlO函数把数据缓冲区的所述目标数据拷贝到应用层;4)从应用层获取所述目标数据。依据本发明的上述嵌入式系统中串ロ分时复用方法,从串ロ驱动入手,从串ロ接收函数筛选目标数据,把筛选出来的目标数据送入数据缓冲区,利用ioctlO函数把数据缓冲区的数据拷贝到应用层,这样既不影响原有的线路规程,还实现了直接获取串口数据的目的,从而实现串ロ服用。上述嵌入式系统中串ロ分时复用方法,所述步骤I)中筛选目标数据的过程是通过数据帧头和帧尾来确定帧尾是否是所需要的数据帧,若是,则将对应的目标数据放入到数据缓冲区,同时,数据缓冲区标志位置位;如果不是则不做处理。上述嵌入式系统中串ロ分时复用方法,串ロ建立连接后,接收函数按字节开始接收数据,在接收到帧头ー计数器开始计数,并在接收到帧尾后停止计数,通过计数器的计数判断数据的类型。上述嵌入式系统中串ロ分时复用方法,如果收到应用层获取所述目标数据的命令 后,首先判断该命令与数据缓冲区所存放数据是否对应,若对应,则读取缓冲区标志,如果是标志位置位,则使用copy_to_user O函数把对应的命令巾贞拷贝到itctl O函数传输的地址,并返回约定好的返回值,确认返回值后缓冲区标志清零。


图I为依据本发明的一种驱动层筛选数据的流程图。图2为依据本发明的一种应用层获取数据的流程图。图3为内核层ioctl O函数处理流程图。
具体实施例方式应用于控制领域的数据一般都是约定好的具有帧头和帧尾的命令帧,但由于依据本发明的方法显然也可以应用于其他数据的筛选和应用,针对不同的数据,其帧长和帧头都有规范定义,因此,应用本发明的方法,匹配不同的数据类型,可以获得所需要的目标数据。在以下的内容中,以命令帧为例进行说明,也在于在控制领域的数据一般都是约定好的具有帧头和帧尾的命令帧,且也相对最为重要。应当理解的是,在如图I至3所示的流程中,针对命令帧数据的获得,其他数据的排除可知,数据类型多样同样存在于控制领域,且也据此可知相应不同的目标数据的获得,可以针对不同的数据,最終获取所需要的数据类型。针对其他类型的数据,概括的表现在与如说明书附图I至3所示的命令帧相同的处理流程中。參照说明书附图1,针对以命令帧为目标数据,串ロ接收函数按字节开始接受数据,依据帧头特征,接收到帧头,分配一个计数器,在接收到帧头后开始计数,依据命令帧的字节数,接收到既定的字节数后通过判断是否接收到对应的帧尾,从而依据命令真的长度确定接收到的数据是否为命令帧。在此过程中,如果在既定的字节数后的字节并非帧尾,丢掉该数据,或者转由Linux終端设备线路规程处理,減少运算量。在一些应用中,某些帧头会有命令帧标识,同通过该标识确定数据类型,可以据此省略命令帧获取的后续步骤。
在图I所示的流程中,在计数器累积的数值等于命令帧字节数时,通过判断帧尾确定是否为命令帧,若非,则对下ー帧数据进行判断;若是,则将该帧数据拷贝到数据缓冲区,同时该数据缓冲区标志置位,以备调用。如图2所示,是应用层调用ioctl O函数获取数据的流程,串ロ驱动的ioctl O函数在被调用后,如果是应用层获取数据的命令,则判断数据缓冲区的标志,如果标志置位,则使用C0py_t0_User()函数把数据缓冲区的命令帧拷贝到itctl O函数传入的地址,并返回约定好的特定的返回值。进而,依据说明书附图3,应用层获取数据的步骤为应用层获取数据的函数接ロ是ioctl O函数,调用该函数时需要两个參数获取数据的命令和数据返回地址。调用函数后,如果返回值为所述的约定好的特定的返回值,则返回地址中就是需要的命令帧。在前述的内容中,在数据缓冲区的数据被应用层调取后,缓冲区的标志清零。
经过大量的长时间实验,依据本发明的在嵌入式系统中应用的串ロ分时复用方法能够相对高效的接收串口数据,复用的串ロ能完成两个独立的功能,互不影响。
权利要求
1.一种嵌入式系统中串口分时复用方法,其特征在于,包括 1)在驱动层根据接收到的数据的帧头和帧尾筛选目标数据; 2)把筛选出的所述目标数据送入数据缓冲区; 3)调用ioctlO函数把数据缓冲区的所述目标数据拷贝到应用层; 4)从应用层获取所述目标数据。
2.根据权利要求I所述的嵌入式系统中串口分时复用方法,其特征在于,所述步骤I)中筛选目标数据的过程是通过数据帧头和帧尾来确定帧尾是否是所需要的数据帧,若是, 则将对应的目标数据放入到数据缓冲区,同时,数据缓冲区标志位置位;如果不是则不做处理。
3.根据权利要求2所述的嵌入式系统中串口分时复用方法,其特征在于,串口建立连接后,接收函数按字节开始接收数据,在接收到帧头一计数器开始计数,并在接收到帧尾后停止计数,通过计数器的计数判断数据的类型。
4.根据权利要求2或3所述的嵌入式系统中串口分时复用方法,其特征在于,如果收到应用层获取所述目标数据的命令后,首先判断该命令与数据缓冲区所存放数据是否对应,若对应,则读取缓冲区标志,如果是标志位置位,则使用copy_to_user O函数把对应的命令帧拷贝到itctlO函数传输的地址,并返回约定好的返回值,确认返回值后缓冲区标志清零。
全文摘要
本发明公开了一种嵌入式系统中串口分时复用方法,包括1)在驱动层根据接收到的数据的帧头和帧尾筛选目标数据;2)把筛选出的所述目标数据送入数据缓冲区;3)调用ioctl()函数把数据缓冲区的所述目标数据拷贝到应用层;4)从应用层获取所述目标数据。依据本发明的串口分时复用方法不影响原有线路规程的情况下,实现了直接获取串口数据的目的,从而实现串口复用。
文档编号G06F13/38GK102866976SQ20121034366
公开日2013年1月9日 申请日期2012年9月17日 优先权日2012年9月17日
发明者刘国兴, 李同磊, 魏光旭, 徐勤浦 申请人:山东神戎电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1