一种基于驱动层处理串口通信的方法

文档序号:9349882阅读:371来源:国知局
一种基于驱动层处理串口通信的方法
【技术领域】
[0001]本发明涉及自助设备技术领域,具体地说是一种实用性强、基于驱动层处理串口通信的方法。
【背景技术】
[0002]在自助设备运行过程中,设备主机需外设模块的协同合作完成各种功能,为了便于主机与外设模块高效通信,驱动层与外设模块之间的数据交互和处理方式尤为重要。
[0003]当前,驱动层在与外设的串口通信中,大部分采用同步的串口问答方式,并且在读取串口数据时,多字节整条指令同时读取信息,这种处理方式,在情况复杂的串口数据交互时,会出现驱动层接收底层外设串口数据错误的异常情况,虽然驱动层在此基础上对底层交互做一些特定处理,完成所需功能,但是通信效率会降低,底层外设对外提供的功能也会受到限制。为了完善上述问题,现提出了一种基于驱动层处理串口通信数据的方法。

【发明内容】

[0004]本发明的技术任务是针对以上不足之处,提供一种实用性强、基于驱动层处理串口通?目的方法。
[0005]一种基于驱动层处理串口通信的方法,其具体实现过程为:
驱动层在与外设串口通信时,建立收、发数据流程相互独立的处理架构,即主线程与次线程;
在串口通信数据交互过程中,驱动层主线程与次线程分别在发送和接收命令时,通过全局标志位的状态变化及更新,使得两线程间收发功能对应,实现对串口数据的处理及功能分类;
在串口读取数据时,采用单字节读取的方式,按照通信协议的规则对读取到的每个字节进行分析及处理,以保证获取到信息的完整性及准确性,并能对底层硬件不定时发出的报告指令在此流程中统一处理。
[0006]驱动层在与底层硬件模块,即串口通信的整个流程中,主次两个线程分别控制串口的收、发数据,其中主线程负责要执行功能指令的发送,并对外提供硬件模块的全部功能接口 ;次线程由主线程在打开串口时启动,一直监听着串口收到的数据信息,直到串口关闭。
[0007]所述步骤二中,通过设定全局标志位Flag使两线程之间建立联系并及时更新信息,在主线程接口发送命令时启动标志位,次线程从串口读取到相对应的功能指令后,把相应的标志位状态改变;这样,主线程各接口通过标志位Flag的状态来判断底层硬件对驱动层的响应情况,根据响应情况执行后续操作流程。
[0008]驱动层与底层硬件模块之间,即与串口之间进行通信时,采用“命令、响应、应答、响应”的信息交互方式和底层硬件自动上报“报告”的信息,响应的数据类型为“0x000x00”、“0x01 0x01”、“0x02 0x02”,且这些响应数据底层会返给驱动层。
[0009]串口收到的数据,采用单字节读取的方式,对于收到的单个字节做出“应答”和“响应”的命令分类及判断,根据串口通信帧格式,通过指令的“服务码”和“句柄号”部分确定收到的每条指令类型,确定收到的指令数据和主线程的某一具体指令功能接口相对应,在串口获取到该命令后,以消息的形式发送给上层。
[0010]所述串口通信帧的格式具体为:其字符位O?13分别定义为帧头、帧头、帧长度、帧长度、帧类型、帧序号、服务码、对象类型、模块地址、句柄号、属性ID、属性标签、属性值、校验码。
[0011]所述主线程上添加有互斥锁,当驱动层与外设串口通信,打开串口时,调用功能接口加入该互斥锁,驱动层发送功能命令,同时flag标志位初始化,当驱动层接收到应答后,解该互斥锁,从而确保串口通信高效。
[0012]本发明的一种基于驱动层处理串口通信的方法,具有以下优点:
该发明的一种基于驱动层处理串口通信的方法在驱动层与底层硬件模块串口数据交互时,串口收、发数据双线程独立处理;使用单字节方式接收串口数据,从根本上保证串口数据的完整性及准确性;主线程中互斥锁的添加,保证各功能模块有序执行,对底层硬件模块提供了缓冲时间,具有一定的保护作用,有效节省资源,提高模块的工作效率,实用性强,适用范围广泛,易于推广。
【附图说明】
[0013]附图1为串口通信帧格式示意图。
[0014]附图2为本发明的串口通信示意图。
[0015]附图3为本发明中驱动层收发数据流程示意图。
【具体实施方式】
[0016]下面结合附图和具体实施例对本发明作进一步说明。
[0017]如附图1、图2、图3所示,一种基于驱动层处理串口通信的方法,其具体实现过程为:
驱动层在与外设串口通信时,建立收、发数据流程相互独立的处理架构,即主线程与次线程;
在串口通信数据交互过程中,驱动层主线程与次线程分别在发送和接收命令时,通过全局标志位的状态变化及更新,使得两线程间收发功能对应,实现对串口数据的处理及功能分类;
在串口读取数据时,采用单字节读取的方式,按照通信协议的规则对读取到的每个字节进行分析及处理,以保证获取到信息的完整性及准确性,并能对底层硬件不定时发出的报告指令在此流程中统一处理。
[0018]为了便于上层应用使用,驱动层需要将硬件模块的全部功能对外开放,因此,需要将底层模块的各功能都作为单独接口对外提供,这样上层应用可根据业务需求及各种逻辑处理,在此基础上继续封装以便于使用硬件模块的全部功能。
[0019]驱动层在与底层硬件模块,即串口通信的整个流程中,主次两个线程分别控制串口的收、发数据,其中主线程负责要执行功能指令的发送,并对外提供硬件模块的全部功能接口 ;次线程由主线程在打开串口时启动,一直监听着串口收到的数据信息,直到串口关闭,因此,在串口信息交互中,数据的收、发过程是相互独立的。
[0020]所述步骤二中,通过设定全局标志位Flag使两线程之间建立联系并及时更新信息,在主线程接口发送命令时启动标志位,次线程从串口读取到相对应的功能指令后,把相应的标志位状态改变;这样,主线程各接口通过标志位Flag的状态来判断底层硬件对驱动层的响应情况,根据响应情况执行后续操作流程。
[0021]因受限于硬件模块的串口通信协议,驱动层与底层硬件模块之间,即与串口之间进行通信时,采用“命令、响应、应答、响应”的信息交互方式和底层硬件自动上报“报告”的信息,响应的数据类型为“0x00 0x00”、“0x01 0x01”、“0x02 0x02”,且这些响应数据底层会返给驱动层。
[0022]指令信息发送的最终目的是要底层硬件模块执行相应的功能,同时底层硬件模块也向驱动层反馈信息,串口从底层硬件模块收到的所有数据都会
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1