CN117032644B - 基于嵌入式软件的串口通信系统及方法 - Google Patents
基于嵌入式软件的串口通信系统及方法 Download PDFInfo
- Publication number
- CN117032644B CN117032644B CN202311289691.7A CN202311289691A CN117032644B CN 117032644 B CN117032644 B CN 117032644B CN 202311289691 A CN202311289691 A CN 202311289691A CN 117032644 B CN117032644 B CN 117032644B
- Authority
- CN
- China
- Prior art keywords
- data
- layer
- latest
- buffer area
- hardware
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000004891 communication Methods 0.000 title claims abstract description 45
- 238000000034 method Methods 0.000 title claims abstract description 15
- 230000005540 biological transmission Effects 0.000 claims abstract description 55
- 238000013523 data management Methods 0.000 claims abstract description 38
- 239000003795 chemical substances by application Substances 0.000 claims abstract description 13
- 238000012795 verification Methods 0.000 claims description 7
- 238000004806 packaging method and process Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 description 43
- 238000011161 development Methods 0.000 description 15
- 238000012423 maintenance Methods 0.000 description 6
- 238000013500 data storage Methods 0.000 description 4
- 125000004122 cyclic group Chemical group 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Communication Control (AREA)
Abstract
本发明提供一种基于嵌入式软件的串口通信系统及方法,应用于串口通信技术领域,包括:代理层,包括数据管理模块、硬件驱动、接收数据缓存区和发送数据缓存区;硬件驱动用于根据硬件层在接收到第一数据时产生的中断信号,调用接收中断服务函数将第一数据写入接收数据缓存区;在硬件层基于应用层对发送中断使能标志的启动产生中断后,调用发送中断服务函数将发送数据缓存区中未读取的第二数据发送给硬件层,发送中断使能标志由应用层在发送第二数据时启动;数据管理模块用于从接收数据缓存区中获取未读取的第一数据,将第一数据发送给应用层;将第二数据写入发送数据缓存区。本发明实现将硬件层与应用层分离,提高软件开发效率,易于维护和升级。
Description
技术领域
本发明涉及串口通信技术领域,尤其涉及一种基于嵌入式软件的串口通信系统及方法。
背景技术
串口通信虽然是一种常见的通信方式,但嵌入式软件开发与硬件特性、开发平台有较强的联系,导致嵌入式软件的开发方法和思路各不相同。
现有技术需要在嵌入式软件系统中进行硬件相关的配置与操作,嵌入式软件依赖硬件和开发环境,从而导致嵌入式软件开发复杂,效率低,不便于维护和升级。
发明内容
本发明提供一种基于嵌入式软件的串口通信系统及方法,用以解决现有技术中嵌入式软件开发复杂,效率低,不便于维护和升级的缺陷,实现将硬件相关的配置与操作从嵌入式软件中分离,提高嵌入式软件的开发效率,易于维护和升级。
本发明提供一种基于嵌入式软件的串口通信系统,包括:
代理层,所述代理层包括数据管理模块、硬件驱动、接收数据缓存区和发送数据缓存区;
所述硬件驱动用于根据嵌入式软件的硬件层在接收到第一数据时产生的中断信号,调用接收中断服务函数将所述第一数据写入所述接收数据缓存区;在所述硬件层基于所述嵌入式软件的应用层对发送中断使能标志的启动产生中断后,调用发送中断服务函数将所述发送数据缓存区中未读取的第二数据发送给所述硬件层,所述发送中断使能标志由所述应用层在所述第二数据写入所述发送数据缓存区后启动;
所述数据管理模块用于从所述接收数据缓存区中获取未读取的第一数据,并将所述第一数据解析后发送给所述应用层;对所述应用层发送的第二数据打包后写入所述发送数据缓存区。
根据本发明提供的一种基于嵌入式软件的串口通信系统,所述硬件驱动具体用于:
根据所述硬件层在接收到所述第一数据的每个字节时产生的中断信号,调用所述接收中断服务函数将所述第一数据的每个字节从所述硬件层的数据寄存器中读取后保存在RAM中;
在第一计数器记录的所述接收数据缓存区的最新写入位置为末位的情况下,将所述最新写入位置更新为首位;
在所述最新写入位置不为末位的情况下,将所述最新写入位置更新为所述最新写入位置的下一位;
将所述RAM中第一数据的每个字节写入更新后的所述最新写入位置。
根据本发明提供的一种基于嵌入式软件的串口通信系统,所述数据管理模块具体用于:
在第二计数器记录的所述接收数据缓存区的最新读取位置与所述第一计数器记录的所述最新写入位置不相同的情况下,获知所述接收数据缓存区中存在未读取的第一数据;
在所述最新读取位置为末位的情况下,将所述最新读取位置更新为首位;
在所述最新读取位置不为末位的情况下,将所述最新读取位置更新为所述最新读取位置的下一位;
读取更新后的所述最新读取位置处的第一数据。
根据本发明提供的一种基于嵌入式软件的串口通信系统,所述数据管理模块具体用于:
在第三计数器记录的所述发送数据缓存区的最新写入位置为末位的情况下,将所述最新写入位置更新为首位;
在所述最新写入位置不为末位的情况下,将所述最新写入位置更新为所述最新写入位置的下一位;
将所述应用层发送的第二数据的每个字节写入更新后的所述最新写入位置。
根据本发明提供的一种基于嵌入式软件的串口通信系统,所述硬件驱动具体用于:
在所述硬件层基于所述应用层对发送中断使能标志的启动产生中断后,调用发送中断服务函数检查第四计数器记录的所述发送数据缓存区的最新读取位置与所述第三计数器记录的所述最新写入位置是否相同;
在所述最新读取位置与所述最新写入位置不相同的情况下,获知所述发送数据缓存区中存在未读取的第二数据;
在所述最新读取位置为末位的情况下,将所述最新读取位置更新为首位;
在所述最新读取位置不为末位的情况下,将所述最新读取位置更新为所述最新读取位置的下一位;
读取更新后的所述最新读取位置处的第二数据发送给所述硬件层。
根据本发明提供的一种基于嵌入式软件的串口通信系统,所述代理层由所述应用层创建,所述代理层由所述硬件驱动调用初始化函数启动;
所述初始化函数的指针、接收中断服务函数的指针和发送中断服务函数的指针由所述应用层向所述代理层注册;
所述硬件驱动用于根据所述指针从所述应用层调用相应的初始化函数、接收中断服务函数和发送中断服务函数。
根据本发明提供的一种基于嵌入式软件的串口通信系统,所述代理层有多个,所述代理层与所述硬件层一一对应。
根据本发明提供的一种基于嵌入式软件的串口通信系统,所述数据管理模块还用于:
对所述第一数据和所述第二数据进行校验;
在所述第一数据校验通过的情况下,将所述第一数据发送给所述应用层;
在所述第二数据校验通过的情况下,将所述第二数据发送给所述发送数据缓存区。
根据本发明提供的一种基于嵌入式软件的串口通信系统,所述数据管理模块具体用于:
校验所述第一数据或所述第二数据中是否包含错误的数据位、停止位和流控制位中的一种或多种;
校验所述第一数据或所述第二数据中是否包含错误的校验码和无效的数据包;
校验所述第一数据或所述第二数据是否包含损坏数据。
本发明还提供一种基于嵌入式软件的串口通信方法,应用于上述基于嵌入式软件的串口通信系统,包括:
代理层中的硬件驱动根据嵌入式软件的硬件层在接收到第一数据时产生的中断信号,调用接收中断服务函数将所述第一数据写入接收数据缓存区;
所述代理层中的数据管理模块从所述接收数据缓存区中获取未读取的第一数据,并将所述第一数据解析后发送给所述嵌入式软件的应用层;
所述数据管理模块对所述应用层发送的第二数据打包后写入所述发送数据缓存区;
在所述硬件层基于所述应用层对发送中断使能标志的启动产生中断后,所述硬件驱动调用发送中断服务函数将所述发送数据缓存区中未读取的第二数据发送给所述硬件层,所述发送中断使能标志由所述应用层在所述第二数据写入所述发送数据缓存区后启动。
本发明提供的基于嵌入式软件的串口通信系统及方法,通过代理层实现嵌入式软件的应用层和硬件层之间的串口通信,通过代理层的硬件驱动调用中断服务函数实现将硬件层接收的数据保存在接收数据缓存区或将发送数据缓存区的数据发送给硬件层,通过代理层的数据管理模块将接收数据缓存区的数据发送给应用层或将应用层发送的数据写入发送数据缓存区,从而将硬件层与应用层分离,应用层的软件开发不依赖硬件和开发环境,通过代理层收发数据,便于简化和统一应用层的软件开发,提高应用层的通用性、可移植性和开发效率,易于维护和升级。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的基于嵌入式软件的串口通信系统的结构示意图之一;
图2是本发明提供的基于嵌入式软件的串口通信系统的结构示意图之二;
图3是本发明提供的基于嵌入式软件的串口通信方法的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1描述本发明的一种基于嵌入式软件的串口通信系统,包括:
代理层,所述代理层包括数据管理模块、硬件驱动、接收数据缓存区和发送数据缓存区;
代理层负责处理嵌入式软件的应用层和硬件层之间的通信。
硬件层是嵌入式软件的最底层,负责与物理设备进行交互,进行串口数据信号的收发。
应用层负责对代理层提供的接口进行调用实现串口通信,包括接收代理层的数据管理模块处理后的第一数据,发送第二数据给代理层,以供代理层的数据管理模块打包并发送数据包。
代理层、硬件层和应用层可为C/C++语言的软件开发程序。
所述硬件驱动用于根据嵌入式软件的硬件层在接收到第一数据时产生的中断信号,调用接收中断服务函数将所述第一数据写入所述接收数据缓存区;在所述硬件层基于所述嵌入式软件的应用层对发送中断使能标志的启动产生中断后,调用发送中断服务函数将所述发送数据缓存区中未读取的第二数据发送给所述硬件层,所述发送中断使能标志由所述应用层在所述第二数据写入所述发送数据缓存区后启动;
所述数据管理模块用于从所述接收数据缓存区中获取未读取的第一数据,并将所述第一数据解析后发送给所述应用层;对所述应用层发送的第二数据打包后写入所述发送数据缓存区。
将硬件层接收到的数据作为第一数据。当硬件层接收到第一数据时产生中断信号,硬件驱动根据中断信号调用接收中断服务函数,将第一数据写入接收数据缓存区,并标识接收数据缓存区中未读取的第一数据,以便数据管理模块读取。
数据管理模块持续从接收数据缓存区中获取未读取的第一数据并进行解析。可根据通信协议连续读取多个字节,采用1字节内存对齐方式对读取的第一数据打包处理,将数据包发送给应用层进行后续处理。
将应用层发送的数据作为第二数据。代理层的数据管理模块调用代理层提供的接口unsigned char* MakeDataPack(short DataType,unsigned char * pData,unsignedint DataLength,unsigned int *
PackLength),对应用层发送的第二数据进行打包。可采用1字节内存对齐方式将第二数据打包后写入发送数据缓存区。
应用层发送第二数据时,将第二数据写入发送数据缓存区,启动发送中断使能标志。应用层通过代理层将发送中断使能标志的启动消息发送给硬件层,硬件层基于发送中断使能标志的启动会自动调度资源产生发送数据的中断,触发硬件驱动调用发送中断服务函数控制向硬件层传输发送数据缓存区内的第二数据。
第二数据写入发送数据缓存区的过程,与硬件层自动产生发送数据的中断控制硬件驱动向硬件层发送数据是交替进行的,更充分利用硬件资源,提高数据发送的速度和实时性。
数据管理模块采用1字节内存对齐方式对第一数据和第二数据进行打包处理,可防止内存泄露,提高嵌入式软件的开发效率和稳定性。
本实施例通过代理层实现嵌入式软件的应用层和硬件层之间的串口通信,通过代理层的硬件驱动调用中断服务函数实现将硬件层接收的数据保存在接收数据缓存区或将发送数据缓存区的数据发送给硬件层,通过代理层的数据管理模块将接收数据缓存区的数据发送给应用层或将应用层发送的数据写入发送数据缓存区,从而将硬件层与应用层分离,应用层的软件开发不依赖硬件和开发环境,通过代理层收发数据,便于简化和统一应用层的软件开发,提高应用层的通用性、可移植性和开发效率,易于维护和升级。
在上述各实施例的基础上,本实施例中所述硬件驱动具体用于:
根据所述硬件层在接收到所述第一数据的每个字节时产生的中断信号,调用所述接收中断服务函数将所述第一数据的每个字节从所述硬件层的数据寄存器中读取后保存在RAM中;
在第一计数器记录的所述接收数据缓存区的最新写入位置为末位的情况下,将所述最新写入位置更新为首位;
在所述最新写入位置不为末位的情况下,将所述最新写入位置更新为所述最新写入位置的下一位;
将所述RAM中第一数据的每个字节写入更新后的所述最新写入位置。
接收数据缓存区可定义为静态数组,以固定大小如255字节存储于RAM。可通过第一计数器和第二计数器管理接收数据缓存区的使用情况,保证正确、快速地从接收数据缓存区读写数据。
第一计数器HeadRx记录接收数据缓存区的最新写入位置,第二计数器TailRx记录接收数据缓存区的最新读取位置,最新写入位置和最新读取位置可用接收数据缓存区的数组下标表示。HeadRx和TailRx的初始状态为0。当HeadRx和TailRx的计数值相等时,表示接收数据缓存区中没有未读取的数据。
接收数据缓存区的数据写入操作包括:
1、当硬件层接收到第一数据的每个字节时产生一次中断,该字节保存在硬件层的数据寄存器,并产生中断信号。该中断信号触发硬件驱动调用接收中断服务函数,开始将硬件层的数据寄存器中的数据写入接收数据缓存区。
2、接收中断服务函数将数据寄存器,如UDR0中一个字节的数据拷贝到RAM(RandomAccess Memory,随机存取存储器)中,作为临时变量TempData,从而快速将数据寄存器的数据读取出来,提高数据寄存器的利用率。
3、如果HeadRx的计数值为数组末位,更新后的计数值超出接收数据缓存区的最大范围255,则HeadRx的计数值跳转到数组首地址,即从头开始为0;否则将HeadRx记录的数组下标加1,指向接收数据缓存区的下一个字节,从而实现循环利用同一块内存,提高数据写入速度,降低资源消耗。
4、以HeadRx更新后的计数值为下标,将临时变量TempData写入接收数据缓存区。
本实施例通过采用改进的缓存方式,即数据存储结构,将数据缓存到接收数据缓存区,便于数据的快速写入,降低资源消耗。
在上述实施例的基础上,本实施例中所述数据管理模块具体用于:
在第二计数器记录的所述接收数据缓存区的最新读取位置与所述第一计数器记录的所述最新写入位置不相同的情况下,获知所述接收数据缓存区中存在未读取的第一数据;
在所述最新读取位置为末位的情况下,将所述最新读取位置更新为首位;
在所述最新读取位置不为末位的情况下,将所述最新读取位置更新为所述最新读取位置的下一位;
读取更新后的所述最新读取位置处的第一数据。
接收数据缓存区的数据读取操作包括:
1、在读取接收数据缓存区前,检查HeadRx和TailRx计数器的计数值是否相等。如果相等,则表示接收数据缓存区中无可读取的数据或数据都被读完,等待新数据写入;如果不相等,则表示接收数据缓存区中有未读取的数据。
2、在HeadRx和TailRx计数器的计数值不相等的情况下,如果TaiRx的计数值为数组末位,更新后的计数值超出接收数据缓存区的最大范围255,则TailRx的计数值从头开始为0;否则将TailRx记录的数组下标加1,指向接收数据缓存区的下一个字节。
3、以TailRx更新后的计数值为下标,从接收数据缓存区中将第一数据拷贝出来。
本实施例通过采用改进的缓存方式,即数据存储结构,从接收数据缓存区中读取数据,便于数据的快速读取,降低资源消耗。
在上述实施例的基础上,本实施例中所述数据管理模块具体用于:
在第三计数器记录的所述发送数据缓存区的最新写入位置为末位的情况下,将所述最新写入位置更新为首位;
在所述最新写入位置不为末位的情况下,将所述最新写入位置更新为所述最新写入位置的下一位;
将所述应用层发送的第二数据的每个字节写入更新后的所述最新写入位置。
发送数据缓存区可定义为静态数组,以固定大小如255字节存储于RAM。可通过第三计数器和第四计数器管理发送数据缓存区的使用情况,保证正确、快速地从发送数据缓存区读写数据。
第三计数器HeadTx记录发送数据缓存区的最新写入位置,第四计数器TailTx记录发送数据缓存区的最新读取位置,最新写入位置和最新读取位置可用发送数据缓存区的数组下标表示。HeadTx和TailTx的初始状态为0。当HeadTx和TailTx的计数值相等时,表示发送数据缓存区中没有未读取的数据。
应用层通过数据管理模块对发送数据缓存区进行数据写入操作,并启动发送中断使能标志,过程包括:
1、如果HeadTx的计数值为数组末位,更新后的计数值超出发送数据缓存区的最大范围255,则HeadTx的计数值跳转到数组首地址,即从头开始为0;否则将HeadTx记录的数组下标加1,指向接收数据缓存区的下一个字节,从而实现循环利用同一块内存,提高数据写入速度,降低资源消耗。
2、以HeadTx更新后的计数值为下标,将应用层发送的第二数据拷入发送数据缓存区。
本实施例通过采用改进的缓存方式,即数据存储结构,将数据缓存到发送数据缓存区,便于数据的快速写入,降低资源消耗。
在上述实施例的基础上,本实施例中所述硬件驱动具体用于:
在所述硬件层基于所述应用层对发送中断使能标志的启动产生中断后,调用发送中断服务函数检查第四计数器记录的所述发送数据缓存区的最新读取位置与所述第三计数器记录的所述最新写入位置是否相同;
在所述最新读取位置与所述最新写入位置不相同的情况下,获知所述发送数据缓存区中存在未读取的第二数据;
在所述最新读取位置为末位的情况下,将所述最新读取位置更新为首位;
在所述最新读取位置不为末位的情况下,将所述最新读取位置更新为所述最新读取位置的下一位;
读取更新后的所述最新读取位置处的第二数据发送给所述硬件层。
应用层启动发送中断使能标志,触发硬件层调度资源产生中断,硬件驱动调用发送中断服务函数发送串口数据,发送过程包括:
1、在读取发送数据缓存区前,检查HeadTx和TailTx计数器的计数值是否相等。如果相等,则表示发送数据缓存区中无可读取的数据或数据都被读完,等待新数据写入;如果不相等,则表示接收数据缓存区中有未读取的数据。
2、在HeadTx和TailTx计数器的计数值不相等的情况下,如果TaiTx的计数值为数组末位,更新后的计数值超出发送数据缓存区的最大范围255,则TailTx的计数值从头开始为0;否则TailTx记录的数组下标加1,指向发送数据缓存区的下一个字节。
3、以TailTx更新后的计数值为下标,将发送数据缓存区中的一个字节写入硬件寄存器,发送串口数据。
4、在发送数据缓存区中的第二数据发送完成后,关闭发送中断使能标志,停止发送第二数据。
本实施例通过采用改进的缓存方式,即数据存储结构,从发送数据缓存区中读取数据,便于数据的快速读取,降低资源消耗。
在上述各实施例的基础上,本实施例中所述代理层由所述应用层创建,所述代理层由所述硬件驱动调用初始化函数启动;
所述初始化函数的指针、接收中断服务函数的指针和发送中断服务函数的指针由所述应用层向所述代理层注册;
所述硬件驱动用于根据所述指针从所述应用层调用相应的初始化函数、接收中断服务函数和发送中断服务函数。
应用层可调用第一接口PProxyHandle CreatCOMProxy(uchar* index)创建代理层。第一接口返回代理层的句柄。应用层、硬件层与代理层的交互通过句柄完成。然后为代理层配置接收数据缓存区和发送数据缓存区。
应用层根据不同硬件特性编写多个回调函数,包括针对具体串口的初始化函数、接收中断服务函数和发送中断服务函数三个函数。
应用层在创建代理层后,可通过第二接口Bool RegesterDriver(PProxyHandlepHandle,COMIni InitUART,SendISR UART_TX_ISR, ReceiveISR UART_RX_ISR)向代理层注册三个函数的指针。
代理层的硬件驱动调用第三接口Bool StartProxy(PProxyHandle pHandle)启动代理层。此时调用第二接口注册的串口初始化函数启动代理层进行串口通信,代理层进入可收发数据状态。
在硬件层接收到第一数据时,硬件驱动调用第二接口注册的串口接收中断服务函数将第一数据写入接收数据缓存区。
在应用层发送的第二数据写入发送数据缓存区后,硬件驱动调用第二接口注册的串口发送中断服务函数将第二数据发送给硬件层。
本实施例中的代理层具有通用性,将嵌入式软件的软件驱动模块抽象出来,只预留接口由应用层根据单片机的特性编写代码后传递给代理层。
在上述各实施例的基础上,本实施例中所述代理层有多个,所述代理层与所述硬件层一一对应。
如图2所示,代理层有多个,代理层的数据根据硬件层的数量确定。代理层与硬件层一一对应,每个代理层与相应的硬件层进行交互。
本实施例的应用层通过代理层与多个硬件层进行串口通信,提高应用层的通用性,减少应用层的重复开发。
在上述各实施例的基础上,本实施例中所述数据管理模块还用于:
对所述第一数据和所述第二数据进行校验;
在所述第一数据校验通过的情况下,将所述第一数据发送给所述应用层;
在所述第二数据校验通过的情况下,将所述第二数据发送给所述发送数据缓存区。
数据管理模块对从接收数据缓存区读取的第一数据和应用层发送的第二数据进行合法性校验,在第一数据校验通过的情况下,将第一数据发送给应用层进行后续处理;在第二数据校验通过的情况下,将第二数据写入发送数据缓存区。
数据管理模块可根据预先规定的通信协议和校验机制进行校验,只有校验通过的第一数据和第二数据才能发送,从而实现对脏数据进行过滤。
在上述各实施例的基础上,本实施例中所述数据管理模块具体用于:
校验所述第一数据或所述第二数据中是否包含错误的数据位、停止位和流控制位中的一种或多种;
校验所述第一数据或所述第二数据中是否包含错误的校验码和无效的数据包;
校验所述第一数据或所述第二数据是否包含损坏数据。
脏数据可能包含错误的数据位、停止位和流控制位等,通过对第一数据和第二数据进行校验,避免数据传输错误。
脏数据可能包含错误的校验码和无效的数据包,通过对第一数据和第二数据进行校验,避免数据传输丢失。
脏数据可能包含损坏的数据,通过对第一数据和第二数据进行校验,避免数据损坏。
下面对本发明提供的基于嵌入式软件的串口通信方法进行描述,下文描述的基于嵌入式软件的串口通信方法与上文描述的基于嵌入式软件的串口通信系统可相互对应参照。
图3提供一种基于嵌入式软件的串口通信方法,应用于上述基于嵌入式软件的串口通信系统,包括:
步骤301,代理层中的硬件驱动根据嵌入式软件的硬件层在接收到第一数据时产生的中断信号,调用接收中断服务函数将所述第一数据写入接收数据缓存区;
步骤302,所述代理层中的数据管理模块从所述接收数据缓存区中获取未读取的第一数据,并将所述第一数据解析后发送给所述嵌入式软件的应用层;
步骤303,所述数据管理模块对所述应用层发送的第二数据打包后写入所述发送数据缓存区;
步骤304,在所述硬件层基于所述应用层对发送中断使能标志的启动产生中断后,所述硬件驱动调用发送中断服务函数将所述发送数据缓存区中未读取的第二数据发送给所述硬件层,所述发送中断使能标志由所述应用层在所述第二数据写入所述发送数据缓存区后启动。
本实施例通过代理层实现嵌入式软件的应用层和硬件层之间的串口通信,通过代理层的硬件驱动调用中断服务函数实现将硬件层接收的数据保存在接收数据缓存区或将发送数据缓存区的数据发送给硬件层,通过代理层的数据管理模块将接收数据缓存区的数据发送给应用层或将应用层发送的数据写入发送数据缓存区,从而将硬件层与应用层分离,应用层的软件开发不依赖硬件和开发环境,通过代理层收发数据,便于简化和统一应用层的软件开发,提高应用层的通用性、可移植性和开发效率,易于维护和升级。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (4)
1.一种基于嵌入式软件的串口通信系统,其特征在于,包括:
代理层,所述代理层包括数据管理模块、硬件驱动、接收数据缓存区和发送数据缓存区;
所述硬件驱动用于根据嵌入式软件的硬件层在接收到第一数据时产生的中断信号,调用接收中断服务函数将所述第一数据写入所述接收数据缓存区;在所述硬件层基于所述嵌入式软件的应用层对发送中断使能标志的启动产生中断后,调用发送中断服务函数将所述发送数据缓存区中未读取的第二数据发送给所述硬件层,所述发送中断使能标志由所述应用层在所述第二数据写入所述发送数据缓存区后启动;
所述数据管理模块用于从所述接收数据缓存区中获取未读取的第一数据,并将所述第一数据解析后发送给所述应用层;对所述应用层发送的第二数据打包后写入所述发送数据缓存区;
所述硬件驱动具体用于:
根据所述硬件层在接收到所述第一数据的每个字节时产生的中断信号,调用所述接收中断服务函数将所述第一数据的每个字节从所述硬件层的数据寄存器中读取后保存在RAM中;
在第一计数器记录的所述接收数据缓存区的最新写入位置为末位的情况下,将所述最新写入位置更新为首位;
在所述最新写入位置不为末位的情况下,将所述最新写入位置更新为所述最新写入位置的下一位;
将所述RAM中第一数据的每个字节写入更新后的所述最新写入位置;
所述数据管理模块具体用于:
在第二计数器记录的所述接收数据缓存区的最新读取位置与所述第一计数器记录的所述最新写入位置不相同的情况下,获知所述接收数据缓存区中存在未读取的第一数据;
在所述最新读取位置为末位的情况下,将所述最新读取位置更新为首位;
在所述最新读取位置不为末位的情况下,将所述最新读取位置更新为所述最新读取位置的下一位;
读取更新后的所述最新读取位置处的第一数据;
所述数据管理模块具体用于:
在第三计数器记录的所述发送数据缓存区的最新写入位置为末位的情况下,将所述最新写入位置更新为首位;
在所述最新写入位置不为末位的情况下,将所述最新写入位置更新为所述最新写入位置的下一位;
将所述应用层发送的第二数据的每个字节写入更新后的所述最新写入位置;
所述硬件驱动具体用于:
在所述硬件层基于所述应用层对发送中断使能标志的启动产生中断后,调用发送中断服务函数检查第四计数器记录的所述发送数据缓存区的最新读取位置与所述第三计数器记录的所述最新写入位置是否相同;
在所述最新读取位置与所述最新写入位置不相同的情况下,获知所述发送数据缓存区中存在未读取的第二数据;
在所述最新读取位置为末位的情况下,将所述最新读取位置更新为首位;
在所述最新读取位置不为末位的情况下,将所述最新读取位置更新为所述最新读取位置的下一位;
读取更新后的所述最新读取位置处的第二数据发送给所述硬件层;
所述代理层由所述应用层创建,所述代理层由所述硬件驱动调用初始化函数启动;
所述初始化函数的指针、接收中断服务函数的指针和发送中断服务函数的指针由所述应用层向所述代理层注册;
所述硬件驱动用于根据所述指针从所述应用层调用相应的初始化函数、接收中断服务函数和发送中断服务函数;
所述数据管理模块还用于:
对所述第一数据和所述第二数据进行校验;
在所述第一数据校验通过的情况下,将所述第一数据发送给所述应用层;
在所述第二数据校验通过的情况下,将所述第二数据发送给所述发送数据缓存区。
2.根据权利要求1所述的基于嵌入式软件的串口通信系统,其特征在于,所述代理层有多个,所述代理层与所述硬件层一一对应。
3.根据权利要求1所述的基于嵌入式软件的串口通信系统,其特征在于,所述数据管理模块具体用于:
校验所述第一数据或所述第二数据中是否包含错误的数据位、停止位和流控制位中的一种或多种;
校验所述第一数据或所述第二数据中是否包含错误的校验码和无效的数据包;
校验所述第一数据或所述第二数据是否包含损坏数据。
4.一种基于嵌入式软件的串口通信方法,其特征在于,应用于权利要求1-3任一项所述的基于嵌入式软件的串口通信系统,包括:
代理层中的硬件驱动根据嵌入式软件的硬件层在接收到第一数据时产生的中断信号,调用接收中断服务函数将所述第一数据写入接收数据缓存区;
所述代理层中的数据管理模块从所述接收数据缓存区中获取未读取的第一数据,并将所述第一数据解析后发送给所述嵌入式软件的应用层;
所述数据管理模块对所述应用层发送的第二数据打包后写入所述发送数据缓存区;
在所述硬件层基于所述应用层对发送中断使能标志的启动产生中断后,所述硬件驱动调用发送中断服务函数将所述发送数据缓存区中未读取的第二数据发送给所述硬件层,所述发送中断使能标志由所述应用层在所述第二数据写入所述发送数据缓存区后启动。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311289691.7A CN117032644B (zh) | 2023-10-08 | 2023-10-08 | 基于嵌入式软件的串口通信系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311289691.7A CN117032644B (zh) | 2023-10-08 | 2023-10-08 | 基于嵌入式软件的串口通信系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117032644A CN117032644A (zh) | 2023-11-10 |
CN117032644B true CN117032644B (zh) | 2023-12-12 |
Family
ID=88641501
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311289691.7A Active CN117032644B (zh) | 2023-10-08 | 2023-10-08 | 基于嵌入式软件的串口通信系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117032644B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105357147A (zh) * | 2015-11-30 | 2016-02-24 | 北京控制工程研究所 | 一种高速高可靠的片上网络适配单元 |
CN112231003A (zh) * | 2020-10-15 | 2021-01-15 | 天津津航计算技术研究所 | 一种VxWorks系统下CAN设备管理方法 |
CN114257645A (zh) * | 2021-11-23 | 2022-03-29 | 北京谊安医疗系统股份有限公司 | 一种嵌入式中模块化通讯系统及其通讯方法 |
CN115269221A (zh) * | 2022-07-11 | 2022-11-01 | 上海介方信息技术有限公司 | 基于共享内存机制的fpga硬件抽象层设计方法、系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2462258B (en) * | 2008-07-28 | 2012-02-08 | Advanced Risc Mach Ltd | Interrupt control for virtual processing apparatus |
-
2023
- 2023-10-08 CN CN202311289691.7A patent/CN117032644B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105357147A (zh) * | 2015-11-30 | 2016-02-24 | 北京控制工程研究所 | 一种高速高可靠的片上网络适配单元 |
CN112231003A (zh) * | 2020-10-15 | 2021-01-15 | 天津津航计算技术研究所 | 一种VxWorks系统下CAN设备管理方法 |
CN114257645A (zh) * | 2021-11-23 | 2022-03-29 | 北京谊安医疗系统股份有限公司 | 一种嵌入式中模块化通讯系统及其通讯方法 |
CN115269221A (zh) * | 2022-07-11 | 2022-11-01 | 上海介方信息技术有限公司 | 基于共享内存机制的fpga硬件抽象层设计方法、系统 |
Non-Patent Citations (1)
Title |
---|
嵌入式系统网卡驱动模型设计与实现;梅涛等;电子科技(04);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117032644A (zh) | 2023-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111930676B (zh) | 多处理器间的通信方法、装置、系统及存储介质 | |
US20200104195A1 (en) | Methods and apparatus for correcting out-of-order data transactions between processors | |
US6182182B1 (en) | Intelligent input/output target device communication and exception handling | |
US8156415B1 (en) | Method and system for command queuing in disk drives | |
CN107622207B (zh) | 加密系统级数据结构 | |
EP4195598A1 (en) | In-vehicle signal transmission method and system | |
US20200210224A1 (en) | Methods and apparatus for verifying completion of groups of data transactions between processors | |
US9473273B2 (en) | Memory system capable of increasing data transfer efficiency | |
EP3542519B1 (en) | Faster data transfer with remote direct memory access communications | |
CN104184543A (zh) | 一种数据传输的方法、装置和系统 | |
CN115827506A (zh) | 数据写入方法、数据读取方法、装置、处理核和处理器 | |
RU2541106C2 (ru) | Облегчение операций ввода-вывода в режиме передачи между канальной подсистемой и устройствами ввода-вывода | |
CN117032644B (zh) | 基于嵌入式软件的串口通信系统及方法 | |
WO2024037076A1 (zh) | 数据交互方法、装置、系统、电子设备和存储介质 | |
US20090022158A1 (en) | Method For Increasing Network Transmission Efficiency By Increasing A Data Updating Rate Of A Memory | |
WO2013086847A1 (zh) | 核间通信的方法及核处理器 | |
CN112135286A (zh) | 一种基于蓝牙固件升级传输效率提升的方法及装置 | |
US8412998B1 (en) | Restart operation with logical blocks in queued commands | |
CN116893987B (zh) | 硬件加速方法、硬件加速器及硬件加速系统 | |
EP1198891B1 (en) | Data integrity management for data storage systems | |
US20240289175A1 (en) | Data Processing Method and Related Device | |
US11108894B2 (en) | Masked packet checksums for more efficient digital communication | |
US20240214131A1 (en) | Storage device for transmitting frame sequence number and credit information faster, and method of operating the same | |
CN113726755B (zh) | 一种slip协议数据的处理方法 | |
WO2010061482A1 (ja) | 試験装置、シリアル伝送システム、プログラム、および、記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |