CN108920184A - 基于双环形缓冲区的微处理器高性能数据通信方法 - Google Patents
基于双环形缓冲区的微处理器高性能数据通信方法 Download PDFInfo
- Publication number
- CN108920184A CN108920184A CN201810569780.XA CN201810569780A CN108920184A CN 108920184 A CN108920184 A CN 108920184A CN 201810569780 A CN201810569780 A CN 201810569780A CN 108920184 A CN108920184 A CN 108920184A
- Authority
- CN
- China
- Prior art keywords
- data
- program
- int
- buffer area
- value
- 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.)
- Granted
Links
Classifications
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Systems (AREA)
Abstract
本发明公开了基于双环形缓冲区的微处理器高性能数据通信方法,数据接收状态结构体初始化和数据发送状态结构体初始化;循环执行数据接收程序和数据发送程序,数据接收程序和数据发送程序采用查询方式循环执行;当中断源产生中断信号时,中断服务程序打断当前正在执行的数据接收程序或数据发送程序,中断服务程序执行结束后,继续执行循环检测过程。本发明集微处理器查询通信方式和中断通信方式的优势于一体,实现了微处理器和其他通信终端之间数据的高性能接收与发送,具有实时性好,可靠性高,运行速度快,不阻塞其余任务,消息收发与处理相互独立,支持复杂通信任务处理,程序执行效率高的优点。
Description
技术领域
本发明涉及通信技术领域,特别是涉及基于双环形缓冲区的微处理器高性能数据通信方法。
背景技术
随着电子技术的飞速发展,微处理器的应用已经渗透到工业、农业、军事、医疗、交通等行业,是全球科技发展的前沿领域。微处理器具有体积小、功耗低、结构简单、运行稳定的优点,广泛引用于实时性要求高、功能相对单一的工业监测与控制场合;近年来,微处理的研究取得的长足的进步,具体表现在微处理器运算能力提高、外设种类和数量增加、负载能力增强、外部接口愈加丰富等方面,另外,嵌入式操作系统、图形库显示控件、网络协议栈也被成功移植进入微处理器,以上原因使得现代微处理器可以适应更加多变的应用场合,处理更加复杂的计算和控制任务。
微处理器数据通信是指微处理器和其他通信终端设备进行数据的双向交换。微处理器数据通信都基于一定的物理介质,如工业以太网通信方式、CAN现场总线通信方式、串口通信方式、并口通信方式、无线WIFI通信方式,它们之间的区别仅在于物理传输媒介、底层网络通信协议不同,物理通信方式不影响应用层的数据通信,数据通信的特征和要求仅由微处理器和其他通信终端设备的通信特征决定。随着工业监测手段不断丰富,控制策略愈加复杂,多任务并发处理技术逐步成熟,微处理器数据通信正面临着数据速率增加,实时性、可靠性和数据精度要求愈加严苛的难题。
微处理器数数据通信的常规方法分为中断方式和查询方式。中断方式是指当微处理器接收到数据,微处理器程序则由硬件触发进入中断服务函数,由中断服务函数完成数据的接收、校验和解析操作,采用中断方式完成数据通信的优点是实时性好,数据的处理可以打断微处理器正在执行的其余任务,其余任务必须等待数据通信结束方可继续执行,缺点在于中断程序打断了其余任务,在基于操作系统的软件环境下还会干扰系统的任务调度机制,使得程序整体执行效率降低;查询方式是指微处理器通过软件定期的查询是否有数据收到,若有则完成数据的接收、校验和解析操作,反之则继续进行其他任务,下一周期则重复上述过程,查询方式完成数据通信的优点是不会中断系统中执行的其余任务,查询任务和其余任务具有相同的执行优先级,程序整体执行效率高,缺点在于数据通信的实时性较差。
中断方式数据通信适用于对通信实时性要求高,但是中断服务函数中执行任务相对简单、耗时较少的微处理器通信场合;查询方式数据通信适用于对通信实时性要求较低,通信信息的应用任务相对复杂的微处理器通信场合。然而,现代工业应用现场对微处理器的通信要求不断提高,具体表现在通信实时性、可靠性要求不断提高,数据量扩大以及数据速率提升。以电力行业为例,故障录波器以微秒级的速率采集和传输信息,广域测量装置以毫秒级的速率采集和传输信息,微处理器若采用传统的查询方式或中断方式与上述装置进行数据通信,则无法在保证数据实时性和可靠性的前提下完成复杂的电力系统监测与控制任务。
发明内容
为了解决现有技术的不足,本发明提供了基于双环形缓冲区的微处理器高性能数据通信方法,综合了查询方式和中断方式数据通信的基本原理,同时适用于微处理器裸机软件环境和操作系统软件环境下数据的接收与发送,具有实时性好,可靠性高,运行速度快,不阻塞其余任务,支持复杂通信任务处理,程序执行效率高的优点。
基于双环形缓冲区的微处理器高性能数据通信方法,包括:
利用初始化程序完成数据接收状态结构体初始化和数据发送状态结构体初始化;
循环执行数据接收程序和数据发送程序,数据接收程序和数据发送程序采用查询方式循环执行;
当中断源产生中断信号时,中断服务程序打断当前正在执行的数据接收程序或数据发送程序,中断服务程序执行结束后,继续执行循环检测过程;
其中,当微处理器有数据收到或数据发送时,产生中断信号,对中断源进行分类,分为数据接收中断和数据发送中断;
当微处理器接收数据时,触发接收中断程序,接收中断程序调用多字节数据写入程序,多字节数据写入程序进而多次调用单字节数据写入程序,采用数据接收状态结构体对数据接收缓冲区进行操作,将接收到的数据包按字节顺序存储至数据接收缓冲区;
当微处理器发送数据时,触发发送中断程序,发送中断程序调用多字节数据读取程序,多字节数据读取程序进而多次调用单字节数据读取程序,采用数据发送状态结构体对数据发送缓冲区进行操作,将待发送的数据包通过通信单元按字节顺序发送至其他终端设备;
进一步优选的技术方案,所述数据接收程序和数据发送程序中执行的子程序均包括:单字节数据读取程序,多字节数据读取程序,单字节数据写入程序,多字节数据写入程序,指针位置调整程序和用户自定义功能程序。
所述数据接收缓冲区和数据发送缓冲区作为操作对象执行单字节数据读取程序、多字节数据读取程序、单字节数据写入程序、多字节数据写入程序、指针位置调整程序进行数据的读取及写入操作,配合数据接收程序和数据发送程序完成微处理器和其他终端设备间数据的双向通信。
进一步优选的技术方案,初始化程序包括数据接收状态结构体初始化和数据发送状态结构体初始化两部分,初始化程序仅在微处理器上电后执行一次;
数据接收状态结构体初始化将int*top成员指向数据接收缓冲区首地址,int*end成员指向数据接收缓冲区末地址,int*pwr成员指向数据接收缓冲区首地址,int*prd成员指向数据接收缓冲区首地址;
数据发送状态结构体初始化将int*top成员指向数据发送缓冲区首地址,int*end成员指向数据发送缓冲区末地址,int*pwr成员指向数据发送缓冲区首地址,int*prd成员指向数据发送缓冲区首地址。
进一步优选的技术方案,数据接收程序子参数包括:数据包头长度,数据包内容长度,数据包尾长度,未读取数据长度,表示当前写指针领先读指针的长度,即还未读取的数据长度,数据读取状态标号,值为0表示未找到正确包头,值为1表示找到正确包头,值为2表示数据解析完毕,数据接收临时保存数组,供数据读取过程临时存储数据用;
数据接收程序子程序包括:数据包头校验程序,数据解析程序,数据包尾校验程序。
进一步优选的技术方案,数据接收程序由系统循环调用执行,每次执行该程序时,首先判断数据读取状态标号的值,之后计算当前未读取数据的长度,若状态标号等于0,则代表未找到包头,若未读取数据的长度小于包头长度,则继续循环等待;若未读取数据的长度大于等于包头长度,且包头校验正确,则置状态标号的值为1,表示已经找到包头,进行数据解析程序;若未读取数据的长度大于等于包头长度,但是包头校验错误,则丢弃本数据包,继续寻找。
进一步优选的技术方案,若状态标号等于1,表示包头校验正确,执行数据解析程序,数据解析程序由用户的需要进行自定义,数据解析程序的最后将状态标号的值置为2,表示数据解析程序执行完毕,若状态标号等于2,表示数据解析程序执行完毕,进行数据包尾校验程序,若数据包尾校验正确,则根据数据解析内容执行用户自定义功能程序,并重新置状态标号的值为0,重新开始新数据包的接收过程;若数据包尾校验错误,则表示该数据包不完整,有可能包含错误信息,为了数据通信的可靠性,该数据包应丢弃,不执行用户自定义功能程序,重新置状态标号的值为0,开始新数据包的读取过程。
进一步优选的技术方案,数据发送程序由系统循环调用执行,数据发送程序子参数包括:数据发送临时保存数组,供数据发送过程临时存储数据用;
数据发送程序子程序包括:数据包头添加程序,数据内容添加程序,数据包尾添加程序,数据发送使能程序。
进一步优选的技术方案,数据发送程序由系统循环调用执行,每次执行该程序时,循环检测是否有发送命令,当接收到发送命令且有待发送数据(int*pwr-int*prd>0时:数据发送缓冲区写指针领先于数据发送缓冲区读指针),完成待发送数据包的组包过程:依次执行数据包头添加程序,数据包数据信息添加程序,数据包尾添加程序构建完整的待发送数据包,之后使能发送中断,开始数据包的顺序发送。
进一步优选的技术方案,单字节数据读取程序,要求函数入口参数给定数据接收或发送状态结构体,该程序将数据接收或发送状态结构体中int*prd成员所指向的数据接收或发送缓冲区单字节数据进行读取,通过返回值返回给上一级调用程序,之后令int*prd成员的值加1;
单字节读取完毕后,若int*prd成员的值大于或等于int*end成员的值,则令int*prd成员的值等于int*top成员的值,重新指向数据接收或发送缓冲区的首字节数据;若int*prd成员的值小于int*end成员的值,则int*prd成员的值保持不变,指向数据接收或发送缓冲区的下一字节数据。
进一步优选的技术方案,多字节数据读取程序,要求函数入口参数给定数据接收或发送状态结构体、待读取数据长度lRd_Length、供存放读取数据的数组以及临时计数标志位Num,初始值为0,每执行一次单字节数据读取程序,临时计数标志位的值加1,该程序重复执行lRd_Length次单字节数据读取程序,并将每次读取的返回值顺序存储至供存放读取数据的数组中。
进一步优选的技术方案,单字节数据写入程序,要求函数入口参数给定数据接收或发送状态结构体,该程序将单字节数据写入数据接收或发送状态结构体中int*pwr成员所指向的数据接收或发送缓冲区单字节地址,单字节数据写入完毕后,令int*pwr成员的值加1;
若pwr成员的值大于或等于int*end成员的值,则令int*pwr成员的值等于int*top成员的值,重新指向数据接收或发送缓冲区的首地址数据;若int*pwr成员的值小于int*end成员的值,则int*pwr成员的值保持不变,指向数据接收或发送缓冲区的下一字节数据;若int*pwr成员的值大于或等于int*prd成员的值,则说明将产生数据的覆盖和丢失现象,程序运行出错,应终止程序。
进一步优选的技术方案,多字节数据写入程序,要求函数入口参数给定数据接收或发送状态结构体、待发送长度lWr_Length以及临时计数标志位Num,初始值为0,每执行一次单字节数据吸入程序,Num的值加1,该程序重复执行lWr_Length次单字节数据写入程序,完成多字节数据的写入。
进一步优选的技术方案,数据接收状态结构体或发送状态结构体利用指针位置调整程序将按照指针位置调整的字节数改变其成员指针的位置。
基于双环形缓冲区的微处理器高性能数据通信系统,包括微处理器,所述微处理器被配置为执行所述基于双环形缓冲区的微处理器高性能数据通信方法的步骤。
一种微处理器,所述微处理器被配置为执行所述基于双环形缓冲区的微处理器高性能数据通信方法的步骤。
一种计算机可存储介质,所述计算机可存储介质存储有上述基于双环形缓冲区的微处理器高性能数据通信方法对应的程序。
与现有技术相比,本发明的有益效果是:
本发明集微处理器查询通信方式和中断通信方式的优势于一体,实现了微处理器和其他通信终端之间数据的高性能接收与发送,兼容微处理器裸机软件环境和操作系统软件环境,具有实时性好,可靠性高,运行速度快,不阻塞其余任务,消息收发与处理相互独立,支持复杂通信任务处理,程序执行效率高的优点。
附图说明
构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。
图1为程序整体流程图;
图2为初始化程序流程图;
图3为数据接收程序流程图;
图4为数据发送程序流程图;
图5为单字节数据读取程序流程图;
图6为多字节数据读取程序流程图;
图7为单字节数据写入程序流程图;
图8为多字节数据写入程序流程图。
具体实施方式
应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
本申请的一种典型的实施方式中,一种基于双环形缓冲区的微处理器高性能数据通信方法,如图1所示,包括:全局参数定义,初始化程序,数据接收程序,数据发送程序,中断判断和中断服务函数。
还包括数据接收中断程序、数据发送中断程序、单字节数据读取程序,多字节数据读取程序,单字节数据写入程序,多字节数据写入程序,指针位置调整程序和用户自定义功能程序。
全局参数定义包括全局变量定义和全局函数声明,全局参数定义均在公共头文件pbdata.h中完成,需要应用全局变量和全局函数的程序需引用公共头文件pbdata.h。
全局变量定义包括:数据接收缓冲区(Buffer_Rx[Rx_Num],Rx_Num为数据接收缓冲区的长度,可以为大于两倍完整待接收数据包长度的任意值),数据接收状态结构体(BufStruct_Rx,成员包括:int*top指向数据接收缓冲区首地址,int*end指向数据接收缓冲区末地址,int*pwr指向数据接收缓冲区待写入字节地址,int*prd指向数据接收缓冲区待读取字节地址),数据发送缓冲区(Buffer_Tx[Tx_Num],Tx_Num为数据发送缓冲区的长度,可以为大于两倍完整待发送数据包长度的任意值),数据发送状态结构体(BufStruct_Tx,成员包括:int*top指向数据发送缓冲区首地址,int*end指向数据发送缓冲区末地址,int*pwr指向数据发送缓冲区待写入字节地址,int*prd指向数据发送缓冲区待读取字节地址);全局函数声明包括:初始化程序声明,数据接收程序声明,数据发送程序声明,单字节数据读取程序声明,多字节数据读取程序声明,单字节数据写入程序声明,多字节数据写入程序声明,指针位置调整程序声明和用户自定义功能程序声明。
微处理器上电运行后,仅执行一次初始化程序完成数据接收状态结构体初始化和数据发送状态结构体初始化,之后进入循环检测过程,循环执行数据接收程序和数据发送程序。数据接收程序和数据发送程序中执行的子程序包括:单字节数据读取程序,多字节数据读取程序,单字节数据写入程序,多字节数据写入程序,指针位置调整程序和用户自定义功能程序。
当中断源产生中断信号时,中断服务程序可以打断当前正在执行的数据接收程序或数据发送程序,中断服务程序执行结束后,继续执行循环检测过程。当微处理器有数据收到或数据发送时,产生中断信号,由软件内部的中断判断对中断源进行分类,分为数据接收中断和数据发送中断。当微处理器收到数据时,由微处理器通信单元硬件触发接收中断程序,接收中断程序可以打断当前执行的其余任务,具有最高的响应优先级,接收中断程序调用单字节数据写入程序,将接收到的数据包按字节顺序存储至数据接收缓冲区;当微处理器有数据要发送时,由微处理器通信单元硬件触发发送中断程序,发送中断程序可以打断除数据接收中断程序外的所有任务,具有次高的响应优先级,发送中断程序调用单字节读取程序,将待发送的数据包通过通信单元按字节顺序发送至其他终端设备。
如图2所示,初始化程序包括数据接收状态结构体初始化和数据发送状态结构体初始化两部分,初始化程序仅在微处理器上电后执行一次。数据接收状态结构体初始化将int*top成员指向数据接收缓冲区首地址,int*end成员指向数据接收缓冲区末地址,int*pwr成员指向数据接收缓冲区首地址,int*prd成员指向数据接收缓冲区首地址;数据发送状态结构体初始化将int*top成员指向数据发送缓冲区首地址,int*end成员指向数据发送缓冲区末地址,int*pwr成员指向数据发送缓冲区首地址,int*prd成员指向数据发送缓冲区首地址。
如图3所示,数据接收程序由系统循环调用执行,数据接收程序子参数包括:数据包头长度(Head_Length),数据包内容长度(Data_Length),数据包尾长度(End_Length),未读取数据长度(unRx_Length,表示当前写指针领先读指针的长度,即还未读取的数据长度),数据读取状态标号(Rx_Status,值为0表示未找到正确包头,值为1表示找到正确包头,值为2表示数据解析完毕),数据接收临时保存数组(Rx_Buffer[64],供数据读取过程临时存储数据用);子程序包括:数据包头校验程序,数据解析程序,数据包尾校验程序。
每次执行该程序时,首先判断数据读取状态标号Rx_Status的值,之后计算当前未读取数据的长度unRx_Length。若Rx_Status等于0,则代表未找到包头,若unRx_Length的长度小于包头长度Head_Length,则继续循环等待;若unRx_Length的长度大于等于包头长度Head_Length,且包头校验正确,则置Rx_Status的值为1,表示已经找到包头,可以进行数据解析程序;若unRx_Length的长度大于等于包头长度Head_Length,但是包头校验错误,则丢弃本数据包,继续寻找。若Rx_Status等于1,表示包头校验正确,执行数据解析程序,数据解析程序由用户的需要进行自定义,数据解析程序的最后将Rx_Status的值置为2,表示数据解析程序执行完毕。若Rx_Status等于2,表示数据解析程序执行完毕,进行数据包尾校验程序,若数据包尾校验正确,则根据数据解析内容执行用户自定义功能程序,并重新置Rx_Status的值为0,重新开始新数据包的接收过程;若数据包尾校验错误,则表示该数据包不完整,有可能包含错误信息,为了数据通信的可靠性,该数据包应丢弃,不执行用户自定义功能程序,重新置Rx_Status的值为0,开始新数据包的读取过程。
如图4所示,数据发送程序由系统循环调用执行,子参数包括:数据发送临时保存数组(Tx_Buffer[64],供数据发送过程临时存储数据用);子程序包括:数据包头添加程序,数据内容添加程序,数据包尾添加程序,数据发送使能程序。程序循环检测是否有发送命令,当接收当发送命令且有待发送数据(int*pwr-int*prd>0时),完成待发送数据包的组包过程:依次执行数据包头添加程序,数据包数据信息添加程序,数据包尾添加程序构建完整的待发送数据包,之后使能发送中断,开始数据包的顺序发送。
如图5所示,单字节数据读取程序,要求函数入口参数给定数据接收或发送状态结构体,该程序将数据接收或发送状态结构体中int*prd成员所指向的数据接收或发送缓冲区单字节数据进行读取,通过返回值返回给上一级调用程序,之后令int*prd成员的值加1。单字节读取完毕后,若int*prd成员的值大于或等于int*end成员的值,则令int*prd成员的值等于int*top成员的值,重新指向数据接收或发送缓冲区的首字节数据;若int*prd成员的值小于int*end成员的值,则int*prd成员的值保持不变,指向数据接收或发送缓冲区的下一字节数据。
如图6所示,多字节数据读取程序,要求函数入口参数给定数据接收或发送状态结构体、待读取长度lRd_Length、供存放读取数据的数组以及临时计数标志位Num(初始值为0),每执行一次单字节数据读取程序,Num的值加1,该程序重复执行lRd_Length次单字节数据读取程序,并将每次读取的返回值顺序存储至供存放读取数据的数组中。
如图7所示,单字节数据写入程序,要求函数入口参数给定数据接收或发送状态结构体,该程序将单字节数据写入数据接收或发送状态结构体中int*pwr成员所指向的数据接收或发送缓冲区单字节地址,单字节数据写入完毕后,令int*pwr成员的值加1。若int*pwr成员的值大于或等于int*end成员的值,则令int*pwr成员的值等于int*top成员的值,重新指向数据接收或发送缓冲区的首地址数据;若int*pwr成员的值小于int*end成员的值,则int*pwr成员的值保持不变,指向数据接收或发送缓冲区的下一字节数据;若int*pwr成员的值大于或等于int*prd成员的值,则说明将产生数据的覆盖和丢失现象,程序运行出错,应终止程序。
如图8所示,多字节数据写入程序,要求函数入口参数给定数据接收或发送状态结构体、待发送长度lWr_Length以及临时计数标志位Num(初始值为0),每执行一次单字节数据吸入程序,Num的值加1,该程序重复执行lWr_Length次单字节数据写入程序,完成多字节数据的写入。
另外,关于指针位置调整程序,要求函数入口参数给定数据接收或发送状态结构体成员指针以及指针位置调整的字节数,该程序将按照指针位置调整的字节数改变数据接收或发送状态结构体成员指针的位置。
数据接收程序由系统循环调用执行,子参数包括:数据包头长度(Head_Length),数据包内容长度(Data_Length),数据包尾长度(End_Length),未读取数据长度(unRx_Length,表示当前写指针领先读指针的长度,即还未读取的数据长度),数据读取状态标号(Rx_Status,值为0表示未找到正确包头,值为1表示找到正确包头,值为2表示数据解析完毕),数据接收临时保存数组(Rx_Buffer[64],供数据读取过程临时存储数据用);子程序包括:数据包头校验程序,数据内容解析程序,数据包尾校验程序。
数据发送程序由系统循环调用执行,子参数包括:数据发送临时保存数组(Tx_Buffer[64],供数据发送过程临时存储数据用);子程序包括:数据包头添加程序,数据内容添加程序,数据包尾添加程序,数据发送使能程序。
用户自定义功能程序指微处理器接收和解析数据后,用户依据自己的需要对数据进行的运算操作和控制功能,由于用户自定义功能程序由数据接收程序调用,该程序是采用查询方式执行的,不会干扰其它程序的执行,故用户自定义功能程序的复杂程度没有限制条件。
本申请中,数据接收中断程序和数据发送中断程序采用中断方式执行,保证数据的接收和发送具有最高的实时性和优先级,实现了数据的高速双向传输;数据接收程序和数据发送程序采用查询方式循环执行,使得针对数据处理的复杂程度不再受限,查询方式和中断方式的综合应用有效提高了微处理器数据通信能力。
数据接收程序、数据发送程序采用查询方式循环执行,不会干扰其它程序的执行,因此,数据接收程序和数据发送程序中调用的子程序没有复杂程度限制条件。
本申请中双环形缓冲区为数据接收缓冲区和数据发送缓冲区,采用数据接收状态结构体对数据接收缓冲区进行操作,采用数据发送状态结构体对数据发送缓冲区进行操作。
本申请中,单字节数据读取程序、多字节数据读取程序、单字节数据写入程序、多字节数据写入程序、指针位置调整程序的操作对象既可以是数据接收缓冲区,也可以是数据发送缓冲区,功能为配合数据接收程序和数据发送程序完成微处理器和其他终端设备间数据的双向通信。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.基于双环形缓冲区的微处理器高性能数据通信方法,其特征是,包括:
利用初始化程序完成数据接收状态结构体初始化和数据发送状态结构体初始化;
循环执行数据接收程序和数据发送程序,数据接收程序和数据发送程序采用查询方式循环执行;
当中断源产生中断信号时,中断服务程序打断当前正在执行的数据接收程序或数据发送程序,中断服务程序执行结束后,继续执行循环检测过程;
其中,当微处理器有数据收到或数据发送时,产生中断信号,对中断源进行分类,分为数据接收中断和数据发送中断;
当微处理器接收数据时,触发接收中断程序,接收中断程序调用多字节数据写入程序,多字节数据写入程序进而多次调用单字节数据写入程序,采用数据接收状态结构体对数据接收缓冲区进行操作,将接收到的数据包按字节顺序存储至数据接收缓冲区;
当微处理器发送数据时,触发发送中断程序,发送中断程序调用多字节数据读取程序,多字节数据读取程序进而多次调用单字节数据读取程序,采用数据发送状态结构体对数据发送缓冲区进行操作,将待发送的数据包通过通信单元按字节顺序发送至其他终端设备。
2.如权利要求1所述的基于双环形缓冲区的微处理器高性能数据通信方法,其特征是,所述数据接收程序和数据发送程序中执行的子程序均包括:单字节数据读取程序,多字节数据读取程序,单字节数据写入程序,多字节数据写入程序,指针位置调整程序和用户自定义功能程序。
3.如权利要求1所述的基于双环形缓冲区的微处理器高性能数据通信方法,其特征是,初始化程序包括数据接收状态结构体初始化和数据发送状态结构体初始化两部分,初始化程序仅在微处理器上电后执行一次;
数据接收状态结构体初始化将int*top成员指向数据接收缓冲区首地址,int*end成员指向数据接收缓冲区末地址,int*pwr成员指向数据接收缓冲区首地址,int*prd成员指向数据接收缓冲区首地址;
数据发送状态结构体初始化将int*top成员指向数据发送缓冲区首地址,int*end成员指向数据发送缓冲区末地址,int*pwr成员指向数据发送缓冲区首地址,int*prd成员指向数据发送缓冲区首地址。
4.如权利要求1所述的基于双环形缓冲区的微处理器高性能数据通信方法,其特征是,数据接收程序由系统循环调用执行,每次执行该程序时,首先判断数据读取状态标号的值,之后计算当前未读取数据的长度,若状态标号等于0,则代表未找到包头,若未读取数据的长度小于包头长度,则继续循环等待;若未读取数据的长度大于等于包头长度,且包头校验正确,则置状态标号的值为1,表示已经找到包头,进行数据解析程序;若未读取数据的长度大于等于包头长度,但是包头校验错误,则丢弃本数据包,继续寻找。
5.如权利要求4所述的基于双环形缓冲区的微处理器高性能数据通信方法,其特征是,若状态标号等于1,表示包头校验正确,执行数据解析程序,数据解析程序由用户的需要进行自定义,数据解析程序的最后将状态标号的值置为2,表示数据解析程序执行完毕,若状态标号等于2,表示数据解析程序执行完毕,进行数据包尾校验程序,若数据包尾校验正确,则根据数据解析内容执行用户自定义功能程序,并重新置状态标号的值为0,重新开始新数据包的接收过程;若数据包尾校验错误,则表示该数据包不完整,有可能包含错误信息,为了数据通信的可靠性,该数据包应丢弃,不执行用户自定义功能程序,重新置状态标号的值为0,开始新数据包的读取过程。
6.如权利要求1所述的基于双环形缓冲区的微处理器高性能数据通信方法,其特征是,数据发送程序由系统循环调用执行,每次执行该程序时,循环检测是否有发送命令,当接收当发送命令且有待发送数据即int*pwr-int*prd>0时:数据发送缓冲区写指针领先于数据发送缓冲区读指针,完成待发送数据包的组包过程:依次执行数据包头添加程序,数据包数据信息添加程序,数据包尾添加程序构建完整的待发送数据包,之后使能发送中断,开始数据包的顺序发送。
7.如权利要求2所述的基于双环形缓冲区的微处理器高性能数据通信方法,其特征是,单字节数据读取程序,要求函数入口参数给定数据接收或发送状态结构体,该程序将数据接收或发送状态结构体中int*prd成员所指向的数据接收或发送缓冲区单字节数据进行读取,通过返回值返回给上一级调用程序,之后令int*prd成员的值加1;
单字节读取完毕后,若int*prd成员的值大于或等于int*end成员的值,则令int*prd成员的值等于int*top成员的值,重新指向数据接收或发送缓冲区的首字节数据;若int*prd成员的值小于int*end成员的值,则int*prd成员的值保持不变,指向数据接收或发送缓冲区的下一字节数据;
多字节数据读取程序,要求函数入口参数给定数据接收或发送状态结构体、待读取长度lRd_Length、供存放读取数据的数组以及临时计数标志位Num,初始值为0,每执行一次单字节数据读取程序,临时计数标志位的值加1,该程序重复执行lRd_Length次单字节数据读取程序,并将每次读取的返回值顺序存储至供存放读取数据的数组中。
8.如权利要求2所述的基于双环形缓冲区的微处理器高性能数据通信方法,其特征是,单字节数据写入程序,要求函数入口参数给定数据接收或发送状态结构体,该程序将单字节数据写入数据接收或发送状态结构体中int*pwr成员所指向的数据接收或发送缓冲区单字节地址,单字节数据写入完毕后,令int*pwr成员的值加1;
若int*pwr成员的值大于或等于int*end成员的值,则令int*pwr成员的值等于int*top成员的值,重新指向数据接收或发送缓冲区的首地址数据;若int*pwr成员的值小于int*end成员的值,则int*pwr成员的值保持不变,指向数据接收或发送缓冲区的下一字节数据;若int*pwr成员的值大于或等于int*prd成员的值,则说明将产生数据的覆盖和丢失现象,程序运行出错,应终止程序;
多字节数据写入程序,要求函数入口参数给定数据接收或发送状态结构体、待发送数据长度lWr_Length以及临时计数标志位Num,初始值为0,每执行一次单字节数据吸入程序,Num的值加1,该程序重复执行lWr_Length次单字节数据写入程序,完成多字节数据的写入。
9.基于双环形缓冲区的微处理器高性能数据通信系统,包括微处理器,所述微处理器被配置为执行所述权利要求1-8任一所述的基于双环形缓冲区的微处理器高性能数据通信方法的步骤。
10.一种计算机可存储介质,所述计算机可存储介质存储有权利要求1-8任一所述基于双环形缓冲区的微处理器高性能数据通信方法对应的程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810569780.XA CN108920184B (zh) | 2018-06-05 | 2018-06-05 | 基于双环形缓冲区的微处理器高性能数据通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810569780.XA CN108920184B (zh) | 2018-06-05 | 2018-06-05 | 基于双环形缓冲区的微处理器高性能数据通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108920184A true CN108920184A (zh) | 2018-11-30 |
CN108920184B CN108920184B (zh) | 2020-06-23 |
Family
ID=64420221
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810569780.XA Active CN108920184B (zh) | 2018-06-05 | 2018-06-05 | 基于双环形缓冲区的微处理器高性能数据通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108920184B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110555056A (zh) * | 2019-07-23 | 2019-12-10 | 北京控制工程研究所 | 一种基于双环形缓冲的时标指令序列管理方法 |
CN112148444A (zh) * | 2020-09-04 | 2020-12-29 | 珠海格力电器股份有限公司 | 一种数据处理方法、装置、系统及存储介质 |
CN112148444B (zh) * | 2020-09-04 | 2024-06-07 | 珠海格力电器股份有限公司 | 一种数据处理方法、装置、系统及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3544966A (en) * | 1966-12-27 | 1970-12-01 | Ibm | Method and apparatus for multiplex control of a plurality of peripheral devices for transfer of data with a central processing system |
EP0871307A2 (en) * | 1997-04-08 | 1998-10-14 | International Business Machines Corporation | Apparatus for flexible control of interrupts in multiprocessor systems |
JP4280093B2 (ja) * | 2003-03-26 | 2009-06-17 | 株式会社富士通ソーシアルサイエンスラボラトリ | 振替乗車システム、振替乗車方法、振替乗車プログラム |
CN102662889A (zh) * | 2012-04-24 | 2012-09-12 | 华为技术有限公司 | 中断处理方法、中断控制器及处理器 |
CN106681949A (zh) * | 2016-12-29 | 2017-05-17 | 北京四方继保自动化股份有限公司 | 基于一致性加速接口的直接内存操作实现方法 |
CN107168917A (zh) * | 2017-04-25 | 2017-09-15 | 电子科技大学 | 一种利用USBHost接口实现程控仪器通信的总线桥 |
-
2018
- 2018-06-05 CN CN201810569780.XA patent/CN108920184B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3544966A (en) * | 1966-12-27 | 1970-12-01 | Ibm | Method and apparatus for multiplex control of a plurality of peripheral devices for transfer of data with a central processing system |
EP0871307A2 (en) * | 1997-04-08 | 1998-10-14 | International Business Machines Corporation | Apparatus for flexible control of interrupts in multiprocessor systems |
JP4280093B2 (ja) * | 2003-03-26 | 2009-06-17 | 株式会社富士通ソーシアルサイエンスラボラトリ | 振替乗車システム、振替乗車方法、振替乗車プログラム |
CN102662889A (zh) * | 2012-04-24 | 2012-09-12 | 华为技术有限公司 | 中断处理方法、中断控制器及处理器 |
CN106681949A (zh) * | 2016-12-29 | 2017-05-17 | 北京四方继保自动化股份有限公司 | 基于一致性加速接口的直接内存操作实现方法 |
CN107168917A (zh) * | 2017-04-25 | 2017-09-15 | 电子科技大学 | 一种利用USBHost接口实现程控仪器通信的总线桥 |
Non-Patent Citations (2)
Title |
---|
LI CHONG等: "A High Efficient Flash Storage System for Two-Way Cable Modem", 《 2008 IEEE 8TH INTERNATIONAL CONFERENCE ON COMPUTER AND INFORMATION TECHNOLOGY WORKSHOPS》 * |
胡恩伟: "基于MEMs多传感器数据融合的惯性组合", 《中国优秀硕士学位论文全文数据库(信息科技辑)》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110555056A (zh) * | 2019-07-23 | 2019-12-10 | 北京控制工程研究所 | 一种基于双环形缓冲的时标指令序列管理方法 |
CN110555056B (zh) * | 2019-07-23 | 2021-12-07 | 北京控制工程研究所 | 一种基于双环形缓冲的时标指令序列管理方法 |
CN112148444A (zh) * | 2020-09-04 | 2020-12-29 | 珠海格力电器股份有限公司 | 一种数据处理方法、装置、系统及存储介质 |
CN112148444B (zh) * | 2020-09-04 | 2024-06-07 | 珠海格力电器股份有限公司 | 一种数据处理方法、装置、系统及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108920184B (zh) | 2020-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107635283B (zh) | 一种室内高密度移动标签定位系统和定位方法 | |
CN106341266B (zh) | 具有主动和被动传输模式的硬件tcp/ip协议栈装置 | |
US20110088037A1 (en) | Single-stack real-time operating system for embedded systems | |
CN101982955A (zh) | 高性能文件传输系统及方法 | |
CN102546843A (zh) | 一种通过软件模拟实现多个uart通信接口的方法 | |
CN105072659B (zh) | 一种高传输率多跳无线传感器网络 | |
CN105915328B (zh) | 对同步帧的接收处理方法和装置 | |
CN109739786A (zh) | 一种dma控制器和异构加速系统 | |
CN109547162B (zh) | 基于两套单向边界的数据通信方法 | |
CN105788212B (zh) | 一种智能无线抄表系统及其通信方法 | |
US20220365810A1 (en) | Thread signal operating method and system of embedded real time operating system | |
CN109240947A (zh) | 智能卡数据接收方法及装置 | |
CN115002047A (zh) | 一种远程直接数据存取方法、装置、设备以及存储介质 | |
CN108920184A (zh) | 基于双环形缓冲区的微处理器高性能数据通信方法 | |
CN101452427B (zh) | 一种dma数据传输系统及方法和一种中央处理器 | |
CN109104714A (zh) | 一种应用于心电测量仪中的蓝牙连接间隔动态调整方法 | |
WO2012031438A1 (zh) | 一种处理器程序调度方法及装置 | |
CN109189598A (zh) | 一种中断定位的方法、处理器及终端设备 | |
CN109361761B (zh) | 一种物联网通信终端操作系统 | |
Lee et al. | Mica high speed radio stack | |
CN109361653A (zh) | 一种powerlink主站 | |
CN110536467B (zh) | ZigBee网络化工业控制系统通信调度方法及其协调器 | |
CN104601289B (zh) | 电子设备及信息处理方法 | |
CN108039936A (zh) | 一种用于无人作业装备的通信协议数据包及通信系统 | |
CN113341853A (zh) | 一种ip核、fpga芯片、交流伺服驱动器及通讯方法 |
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 |