一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于操作系统内核实现串口数据精准传输的方法和装置与流程

2023-01-15 05:18:10 来源:中国专利 TAG:


1.本发明涉及数据传输技术领域,更具体地说,涉及基于操作系统内核实现串口数据精准传输的方法和装置。


背景技术:

2.当前电子设备设计过程中,出于成本的考虑,一般的soc提供的物理串口数量不会很多。如果在外设存在比较多串口的情况下,此时最好的方式就是使用soc的其他gpio进行串口的模拟。但由于运行的linux 内核是属于多任务、抢占式的操作系统,且串口是一种没有时钟进行数据传输同步的协议中,gpio模拟串口的误码率会非常高。


技术实现要素:

3.本发明要解决的技术问题在于,针对现有技术的上述部分技术缺陷,提供一种基于操作系统内核实现串口数据精准传输的方法和装置。
4.本发明解决其技术问题所采用的技术方案是:构造一种基于操作系统内核实现串口数据精准传输的方法,包括:基于操作系统配置gpio口以得到接收端口,并设置接收端口在接收预设触发沿时触发中断;在通过接收端口接收由发射端口生成的传输数据时,基于传输数据中的首个预设触发沿触发接收端口触发中断以进入数据接收模式;关断接收端口的触发中断,并在读取到传输数据的当前数据时按照预设时间间隔读取传输数据的当前数据,对读取传输数据的当前数据的次数进行计数以获取累计计数;在累计计数小于预设值时继续执行按照预设时间间隔读取传输数据的当前数据的步骤。
5.优选地,在本技术的串口数据精准传输的方法中,还包括:在累计计数等于预设值时,开启接收端口的触发中断。
6.优选地,在本技术的串口数据精准传输的方法中,还包括:在关断接收端口的触发中断时,获取自旋锁以对接收端口进行锁定。
7.优选地,在本技术的串口数据精准传输的方法中,还包括:在开启接收端口的触发中断时,读取传输数据的当前数据并通过传输数据的当前数据触发接收端口释放自旋锁。
8.优选地,在本技术的串口数据精准传输的方法中,预设触发沿为下降沿。
9.优选地,在本技术的串口数据精准传输的方法中,预设时间间隔为1/v秒。其中v为传输数据的传输速率;和/或预设值为b-1,其中b为传输数据的数据帧总比特位数。
10.本发明还构造一种基于操作系统内核实现串口数据精准传输的方法,包括:基于操作系统配置gpio口以得到发射端口;
在通过处理器生成待传输数据时,触发处理器进入高性能模式;通过发射端口接收待传输数据,并获取自旋锁以对发射端口进行锁定;依照预设时间间隔输出待传输数据以通过接收端口接收该传输数据,直至输出所有待传输数据;释放发射端口的自旋锁,并设置处理器为历史工作模式。
11.优选地,在本发明的串口数据精准传输的方法中,预设时间间隔为1/v秒。其中v为待传输数据的传输速率;和/或待传输数据包括若干数据帧。
12.本发明还构造一种基于操作系统内核实现串口数据精准传输的装置,包括:第一配置单元,用于基于操作系统配置gpio口以得到接收端口,并设置接收端口在接收预设触发沿时触发中断;第一触发单元,用于在通过接收端口接收由发射端口生成的传输数据时,基于传输数据中的首个预设触发沿触发接收端口触发中断以进入数据接收模式;第二触发单元,用于在通过接收端口接收由发射端口生成的传输数据时,基于传输数据中的首个预设触发沿触发接收端口触发中断以进入数据接收模式;第一执行单元,用于关断接收端口的触发中断,并在读取到传输数据的当前数据时按照预设时间间隔读取传输数据的当前数据,对读取传输数据的当前数据的次数进行计数以获取累计计数;第二执行单元,用于在累计计数小于预设值时继续执行按照预设时间间隔读取传输数据的当前数据的步骤;或第二配置单元,用于基于操作系统配置gpio口以得到发射端口;第三触发单元,用于在通过处理器生成待传输数据时,触发处理器进入高性能模式;第三执行单元,用于通过发射端口接收待传输数据,并获取自旋锁以对发射端口进行锁定;第四执行单元,用于依照预设时间间隔输出待传输数据以通过接收端口接收该传输数据,直至输出所有待传输数据;第五执行单元,用于释放发射端口的自旋锁,并设置处理器为历史工作模式。
13.本发明还构造一种电子设备,包括存储器和处理器,存储器中存储有计算机程序,处理器通过调用存储器中存储的计算机程序,执行如上面任一项的串口数据精准传输的方法的步骤或如上面任意一项的串口数据精准传输的方法的步骤。
14.本发明还构造一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序适于处理器进行加载,以执行如上面任一项的串口数据精准传输的方法的步骤或如上面任意一项的串口数据精准传输的方法的步骤。
15.实施本发明的基于操作系统内核实现串口数据精准传输的方法和装置,具有以下有益效果:能实现gpio模拟串口的同时对低波特率数据能保证很低的误码率,能满足多种串口通讯需求场景。
附图说明
16.下面将结合附图及实施例对本发明作进一步说明,附图中:图1是本发明基于操作系统内核实现串口数据精准传输的方法一实施例的程序流程图;图2是本发明基于操作系统内核实现串口数据精准传输的方法另一实施例的程序流程图;图3是本发明基于操作系统内核实现串口数据精准传输的方法又一实施例的程序流程图;图4是本发明基于操作系统内核实现串口数据精准传输的装置一实施例的程序流程图;图5是本发明基于操作系统内核实现串口数据精准传输的装置又一实施例的程序流程图。
具体实施方式
17.为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
18.如图1所示,在本发明的一种基于操作系统内核实现串口数据精准传输的方法的一实施例中,主要对应为数据接收过程,包括步骤:s11、基于操作系统配置gpio口以得到接收端口,并设置接收端口在接收预设触发沿时触发中断。具体的,其中,系统内核可以理解为操作系统的核心部分,它由操作系统中用于管理存储器、文件、外设和系统资源组成,操作系统内核通常运行进程,并且提供进程间的通信,它管理着系统的各种资源,比如cpu、内存和网络通讯等。本发明中的操作系统可为linux、android或其他智能物联网操作系统。通过操作系统内核设置gpio(general-purpose input/output)口即通用输入输出接口为接收端口。该接收端口可以理解为基于数据传输格式进行设置的驱动程序。在本技术的一具体实施例中,以uart即串口数据为例,其中uart串口为通用异步收发器接口,通过编写或者设置驱动程序,将gpio口配置为uart串口数据的接收端口,用来接收uart串口数据。也可以理解为,通过软件对gpio口进行配置,使得其能够识别串口协议。此外,配置接收端口在预设触发沿时可以触发中断。即,接收端口的工作状态可以由预设触发沿触发改变。例如,接收端口可以设置为默认状态,在接收到预设触发沿时可以触发开始为对应的工作状态,如接收状态,这个时候可以开始接收数据。该默认状态也可以理解为接收端口为可以由外部触发进行工作的状态,也就是说当前接收端口没有被设置为不可触发的状态。
19.s12、在通过接收端口接收由发射端口生成的传输数据时,基于传输数据中的首个预设触发沿触发接收端口触发中断以进入数据接收模式。具体的,配置好的接收端口用来接收通过发射端口生成的传输数据。其中发射端口可以理解为用来发射串口数据的数据发射端口。接收端口通过接收的传输数据中的首个预设触发沿触发工作。即,当接收端口在处于默认状态的时候接收到传输数据时,传输数据中的预设数据位会设置预设触发沿触发接收端口进行状态切换。由于传输数据中由于数据变换可能存在多个预设触发沿,可以设置接收端口只对接收到的首个预设触发沿进行响应,根据该预设触发沿响应后触发中断进入中断处理模式。在接收端口进入中断处理模式时,接收端口结束当前默认状态并进入数据
接收模式。
20.s13、关断接收端口的触发中断,并在读取到传输数据的当前数据时按照预设时间间隔读取传输数据的当前数据,对读取传输数据的当前数据的次数进行计数以获取累计计数。具体的,当接收端口进入数据接收模式时,关断接收端口的触发中断功能,即此时接收端口不会再被后续的预设触发沿触发进行中断。接收端口此时能够一直保持在数据接收模式。在接收端口进入数据接收状态后,开始读取传输数据的当前数据。其可以理解为该当前数据为传输数据的某一特定的数据位。对读取过程进行计时,按照预设间隔依次读取数据,在一实施例中,其对数据的读取过程可以从传输数据的起始位开始,接收端口被触发后直接开始对其接收到的当前数据进行读取。在数据读取过程中,对读取动作进行计数。在一实施例中,预设时长为1/v秒。其中v为传输数据的传输速率。具体的,其中预设时长根据传输数据的传输速率设置。对串口数据,其传输速率可以为波特率,对串口数据的每一个数据位的数据提取间隔时间可以设置为(1/波特率)秒。即在一个数据提取过程中,可以通过轮询的方式提高等待时间的精度。
21.s14、在累计计数小于预设值时继续执行按照预设时间间隔读取传输数据的当前数据的步骤。具体的,由于传输数据的数据结构是可以预先设置的,因此实际上传输数据的数据长度是已知的。在一实施例中,数据长度即对应为数据位的数量,可以根据该数据位的数量设置预设值。在判断累计计数小于预设值时,判定该数据接收过程还没有完成,还需要进行数据接收,即需要重复读取传输数据并继续进行读取过程的累计计数。其简单的理解即为,重复对数据传输过程中的当前数据的读取,对每一数据读取过程进行计时,得到每一数据读取过程的读取结果。通过预设时间间隔设置保证每一数据位的读取准确。
22.在一实施例中,预设值为b-1,其中b为传输数据的总bit数。具体的,可以设置接收端口在得到的数据位倒数第二位的时候开启触发中断。即,传输数据的总bit数是已知的。当判定其接收的数据不够目标bit数时,其继续重复接收过程。
23.可选的,如图2所示,在本发明的基于操作系统内核实现串口数据精准传输的方法中,还包括:s15、在累计计数等于预设值时,开启接收端口的触发中断。具体的,当数据读取过程完成到预设的目标进度后,即累计计数等于预设值时,其可以开启接收端口的触发中断,使得该接收端口可以被接收到的触发条件进行触发。例如可以再次被预设触发沿触发中断当前的工作。对串口数据,其最后为结束位,在读取到结束位之前即可以释放接收端口的触发中断,使得接收端口处于可以被触发中断状态。
24.可选的,在本发明的基于操作系统内核实现串口数据精准传输的方法中,还包括:在关断接收端口的触发中断时,获取自旋锁以对接收端口进行锁定。具体的,在关断接收端口的触发中断时,可以通过获取自旋锁使得接收端口能够对处理器的处理资源进行锁定,使得处理器能够优先处理接收端口的接收数据。提高数据接收过程的可靠性。在一实施例中,自旋锁为cpu模块的spin-lock。其中,spin-lock即对应自旋锁,在内核里面加上spin-lock相当于可以关闭本地cpu抢占和关闭本地cpu中断,达到禁止本地cpu中断、禁止本程序被抢占,也就是说本程序在获取自旋锁后,能够一直占用cpu。由于如果没有禁止本地cpu中断和进程抢占,发送数据的时候,本进程就可能被抢占掉,只能去排队再次等待,这样子会导致发送每个bit数据的时候,时间就不能精确保证,也就是波特率不能保证,也就是导致接收方不能正确接收到正确的数据了,已经不符合串口协议了。获取自旋锁的方式可以为
获取cpu模块的spin-lock。其中cpu模块可以为任意处理模块。
25.可选的,在本发明的基于操作系统内核实现串口数据精准传输的方法中,还包括:在开启接收端口的触发中断时,读取传输数据的当前数据并通过传输数据的当前数据触发接收端口释放自旋锁。具体的,在开启接收端口的触发中断时,可以同时释放对处理器的占用,即释放自旋锁。该释放自旋锁的过程可以通过接收的当前数据进行触发。且可以理解,设置接收端口在一特定数据位时开启触发中断,并通过另一特定数据位触发接收端口释放自旋锁。在一实施例中,上述的两个特定数据位可以相同也可以不同。最终可以得到传输数据的所有数据位对应的得到整个传输数据。此外,接收端口在开启触发中断后,其可以在接收下一个数据帧时再次进行触发中断并执行触发中断后的数据接收过程。
26.可选的,在本发明的基于操作系统内核实现串口数据精准传输的方法中,预设触发沿为下降沿;即,通过下降沿触发接收端口触发中断。可以理解,由于串口数据的起始位通常为低电平,因此,接收端口在开始接收串口数据时,其最先会生成下降沿,即接收端口从高电平变为低电平时触发中断,准备接收数据,通过该下降沿触发接收端口的工作状态即可。
27.在一实施例中,对一个8bit位的串口数据(包括起始位和结束位),在进入起始位时触发接收端口进入触发中断,并在接收端口进入触发中断后关断接收端口的触发中断功能,此时接收端口一直处于接收状态,开始读取起始位的数据,并在间隔预设时长后读取后面的数据直到得到7个bit的数据,并在得到7个bit的数据后,开始接收端口的触发中断,同时读取第8个bit的数据,最终得到8个bit数据。
28.另,如图3所示,本发明的一种基于操作系统内核实现串口数据精准传输的方法,主要用于数据发送过程,包括步骤:s21、基于操作系统配置gpio口以得到发射端口;具体的,通过操作系统例如linux系统设置gpio口为发射端口,该发射端口可以理解为基于数据传输格式进行设置的驱动程序。在本技术的一具体实施例中,以uart串口数据为例,通过设置驱动程序,将gpio口配置为uart串口数据的发射端口,用来发射uart串口数据。也可以理解为,通过软件对gpio口进行配置,使得其能识别串口协议,以使得能对串口数据进行传输。
29.s22、在通过处理器生成待传输数据时,触发处理器进入高性能模式。具体的,在发射端口配置完成后,处理器可以根据需要生成对应的待传输数据,同时触发处理器进入高性能模式。当前处理一般都会有各种性能模式、平衡模式、低功耗模式之分。当设置处理器例如cpu进入高性能模式时,可以使得cpu跑更高的频率或者更多cpu core投入运行之中。在一些实施例中,为了省电或者防止cpu过热 ,对cpu一般进行高性能模式、平衡模式、低功耗模式等等之分,高性能代表cpu跑更高的频率或者更多cpu core在运行中,也就是工作效率更快。
30.s23、通过发射端口接收待传输数据,并获取自旋锁以对发射端口进行锁定。具体的,在处理器进入高性能模式后,通过处理器发送待传输数据至发射端口,发射端口接收该待传输数据时,从处理器获取自旋锁对发射端口进行锁定,使得发射端口能够抢占处理器的更多资源,使得该数据传输过程更稳定,不易发生中断。
31.s24、依照预设时间间隔输出待传输数据以通过接收端口接收该传输数据,直至输出所有待传输数据。具体的,发射端口通过按照预设时间间隔依次输出待传输数据,接收端
口即可以接收该传输数据,并根据需要对该传输数据进行处理。
32.s25、释放发射端口的自旋锁,并设置处理器为历史工作模式。具体的,在发射端口发射完所有的待传输数据后,释放其获取的自旋锁,以释放处理器资源,并使得处理器恢复到历史工作模式。其可以理解,在处理器根据待传输数据触发处理器进入高性能模式时,会对其当前工作模式进行保存,一旦与待传输数据相关的高性能模式结束后,其就会以当前工作模式(即对应为历史工作模式)工作。
33.可选的,自旋锁为处理器的spin-lock;具体的,获取自旋锁的方式可以为获取cpu模块的spin-lock。其中cpu模块可以为任意处理器。
34.可选的,预设时间间隔为1/v秒。其中v为待传输数据的传输速率。具体的,其中预设时间间隔根据传输数据的传输速率设置。对串口数据,其传输速率可以为波特率,对串口数据的每一个数据位的数据发送间隔时间可以设置为(1/波特率)秒。即在一个数据发射过程中,可以通过轮询的方式提高等待时间的精度。其中,轮询过程可以通过执行空代码来进行计时。因为linux内核里面的定时接口依赖于系统的定时器,如果没有高实时的硬件定时器,系统的定时器会存在定时误差。测试系统高精度定时器几十到几百微妙的误差,这个误差跟系统负载也有相关性。
35.可选的,待传输数据包括若干数据帧。具体的,处理器生成的待传输数据可以为多个数据帧。例如,发射端口对每一帧的数据中,每一数据位按照预设间隔时间进行间隔发送。其在判断数据是否发射完成时,是基于处理器生成的整个待处理数据是否发射完成进行判断。
36.另,如图4所示,在一实施例中,本技术的一种基于操作系统内核实现串口数据精准传输的装置,包括:第一配置单元110,用于基于操作系统配置gpio口以得到接收端口,并设置所述接收端口在接收预设触发沿时触发中断;第一触发单元120,用于在通过所述接收端口接收由发射端口生成的传输数据时,基于所述传输数据中的首个所述预设触发沿触发所述接收端口触发中断以进入数据接收模式;第二触发单元130,用于在通过所述接收端口接收由发射端口生成的传输数据时,基于所述传输数据中的首个所述预设触发沿触发所述接收端口触发中断以进入数据接收模式;第一执行单元140,用于关断所述接收端口的触发中断,并在读取到所述传输数据的当前数据时按照预设时间间隔读取所述传输数据的当前数据,对读取所述传输数据的当前数据的次数进行计数以获取累计计数;第二执行单元150,用于在所述累计计数小于预设值时继续执行所述按照所述预设时间间隔读取所述传输数据的当前数据的步骤;即构造一种基于操作系统内核实现串口数据精准接收的装置100实现数据的接收。其各单元之间具体的配合操作过程可以参照上述的基于操作系统内核实现串口数据精准传输的方法。
37.另,如图5所示,在一实施例中,本技术的一种基于操作系统内核实现串口数据精准传输的装置,包括:
第二配置单元210,用于基于操作系统配置gpio口以得到发射端口;第三触发单元220,用于在通过处理器生成待传输数据时,触发所述处理器进入高性能模式;第三执行单元230,用于通过所述发射端口接收所述待传输数据,并获取自旋锁以对所述发射端口进行锁定;第四执行单元240,用于依照预设时间间隔输出所述待传输数据以通过接收端口接收该传输数据,直至输出所有所述待传输数据;第五执行单元250,用于释放所述发射端口的自旋锁,并设置所述处理器为历史工作模式。
38.即构造一种基于操作系统内核实现串口数据精准发送的装置200实现数据的发送。其各单元之间具体的配合操作过程可以参照上述的基于操作系统内核实现串口数据精准传输的方法。
39.本发明的一种电子设备,包括存储器和处理器;存储器用于存储计算机程序;处理器用于执行计算机程序实现如上面任意的串口数据精准传输的方法的步骤或者串口数据精准传输的方法的步骤。具体的,根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过电子设备下载和安装并且执行时,执行本发明实施例的方法中限定的上述功能。本发明中的电子设备可为笔记本、台式机、平板电脑、智能手机等终端,也可为服务器。
40.另,本发明的一种计算机存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上面任意一项的串口数据精准传输的方法的步骤或者串口数据精准传输的方法的步骤。具体的,需要说明的是,本发明上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于是电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。
41.上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
42.可以理解的,以上实施例仅表达了本发明的优选实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制;应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,可以对上述技术特点进行自由组合,还可以做出若干变形和改进,这些都属于本发明的保护范围;因此,凡跟本发明权利要求范围所做的等同变换与修饰,均应属于本发明权利要求的涵盖范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献