一种利用时间碎片进行串口数据传输的方法技术

技术编号:37476144 阅读:25 留言:0更新日期:2023-05-07 09:17
本发明专利技术公开了一种利用时间碎片进行串口数据传输的方法,创建环形内存缓冲区A,将环形内存缓冲区平均分成N块,每块缓冲区按照顺序编号分别为A

【技术实现步骤摘要】
一种利用时间碎片进行串口数据传输的方法


[0001]本专利技术涉及一种利用时间碎片进行串口数据传输的方法。

技术介绍

[0002]串口数据传输是嵌入式数据传输中一种非常普遍的方式,现有的串口通信方法,大多采用的是等待发送、不断查询的方式,如图1所示,先创建一个缓冲区,指针变量P0指向发送缓冲区,把需要发送的数据写入缓冲区,并且统计需要发送的数据长度写入L0中,当L0不等于0时,随即启动数据发送,P0指向下一个待发送数据的地址,当串口空闲时,将待发送的第一个数据写入数据寄存器,L0减1,系统进入下一个数据发送的死循环,一直到串口处于空闲状态时,再发送下一个数据,以此循环,直到全部数据发送完成之后,才退出数据发送,执行下一段程序代码。在此过程中,无法对缓冲区执行写数据,必须等待数据全部发送完成之后才能重新对缓冲区填充新的数据。整个过程中,程序有一段时间会处于等待发送状态,执行任务单一且效率低、实时性差,尤其是在频繁利用串口进行日志传输的场景中,缺点更加突出。

技术实现思路

[0003]针对上述问题,本专利技术提供一种利用时间碎片进行串口数据传输的方法,设计环形缓冲区且缓冲区分块化,采用串口发送中断方式将数据发送出去的方法,在数据发送的同时,也可执行写数据或系统其它任务,从而显著地提高了程序的执行效率,避免了程序无效的等待时间,尤其适合高速、频繁进行日志传输的操作、系统实时性要求较高的多任务场景。
[0004]为实现上述技术目的,达到上述技术效果,本专利技术通过以下技术方案实现:
[0005]一种利用时间碎片进行串口数据传输的方法,包括下述步骤:
[0006]S1、创建环形内存缓冲区并分块化:
[0007]创建环形内存缓冲区A,将环形内存缓冲区平均分成N块,每块缓冲区按照顺序编号分别为A
x
,每块缓冲区创建一个长度变量L
x
统计该块需要发送的数据长度,每块缓冲区均创建一个指针P
x
指向该块的起始地址,X=1、2....N,设当前发送的是第A
C
块缓冲区的数据,第A
C
块中还有L0个数据需要发送,当前发送数据的地址为发送指针P0指向的地址;
[0008]S2、当需要进行数据发送时,具体包括如下步骤:
[0009]S201、当发送第A
C
块中第一个数据时:
[0010]201

1、判断第A
C
块中待发送数据长度是否大于0,若是则进入步骤201

2,若否则结束;
[0011]201

2、发送指针P0指向A
C
块的首地址P
c
,发送计数器L0=L
c

[0012]201

3、将发送指针P0指向的数据写入发送数据寄存器发送出去;
[0013]201

4、更新L0为(L0‑
1),更新P0为(P0+1),打开串口的发送中断,之后进入步骤S202利用串口发送中断发送剩余数据;
[0014]S202、当发送第A
C
块中剩余数据时:
[0015]202

1、判断发送计数器L0是否等于0,若不等于0,则进入步骤202

2,否则关闭串口的发送中断;
[0016]202

2、将发送指针P0指向的数据写入发送数据寄存器发送出去;
[0017]202

3、更新L0为(L0‑
1),更新P0为(P0+1);
[0018]202

4、进入步骤202

1。
[0019]优选,设数据下一次将在第A
u
块中填充,当需要向环形内存缓冲区写入数据时:
[0020]A、根据本次需要填充的数据长度,计算缓冲区需要填充的块数,进入步骤B;
[0021]B、开始在第A
u
块缓冲区进行数据填充并将所填充的数据长度写入该块对应的长度变量L
U
中,进入步骤C;
[0022]C、更新A
u
为A
u+1
,进入步骤D;
[0023]D、判断U是否大于N,若是进入步骤E,若否进入步骤F;
[0024]E、更新A
u
为A1,进入步骤F;
[0025]F、本次已填充块数是否等于需要填充的块数,若是则结束,若否则进入步骤B。
[0026]优选,步骤202

1中,关闭串口的发送中断后,进入步骤202

5;
[0027]202

5、清空第A
C
块需要发送的数据长度为0,更新A
C
为A
C+1
,判断C是否大于N,若否,则进入步骤201

1;若是,则更新A
C
为A1,进入步骤201

1。
[0028]优选,N取值为10

30之间。
[0029]优选,N取值为20。
[0030]优选,Q取值为50

200字节。
[0031]优选,设每块缓冲区的内存大小为Q,则Q取值为100字节。
[0032]本专利技术的有益效果是:
[0033]本专利技术自动利用时间碎片自行进行串口数据发送,避免了无效的等待时间,相当于本专利技术将原来串口等待的时间利用起来做其它任务,可以实现显著提高程序的执行效率,避免了程序的等待时间。本专利技术采用了非死循环的分块处理,因此采用该方法可以一边发送串口数据,一边进行待发送数据的填充,并且能同时执行程序的其它任务,极大地提高了程序的效率。
附图说明
[0034]图1是本专利技术传统的串口数据发送的流程图;
[0035]图2是本专利技术环形缓冲区的分块示意图;
[0036]图3是本专利技术缓冲区数据填充的流程图;
[0037]图4是本专利技术发送第一个字节数据的流程图;
[0038]图5是本专利技术串口中断发送数据的流程图。
具体实施方式
[0039]下面结合附图和具体的实施例对本专利技术技术方案作进一步的详细描述,以使本领域的技术人员可以更好的理解本专利技术并能予以实施,但所举实施例不作为对本专利技术的限定。
[0040]一种利用时间碎片进行串口数据传输的方法,包括下述步骤:
[0041]S01、创建环形内存缓冲区并分块化:
[0042]创建环形内存缓冲区A,将环形内存缓冲区平均分成N块,每块缓冲区按照顺序编号分别为A
x
,每块缓冲区创建一个长度变量L
x
统计该块需要发送的数据长度,每块缓冲区均创建一个指针P
x
指向该块的起始地址,X=1、2本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种利用时间碎片进行串口数据传输的方法,其特征在于,包括下述步骤:S1、创建环形内存缓冲区并分块化:创建环形内存缓冲区A,将环形内存缓冲区平均分成N块,每块缓冲区按照顺序编号分别为A
x
,每块缓冲区创建一个长度变量L
x
统计该块需要发送的数据长度,每块缓冲区均创建一个指针P
x
指向该块的起始地址,X=1、2....N,设当前发送的是第A
C
块缓冲区的数据,第A
C
块中还有L0个数据需要发送,当前发送数据的地址为发送指针P0指向的地址;S2、当需要进行数据发送时,具体包括如下步骤:S201、当发送第A
C
块中第一个数据时:201

1、判断第A
C
块中待发送数据长度是否大于0,若是则进入步骤201

2,若否则结束;201

2、发送指针P0指向A
C
块的首地址P
c
,发送计数器L0=L
c
;201

3、将发送指针P0指向的数据写入发送数据寄存器发送出去;201

4、更新L0为(L0‑
1),更新P0为(P0+1),打开串口的发送中断,之后进入步骤S202利用串口发送中断发送剩余数据;S202、当发送第A
C
块中剩余数据时:202

1、判断发送计数器L0是否等于0,若不等于0,则进入步骤202

2,否则关闭串口的发送中断;202

2、将发送指针P0指向的数据写入发送数据寄存器发送出去;202

3、更新L0为(L0‑
1),更新P0为(P0+1);202

4、进...

【专利技术属性】
技术研发人员:谢华李春檀葱乔岩孙飞
申请(专利权)人:北京锐星远畅科技有限公司
类型:发明
国别省市:

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

1