一种进程间通讯数据共享的传输方法
文献发布时间:2023-06-19 10:24:22
技术领域
本发明涉及通讯数据传输技术领域,尤其涉及一种进程间通讯数据共享的传输方法。
背景技术
当软件项目开发越来越复杂的时候,模块化开发可以提升开发效率,方便后期维护。每个程序模块独立运行时即启动一个进程,进程之间的信息传递只能通过进程间通讯来完成。
进程通信常使用的方法是共享内存,其原理是将一份物理内存映射到不同的进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信,因此是一种高效的数据交换方式。
在进行串口通讯和网络通讯时,同一时间只有一个进程能占用某一个端口进行数据通讯,其他进程无法获得通讯数据,无法满足模块化开发需求。
发明内容
本发明提供了一种进程间通讯数据共享的传输方法,解决了程序模块间串行或者网络端口被占用时,通讯数据无法共享的技术问题。
为解决上述技术问题,本发明提出如下技术方案:
一种进程间通讯数据共享的传输方法,该方法包括:
创建共享内存接收数据模块和共享内存发送数据模块;
通讯模块将接收的数据写入到共享内存接收数据模块;
其他模块读取共享内存接收数据模块中的数据;
其他模块将要发送的数据写入共享内存发送数据模块;
通讯模块读取共享内存发送数据模块中的数据。
优选的,共享内存接收数据模块包括存数计数器部分和存储数据部分。
优选的,通讯模块将接收的数据写入共享内存接收数据模块时采用先进先出的方式。
优选的,其他模块读取共享内存接收数据模块中的数据包括如下具体步骤:
S11,其他模块读取共享内存接收数据模块的当前计数器值a;
S12,将当前计数器值a与上一次计数器值a
S13,当a>a
S14,将a赋值给a
S15,判断其他模块是否接收到停止指令,如果是结束,否则返回步骤S11。
优选的,共享内存发送数据模块包括Y个子块,每一个子块存储大小为Z。
优选的,每一个子块包括存数计数器部分和存储数据部分。
优选的,其他模块的数量为多个,每一个其他模块对应一个共享内存发送数据模块的子块,并将数据写入到对应的子块中,然后对应的子块更新计数器值并更新存储数据。
优选的,通讯模块读取共享内存发送数据模块中的数据包括如下具体步骤:
S21,初始化i=0;
S22,当i<Y时,获取第i个子块的计数器值a(i),否则返回步骤S21;
S23,将当前计数器值a(i)与上一次计数器值a
S24,当a(i)>a
S25,将a(i)赋值给a
S26,令i=i+1;
S27,判断通讯模块是否接收到停止指令,如果是结束,否则返回步骤S22;
其中i表示Y个子块中的第i个子块,a
与现有技术相比,本发明的有益效果是:
分别创建共享内存接收数据模块和共享内存发送数据模块,通讯模块将接收的数据写入到共享内存接收数据模块,其他模块读取共享内存接收数据模块中的数据;同时,其他模块将要发送的数据写入共享内存发送数据模块,通讯模块读取共享内存发送数据模块中的数据。当程序模块间串行或者网络端口被占用时,采用此种传输方法依然可以进行通讯数据的共享。
附图说明
图1是本发明通讯模块将接收的数据写入共享内存接收数据模块的流程图。
图2是本发明其他模块读取共享内存接收数据模块中数据的流程图。
图3是本发明其他模块将要发送的数据写入共享内存发送模块的流程图。
图4是本发明通讯模块读取共享内存发送模块中数据的流程图。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征能更易于本领域技术人员理解,从而对本发明的保护范围做出更为清楚明确的界定。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
本发明所述的一种进程间通讯数据共享的传输方法,包括:
创建共享内存接收数据模块和共享内存发送数据模块;
通讯模块将接收的数据写入到共享内存接收数据模块;
其他模块读取共享内存接收数据模块中的数据;
其他模块将要发送的数据写入共享内存发送数据模块;
通讯模块读取共享内存发送数据模块中的数据。
下面结合附图对本发明做进一步介绍。
在通讯模块与其他模块共享数据之前对共享内存接收数据模块和共享内存发送数据模块的计数器值进行初始化。
如图1所示,是通讯模块将接收的数据写入共享内存接收数据模块的流程图。本发明中共享内存接收数据模块包括存数计数器部分和存储数据部分,通讯模块接收串口通讯或网络通讯的数据,并将接收到的数据写入共享内存接收数据模块中,共享内存接收数据模块更新计数器值a,同时更新存数数据。通讯模块将接收的数据写入共享内存接收数据模块时采用先进先出的方式。
如图2所示,是其他模块读取共享内存接收数据模块中数据的流程图。其他模块读取共享内存接收数据模块中的数据包括如下具体步骤:
S11,其他模块读取共享内存接收数据模块的当前计数器值a;
S12,将当前计数器值a与上一次计数器值a
S13,当a>a
S14,将a赋值给a
S15,判断其他模块是否接收到停止指令,如果是结束,否则返回步骤S11。
如图3所示,是其他模块将要发送的数据写入共享内存发送模块的流程图。本发明中共享内存发送数据模块包括Y个子块,每一个子块存储大小为Z,其中每一个子块包括存数计数器部分和存储数据部分,其他模块的数量为多个,每一个其他模块对应一个共享内存发送数据模块的子块,并将需要发送的数据写入到对应的子块中,然后对应的子块更新计数器值并更新存储数据。
如图4所示,是通讯模块读取共享内存发送模块中数据的流程图。通讯模块轮询共享内存发送模块中的Y个子块,判断每一个子块是否有数据更新,如果是,则从共享子块中读取最新更新的数据字节,然后将数据发送给串口通讯或者网络通讯。本发明中通讯模块读取共享内存发送数据模块中的数据包括如下具体步骤:
S21,初始化i=0;
S22,当i<Y时,获取第i个子块的计数器值a(i),否则返回步骤S21;
S23,将当前计数器值a(i)与上一次计数器值a
S24,当a(i)>a
S25,将a(i)赋值给a
S26,令i=i+1;
S27,判断通讯模块是否接收到停止指令,如果是结束,否则返回步骤S22;
其中i表示Y个子块中的第i个子块,a
下面介绍本发明的具体实施例。
在通讯模块与其他模块共享数据之前对共享内存接收数据模块和共享内存发送数据模块的计数器值进行初始化。
通讯模块将接收到的数据共享给其他模块的传输方式包括如下步骤:
创建一个容量为M字节的共享内存接收数据模块;
将M字节的共享内存分为两部分:前N字节用于存储计数器值,后M-N字节用于存储数据;
通讯模块接收串口通讯或网络通讯的数据,再将接收到的数据写入共享内存接收数据模块;
如果通讯模块接收到的数据字节总和超过M-N字节,则采用先进先出的方式,将最后进入的M-N字节的数据写入到共享内存接收数据模块中;
其他模块找到共享内存接收数据模块的地址,读取M字节的共享数据,并从中获得当前存储计数器值为a;
启动其他模块的通讯数据处理线程,判断当前存储计数器值a是否大于上一次计数器值a
其他模块将要发送的数据共享给通讯模块的传输方式包括如下步骤:
创建一个容量为X字节的共享内存发送数据模块;
将X字节的共享内存发送数据模块分为Y个子块,每一个子块存储大小为Z,其中X=Y*Z;每一个子块的存储格式与共享内存接收数据模块相似,前K字节用于存储计数器值,后Z-K字节用于存储数据;
其他模块如果需要发送数据,则将发送数据字节和数据长度写入到相应的子块中,其他模块的数量为多个,每一个其他模块对应一个共享内存发送数据模块的子块;
通讯模块找到共享内存发送数据模块的地址,启动通讯数据发送线程;
轮询Y个子块,判断每一个子块是否有数据更新,如果是,则从子块中读取最新更新的a(i)-a
最后通过串口通讯或网络通讯将数据发送出去。
本发明分别创建共享内存接收数据模块和共享内存发送数据模块,通讯模块将接收的数据写入到共享内存接收数据模块,其他模块读取共享内存接收数据模块中的数据;同时,其他模块将要发送的数据写入共享内存发送数据模块,通讯模块读取共享内存发送数据模块中的数据。当程序模块间串行或者网络端口被占用时,依然可以进行通讯数据的共享。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域的技术人员在本发明所揭露的技术范围内,可不经过创造性劳动想到的变化或替换,都应涵盖在本发明的保护范围内。因此,本发明的保护范围应该以权利要求书所限定的保护范围为准。
- 一种进程间通讯数据共享的传输方法
- 一种火灾报警器运行数据共享传输方法及系统