一种基于资源同步互斥的多串口收发方法技术

技术编号:38935514 阅读:12 留言:0更新日期:2023-09-25 09:37
本发明专利技术公开了一种基于资源同步互斥的多串口收发方法,本发明专利技术使用了多线程编程技术来实现并发的串口通信,然后将它们封装在一个可重用的管理器类中,可以更方便、可靠地管理多个串口的通信,提高代码的可读性和可维护性。同时,在实现串口管理器时,可以将串口驱动程序封装在动态链接库中。动态链接库可以在运行时被动态加载和卸载,这使得串口管理器可以动态地加载不同类型的串口驱动程序。这种动态加载驱动程序的方法可以让串口管理器更具有灵活性和可扩展性。活性和可扩展性。活性和可扩展性。

【技术实现步骤摘要】
一种基于资源同步互斥的多串口收发方法


[0001]本专利技术涉及一种基于资源同步的多串口收发方法,属于计算机通信、多路通讯、数据流控制、端口/接口/通道控制以及输入输出控制等


技术介绍

[0002]在工业自动化领域,工业设备需要与多个传感器和执行器进行串口通讯,同时还需要与上位机进行通讯。在智能家居领域,各种智能设备也需要进行串口通讯,从而实现互联互通,提高智能家居系统的整体效率和用户体验。在人工智能领域,许多智能设备需要通过串口与计算机进行通讯,例如智能摄像头、智能机器人等等。多串口分发器可以实现对这些设备进行串口通讯,从而提高设备的智能化程度和应用范围。
[0003]申请号为CN201910859566.2的中国专利技术专利申请提供了一种多串口通信方法及系统,当访问若干个从设备时,将待发送数据帧写入中央处理器中的寄存器;所述中央处理器控制所述寄存器接收所述待发送数据帧,并将所述待发送数据帧中的奇偶校验位字符替换为地址位字符,得到替换后的输出数据帧;将所述输出数据帧发送至若干个从设备。实现主设备与从设备之间支持多路模式的的串口协议通信,进而实现了主设备与多个从设备之间的通信连接。但是其未有针对多个实体串口进行分配规划的操作。

技术实现思路

[0004]本专利技术的目的是:提供一种针对多个串口实体串口的多串口收发方法。
[0005]为了达到上述目的,本专利技术的技术方案是提供了一种基于资源同步互斥的多串口收发方法,其特征在于,包括以下步骤:
[0006]步骤1、实现一个串口管理器;
[0007]步骤2、针对不同的串口设备编写设备驱动程序,并将驱动程序封装成动态链接库,在程序运行时,这些动态链接库按照配置文件的设定被加载和链接;
[0008]步骤3、程序运行时,在主线程中依据配置文件,获取每个串口的配置参数,主线程依据该配置参数周期性地轮询每个串口设备的状态,;
[0009]步骤4、主线程在开始运行时通过串口管理器创建所有串口的串口收发线程,在新创建的串口收发线程中添加串口函数用于向串口管理器中添加串口对象,并在一个新建的串口收发线程中调用这个串口对象的运行函数,让每个串口对象在后台一直监听串口数据的到来;
[0010]当某个串口收发线程有数据需要接收或发送时,主线程调用发送函数向对应的串口发送数据或调用接收函数从对应的串口接收数据,并通过条件变量通知对应的串口收发线程;串口收发线程在等待条件变量通知的过程中阻塞,仅在收到条件变量通知后才开始进行串口数据的接收或发送,并在完成接收或发送操作后再次等待条件变量的通知,其中,当主线程调用发送函数或接收函数时,由串口类实例加载对应的动态链接库并获取动态链接库中的函数指针,主线程使用该函数指针调用动态链接库中的发送函数或接收函数。
[0011]优选地,步骤1中,使用原生C++11标准构建所述串口管理器。
[0012]优选地,步骤1中,所述串口管理器采用单例模式,并被封装在一个可重用的管理器类中。
[0013]优选地,所述串口对象被抽象成为一个协议库类,则在串口对象中使用这个协议库进行通信;在实现串口对象对应的所述动态链接库时,将协议库作为依赖库链接进来,则在所述动态链接库中,只包含需要被其他程序调用的函数和变量。
[0014]优选地,步骤4中,当所述串口收发线程接收到数据后,将数据保存到缓冲区,并通过条件变量通知主线程已经接收到数据,主线程在收到条件变量的通知后即可将数据从缓冲区中取出并进行处理。
[0015]目前国内鲜有类似的能够充分挖掘系统的硬件资源,相比于以往对单个或少部分串口进行时间片方式的分割使用,我们可以更好地管理多个串口之间的并发访问,从而实现更高效的通讯方案。本专利技术使用了多线程编程技术来实现并发的串口通信,然后将它们封装在一个可重用的管理器类中,可以更方便、可靠地管理多个串口的通信,提高代码的可读性和可维护性。同时,在实现串口管理器时,可以将串口驱动程序封装在动态链接库中。动态链接库可以在运行时被动态加载和卸载,这使得串口管理器可以动态地加载不同类型的串口驱动程序。这种动态加载驱动程序的方法可以让串口管理器更具有灵活性和可扩展性。
[0016]本专利技术利用条件变量的有效控制,实现对多个串口的管理和控制,支持多串口数据的处理和转发,实现数据收发和节省系统开销等方面。同时,针对不同的串口设备编写设备驱动程序,本专利技术将驱动程序封装成动态库使其更加灵活和易于维护,无需修改程序代码,就可以支持新的串口设备。另外,如果开发的软件需要在多个平台上运行,使用动态库也可以提高移植性,将多串口编程技术与动态加载驱动程序相结合,可以为串口通信提供更加灵活、可维护和可扩展的解决方案,这些特点使得本专利技术在处理多串口数据的场合具有重要的应用价值。
附图说明
[0017]图1为一种基于资源同步的多串口收发方法的流程图。
具体实施方式
[0018]下面结合具体实施例,进一步阐述本专利技术。应理解,这些实施例仅用于说明本专利技术而不用于限制本专利技术的范围。此外应理解,在阅读了本专利技术讲授的内容之后,本领域技术人员可以对本专利技术作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
[0019]本实施例中,运行本专利技术提供的一种基于资源同步互斥的多串口收发方法的硬件设备为基于ARM架构的开发板(包括但不限于支持多个串口的工控机、嵌入式主板)、传感器、执行器以及智能摄像头。开发板与传感器、执行器、智能摄像头通过通用的串行线路进行连接。
[0020]为实现本专利技术提供的一种基于资源同步互斥的多串口收发方法,需要在基于ARM架构的开发板上进行串口的驱动设计,确定需要使用的串口数量和通信协议,选择合适的
串口控制芯片或模块。配置串口的通信参数,包括波特率、数据位、停止位、校验位等,以确保开发板与设备的通信稳定。
[0021]结合图1,本专利技术公开的一种基于资源同步互斥的多串口收发方法包括以下步骤:
[0022]步骤1、使用原生C++11标准构建一个串口管理器,在实现该串口管理器时,采用了单例模式或智能指针等设计模式,将它们封装在一个可重用的管理器类中,可以更方便、可靠地管理多个串口的通信,使得程序的结构更加清晰和易于维护。本实施例中,实现一个使用单例模式的串口管理器。
[0023]本专利技术对线程池和资源保护上使用原生C++11标准进行构建:原生C++11标准提供了丰富的线程和同步原语,与依赖特定操作系统或第三方库相比,使用原生C++11标准进行构建的多串口管理器具有更好的可移植性和可维护性。它不依赖于特定的操作系统或库,减少了对外部依赖的复杂性,同时也降低了系统的维护成本。
[0024]步骤2、通过串口管理器创建多个串口收发线程,在新创建的串口收发线程中添加串口函数用于向串口管理器中添加串口对象,它会在类中添加一个新的串口对象,并在一个新建的串口收发线程中调用这个串口对象的运行函数,让这个串口对象在后台一直监听串口数据的到来。每个串口收发线程负本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于资源同步互斥的多串口收发方法,其特征在于,包括以下步骤:步骤1、实现一个串口管理器;步骤2、针对不同的串口设备编写设备驱动程序,并将驱动程序封装成动态链接库,在程序运行时,这些动态链接库按照配置文件的设定被加载和链接;步骤3、程序运行时,在主线程中依据配置文件,获取每个串口的配置参数,主线程依据该配置参数周期性地轮询每个串口设备的状态,;步骤4、主线程在开始运行时通过串口管理器创建所有串口的串口收发线程,在新创建的串口收发线程中添加串口函数用于向串口管理器中添加串口对象,并在一个新建的串口收发线程中调用这个串口对象的运行函数,让每个串口对象在后台一直监听串口数据的到来;当某个串口收发线程有数据需要接收或发送时,主线程调用发送函数向对应的串口发送数据或调用接收函数从对应的串口接收数据,并通过条件变量通知对应的串口收发线程;串口收发线程在等待条件变量通知的过程中阻塞,仅在收到条件变量通知后才开始进行串口数据的接收或发送,并在完成接收或发送操作后再次等待条件变量的通知,其中,当主线程调用发送函数或接收...

【专利技术属性】
技术研发人员:高文祥聂佳方佳韵奚培锋薛吉
申请(专利权)人:上海电器科学研究院
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1