一种SPARC平台减少中断响应抖动的技术制造技术

技术编号:10316176 阅读:203 留言:0更新日期:2014-08-13 17:36
本发明专利技术公开了一种SPARC平台减少中断响应抖动的技术,步骤如下:1)建立SPARC平台原子交换函数;2)实现内核路径上写全局变量访问操作的中断响应抖动减少技术;3)全局队列访问操作的中断响应抖动减少技术;4)全局堆栈访问操作的中断响应抖动减少技术。本发明专利技术可以保证对全局变量以及全局队列、全局堆栈等数据结构的读写访问的一致性,而且所有临界区都由7条SPARC平台的汇编指令组成,关中断的时间短且固定,能减少中断响应的抖动,并提高平均中断响应时间,减少外部中断的丢失。

【技术实现步骤摘要】
一种SPARC平台减少中断响应抖动的方法
本专利技术属于嵌入式实时操作系统领域,具体地说,涉及一种SPARC平台减少中断响应抖动的方法。
技术介绍
SPARC是一种开源的RISC处理器架构技术,在国内广泛的应用在航天领域。同时,随着航天任务的复杂化,嵌入式实时操作系统在航天领域的应用也越来越广泛。在嵌入式实时操作系统运行过程中,有两条最重要且执行最频繁的内核路径:任务切换路径和中断处理路径。在这两条路径上有大量对全局变量及全局数据结构进行读写的操作,为保证全局数据的一致性,现有的嵌入式实时操作系统通常采用关中断的方法确保多个任务对共享资源的互斥访问。现有技术存在的主要问题:1、采用关中断方法保护的临界区,通常是由C语言实现的对全局变量及全局数据结构进行读写的操作,这些代码长短不一(如使用GCC3.4.4不做优化,对代码进行编译,对全局变量进行写的临界区有10条汇编指令,队列插入操作的临界区有31条汇编指令,队列删除操作的临界区有25条汇编指令),导致不同临界区执行时间不同。另外临界区的代码强烈依赖编译器,不同编译器或同一编译器的不同配置,都有可能导致临界区代码执行时间的变化(如使用GCC3.4.4–O2级优化对代码进行编译,对全局变量进行写的临界区有6条汇编指令,队列插入操作的临界区有15条汇编指令,队列删除操作的临界区有17条汇编指令)。如下图所示,临界区代码的长度不同,对中断响应的延迟也就不同,这会造成中断响应的延迟在不同的区间抖动,最终导致由中断触发的周期任务调度的抖动,这对实时性要求高的应用(如运动控制)的稳定性、可靠性都会造成负面影响。2、另外如果关中断的时间过长,会造成系统对外部事件反应迟钝,对多数实时系统而言,这会影响系统的中断响应时间,使得系统的实时性得不到保证;另外频繁的关中断可能变更整个系统的时序,带来的副作用包括丢失外部事件和时钟漂移。
技术实现思路
本专利技术要解决的技术问题是克服上述缺陷,提供一种保证对全局变量以及全局队列、全局堆栈等数据结构的读写访问的一致性,而且所有临界区都由7条SPARC平台的汇编指令组成,关中断的时间短且固定,能减少中断响应的抖动,并提高平均中断响应时间,减少外部中断的丢失的SPARC平台减少中断响应抖动的方法。为解决上述问题,本专利技术所采用的技术方案是:一种SPARC平台减少中断响应抖动的方法,步骤如下:1)、建立SPARC平台原子交换函数;2)、实现内核路径上写全局变量访问操作的中断响应抖动减少技术;3)、全局队列访问操作的中断响应抖动减少技术;4)、全局堆栈访问操作的中断响应抖动减少技术。作为一种改进,所述建立SPARC平台原子交换函数的算法如下:使用SPARC汇编指令实现了原子交换函数,该函数共由7条指令组成,其原型如下:intatomic_swap(intoldval,int*p_var,intnewval)返回值为int型,变量oldval存储某一全局变量修改前的值,指针p_var指向该全局变量,而变量newval存储将赋给该全局变量的值,返回0值表示用新值对全局变量原先的值进行了替换,返回非0值,表示未用新值对全局变量原先的值进行替换;所述原子交换函数的算法如下:1)、快速关中断;2)、将oldval和p_var指向的地址处的值相减,将结果填入存放返回值的寄存器,如果为0,则继续执行第3步,如果不为0,则跳转到第4步;3)、将newval的值赋给p_var指向的地址;4)、打开中断,函数返回。作为一种改进,所述实现内核路径上写全局变量访问操作的中断响应抖动减少技术的函数原型如下:voidwrite_global(int*pglb,intnew)其中变量pglb指向要进行写操作的全局变量的地址,变量new指向将要写入全局变量的值;所述实现内核路径上写全局变量访问操作的中断响应抖动减少技术算法如下:1)、取出指针pglb指向的全局变量的值,赋给临时变量temp;2)、调用原子交换函数,格式为atomic_swap(temp,pglb,new);3)、如果原子交换函数返回值不为0,则调转到第1步;如果返回值为0,则函数退出。作为一种改进,所述全局队列访问操作的中断响应抖动减少技术首先是插入节点操作,其函数原型如下:voidinsert_queue(Node*pnew_node,constint&data,Queue*pqueue)队列是先进先出的数据结构,插入操作总是在队列尾进行,所以第一个参数给出了将插入节点的指针,第二个参数给出了新节点中存储的数据,第三个参数是队列指针;所述全局队列访问操作的中断响应抖动减少技术算法如下:1)、将新节点数据域赋值为data,指针域赋值为null;2)、将当前队尾节点赋值给临时变量old_tail,并将old_tail指针域指向新创建的节点;3)、调用原子交换函数,格式为atomic_swap(old_tail,&(pqueue->tail),pnew_node);4)、如果原子交换函数返回值不为0,则跳转到第2步;如果返回值为0,则函数退出。队列的删除操作在队列头进行,其函数原型如下:Node*delete_queue(Queue*pqueue)其中变量pqueue为指向队列的指针;其队列的删除操作算法如下:1)、取出当前队列的头指针,赋值给临时变量old_head;2)、将old_head的指针域赋给临时变量pnext;3)、调用原子交换函数,格式为atomic_swap(old_head,&(pqueue->head),pnext);4)、如果原子交换函数返回值不为0,则跳转到第1步;如果返回值为0,则返回old_head,函数退出。作为一种改进,所述全局堆栈访问操作的中断响应抖动减少技术,其原型为:voidpush(Node*pnode,constint&data,stack*pstack)第一个参数是指向将插入的节点的指针,第二个参数data为待压入节点数据域存储的数据,第三个参数为指向栈的指针;所述全局堆栈访问操作的中断响应抖动减少技术的算法如下:1)、将pnode数据域赋值为data;2)、用临时变量old_top记录当前栈顶节点的指针;3)、pnode的指针域指向old_top;4)、调用原子交换函数,其格式为atomic_swap(old_top,&(pstack->top),pnode);5)、如果原子交换函数返回值不为0,则跳转到第1步;如果返回值为0,则函数退出;出栈操作的原型如下:Node*pop(stack*pstack)唯一的一个参数为指向栈的指针,出栈操作的算法如下:1)、用临时变量old_top记录当前栈顶指针;2)、将old_top的指针域赋值给临时变量pnode;3)、调用原子交换函数,其格式为atomic_swap(old_top,pstack->top,pnode);4)、如果原子交换函数返回值不为0,则跳转到第1步;如果返回值为0,则返回old_top,函数退出。由于采用了上述技术方案,与现有技术相比,本专利技术可以保证对全局变量以及全局队列、全局堆栈等数据结构的读写访问的一致性,而且所有临界区都由7条SP本文档来自技高网
...
一种<a href="http://www.xjishu.com/zhuanli/55/201410060974.html" title="一种SPARC平台减少中断响应抖动的技术原文来自X技术">SPARC平台减少中断响应抖动的技术</a>

【技术保护点】
一种SPARC平台减少中断响应抖动的技术,其特征在于:步骤如下:1)、建立SPARC平台原子交换函数;2)、实现内核路径上写全局变量访问操作的中断响应抖动减少技术;3)、全局队列访问操作的中断响应抖动减少技术;4)、全局堆栈访问操作的中断响应抖动减少技术。

【技术特征摘要】
1.一种SPARC平台减少中断响应抖动的方法,其特征在于:步骤如下:1)、建立SPARC平台原子交换函数;2)、减少内核路径上写全局变量访问操作的中断响应抖动;3)、减少全局队列访问操作的中断响应抖动;4)、减少全局堆栈访问操作的中断响应抖动,其中:步骤1)中的建立SPARC平台原子交换函数的算法如下:使用SPARC汇编指令实现了原子交换函数,该函数共由7条指令组成,其原型如下:intatomic_swap(intoldval,int*p_var,intnewval)返回值为int型,变量oldval存储某一全局变量修改前的值,指针p_var指向该全局变量,而变量newval存储将要赋给该全局变量的值,返回0值表示用新值对全局变量原先的值进行了替换,返回非0值,表示未用新值对全局变量原先的值进行替换;所述原子交换函数的算法如下:11)、快速关中断;12)、将oldval和p_var指向的地址处的值相减,将结果填入存放返回值的寄存器,如果为0,则继续执行步骤13),如果不为0,则跳转到步骤14);13)、将newval的值赋给p_var指向的地址;14)、打开中断,函数返回;减少内核路径上写全局变量访问操作的中断响应抖动的函数原型如下:voidwrite_global(int*pglb,intnew)其中变量pglb指向要进行写操作的全局变量的地址,变量new指向将要写入全局变量的值;减少内核路径上写全局变量访问操作的中断响应抖动的算法如下:21)、取出指针pglb指向的全局变量的值,赋给临时变量temp;22)、调用原子交换函数,格式为atomic_swap(temp,pglb,new);23)、如果原子交换函数返回值不为0,则调转到步骤21);如果返回值为0,则函数退出;减少全局队列访问操作的中断响应抖动首先是插入节点操作,其函数原型如下:voidinsert_queue(Node*pnew_node,constint&data,Queue*pqueue)队列是先进先出的数据结构,插入操作总是在队列尾进行,所以第一个参数给出了将要插入节点的指针,第二个参数给出了新节点中存储的数据,第三个参数是队列指针;减少全局队列访问操作的中断响应抖动的算法如下:31)、将新节点数据域赋值为data,指针域赋值为null;32)、...

【专利技术属性】
技术研发人员:卓保特周启平吕紫旭赵英辉
申请(专利权)人:北京神舟航天软件技术有限公司
类型:发明
国别省市:北京;11

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

1