一种程序间数据实时交换方法和电子设备技术

技术编号:38998296 阅读:14 留言:0更新日期:2023-10-07 10:30
本发明专利技术提供了一种程序间数据实时交换方法和电子设备,可用于嵌入式软件用户程序和中断程序之间,或两个用户程序之间的数据交换。与其他需要关闭全局中断的队列的实现方法不同,该方法得优点在于通过错误安全的设计,解决了在关闭全局中断和开启全局中断的时间内,软件在无法响应中断信号,而产生某种软件错误,或导致的某些灾难性的后果的问题。因此,可降低软件运行的风险,提高软件的运行的可靠性。性。性。

【技术实现步骤摘要】
一种程序间数据实时交换方法和电子设备


[0001]本申请涉及单核嵌入式实时软件编程的
,特别是一种程序间数据实时交换方法和电子设备,例如用于单核微控制器的程序间数据实时交换。

技术介绍

[0002]随着芯片技术的快速发展,微控制器在军工民用领域得到了广泛的应用和发展。在无人机、无人车、等自动化机器人对实时性要求高的应用领域中,系统的实时性成为了不可忽略的系统指标之一,从而也孕育出一些优秀的嵌入式实时操作系统,如μc/os III、FreeRTOS等。这些操作系统为了保证用户程序与中断程序的临界变量免受意外中断修改的影响,在涉及这些变量的操作时,会关闭芯片的全局中断,待临界变量处理完成后,打开全局中断。虽然,关闭和打开全局中断的时间非常短,但是在此期间,如果外部设备有中断发生,系统将无法进行响应,无法读取外部设备的数据,严重时将导致重大安全问题,造成经济损失。因此上述操作系统提供的方案存在一定的安全隐患。

技术实现思路

[0003]本申请基于在临界区内进行最小数据操作和交换,和错误安全的思想,提出一种用于单核微控制器软件的实时队列方法,该方法允许在不关闭微控制器全局中断的前提下,实现微控制器与外部设备之间的数据通信,并保证数据的完整性,和系统运行的安全性。方法的特征在于为每一个交互方向上的数据提供一个专门的队列用于数据读写,其中写数据发生在中断程序内,读数据发生在用户程序内,并且最小化了对临界变量的交互操作和关键变量的更新操作。
[0004]第一方面,提供了一种数据实时交换方法,包括:r/>[0005]中断程序从外部设备获取数据,并将数据写入队列中,wcnt变量用于指示队列中最新写入数据的位置,wcnt变量为临界变量;
[0006]用户程序读取队列中的数据,包括:
[0007]步骤(1),执行wcnt赋值到wcntp的过程,wcntp变量用于指示队列中数据未被读取过数据的位置,且在wcnt赋值到wcntp的过程中不关闭全局中断,使wcnt能够被持续更新;
[0008]步骤(2),根据wcntp读取队列中写入的数据。
[0009]结合第一方面,在第一方面的某些实现方式中,所述方法还包括:
[0010]所述步骤(2)执行完毕后,wcntp指示队列中数据均被读取,用户程序返回执行步骤(1)。
[0011]结合第一方面,在第一方面的某些实现方式中,队列的关键参数包括:
[0012]队列元素个数:len,常值;
[0013]队列单个元素的大小:size,常值,单位为:字节;
[0014]队列内存区域的起始地址:pdata,常值;
[0015]当前队列写位置:wcnt,关键变量,初始值为0;
[0016]当前队列读位置:rcnt,关键变量,初始值为0。
[0017]结合第一方面,在第一方面的某些实现方式中,数据写入队列,包括:
[0018]计算要写入的元素在队列中的标号i,令i等于wcnt与len的余数;
[0019]将数据写入队列中第i个元素;
[0020]更新wcnt的值,令wcnt等于wcnt加1。
[0021]结合第一方面,在第一方面的某些实现方式中,根据wcntp读取队列中写入的数据,包括:
[0022]步骤(2.1),判断队列中是否有未被读取的数据,rcnt小于wcntp表示有未被读取的数据,如果是,则执行步骤(2.2),如果否则结束读取;
[0023]步骤(2.2),计算要读取的元素在队列中的标号j,令标号j等于rcnt与len的余数,120e,如果队列中第j个元素中有数据,则读取第j个元素中的数据并清空该元素数据,进入步骤(2.3),否则直接进入步骤(2.3);
[0024]步骤(2.3),更新读位置rcnt的值,令rcnt等于rcnt加1。
[0025]结合第一方面,在第一方面的某些实现方式中,在执行步骤(2.2)之前,所述方法还包括:
[0026]判断当前队列的读位置rcnt是否有效,如果有效,则执行步骤(2.2),如果无效,则在更新rcnt的值后,进入步骤(2.2)。
[0027]结合第一方面,在第一方面的某些实现方式中,所述判断当前队列的读位置rcnt是否有效,包括:
[0028]当wcntp

rcnt<len时,为有效;
[0029]当wcntp

rcnt≥len时,为无效。
[0030]结合第一方面,在第一方面的某些实现方式中,当前队列的读位置rcnt无效后更新rcnt的值,包括:
[0031]令rcnt=wcntp

len+1。
[0032]结合第一方面,在第一方面的某些实现方式中,数据读取的频率不低于写入频率的2倍。
[0033]第二方面,提供了一种电子设备,所述电子设备配置有中断程序和用户程序,所述电子设备用于执行如上述第一方面中的任意一种实现方式中所述的方法。
[0034]与现有技术相比,本申请提供的方案至少包括以下有益技术效果:
[0035]在不关闭微控制器全局中断的前提下,该方法解决了在关闭全局中断和开启全局中断的时间内,软件处于无法响应中断的状态中,存在产生某种软件错误,或导致的某些灾难性的后果的问题,从而降低软件运行的风险,提高软件的运行的可靠性。该方法为每一个交互方向上的数据提供一个专门的队列用于数据读写,其中写数据发生在中断程序内,读数据发生在用户程序内。该方法最小化了对临界变量的交互操作和关键变量的更新操作,并设计了因中断原因导致数据不一致时的操作方法,从而使数据通信不受到中断的影响,实现微控制器与外部设备之间的数据通信,并保证数据的完整性,和系统运行的安全性。
附图说明
[0036]图1为本申请实施例提供的一种程序间数据实时交换方法的示意性流程图。
具体实施方式
[0037]下面结合附图和具体实施例对本申请作进一步详细的描述。
[0038]图1示出了本申请实施例提供的一种程序间数据实时交换方法。具体步骤如下。
[0039]110,中断程序从外部设备获取数据,并将数据写入队列中,wcnt变量用于指示队列中最新写入数据的位置。
[0040]在外部设备产生数据中断后,微控制器进入相应的中断程序,以执行步骤110。中断程序读取外部设备对应端口上的数据,并将数据写入队列中。
[0041]队列例如可以是内存中的空间。队列的关键参数例如如下:(1)队列元素个数:len(常值);(2)队列单个元素的大小:size(常值,单位为:字节)(3)队列内存区域的起始地址:pdata(常值);(4)当前队列写位置:wcnt(关键变量,初始值为0);(5)当前队列读位置:rcnt(关键变量,初始值为0。
[0042]队列元素个数len和元素可以根据需要交互数据的内容大小和频率确定。当前队列写位置wcnt和当前队列读位置rcnt本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种程序间数据实时交换方法,其特征在于,包括:中断程序从外部设备获取数据,并将数据写入队列中,wcnt变量用于指示队列中最新写入数据的位置,wcnt变量为临界变量;用户程序读取队列中的数据,包括:步骤(1),执行wcnt赋值到wcntp的过程,wcntp变量用于指示队列中数据未被读取过数据的位置,且在wcnt赋值到wcntp的过程中不关闭全局中断,使wcnt能够被持续更新;步骤(2),根据wcntp读取队列中写入的数据。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:所述步骤(2)执行完毕后,wcntp指示队列中数据均被读取,用户程序返回执行步骤(1)。3.根据权利要求1所述的方法,其特征在于,队列的关键参数包括:队列元素个数:len,常值;队列单个元素的大小:size,常值,单位为:字节;队列内存区域的起始地址:pdata,常值;当前队列写位置:wcnt,关键变量,初始值为0;当前队列读位置:rcnt,关键变量,初始值为0。4.根据权利要求1所述的方法,其特征在于,数据写入队列,包括:计算要写入的元素在队列中的标号i,令i等于wcnt与len的余数;将数据写入队列中第i个元素;更新wcnt的值,令wcnt等于wcnt加1。5.根据权利要求1所述的方法,其特征在于,根据wcntp读取队列中写入的数据,包括:步骤(2.1),判断队列中是否有未被读取的数据,rcnt小于wc...

【专利技术属性】
技术研发人员:吕腾李海兵孙宁郭子伟丁昊唐文浩李海虎韩若曦
申请(专利权)人:北京航天控制仪器研究所
类型:发明
国别省市:

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

1