CN103984537B - 一种sparc平台减少中断响应抖动的方法 - Google Patents
一种sparc平台减少中断响应抖动的方法 Download PDFInfo
- Publication number
- CN103984537B CN103984537B CN201410060974.9A CN201410060974A CN103984537B CN 103984537 B CN103984537 B CN 103984537B CN 201410060974 A CN201410060974 A CN 201410060974A CN 103984537 B CN103984537 B CN 103984537B
- Authority
- CN
- China
- Prior art keywords
- queue
- global
- variable
- pointer
- 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.)
- Active
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种SPARC平台减少中断响应抖动的技术,步骤如下:1)、建立SPARC平台原子交换函数;2)、实现内核路径上写全局变量访问操作的中断响应抖动减少技术;3)、全局队列访问操作的中断响应抖动减少技术;4)、全局堆栈访问操作的中断响应抖动减少技术。本发明可以保证对全局变量以及全局队列、全局堆栈等数据结构的读写访问的一致性,而且所有临界区都由7条SPARC平台的汇编指令组成,关中断的时间短且固定,能减少中断响应的抖动,并提高平均中断响应时间,减少外部中断的丢失。
Description
技术领域
本发明属于嵌入式实时操作系统领域,具体地说,涉及一种SPARC平台减少中断响应抖动的方法。
背景技术
SPARC是一种开源的RISC处理器架构技术,在国内广泛的应用在航天领域。同时,随着航天任务的复杂化,嵌入式实时操作系统在航天领域的应用也越来越广泛。在嵌入式实时操作系统运行过程中,有两条最重要且执行最频繁的内核路径:任务切换路径和中断处理路径。在这两条路径上有大量对全局变量及全局数据结构进行读写的操作,为保证全局数据的一致性,现有的嵌入式实时操作系统通常采用关中断的方法确保多个任务对共享资源的互斥访问。
现有技术存在的主要问题:
1、采用关中断方法保护的临界区,通常是由C语言实现的对全局变量及全局数据结构进行读写的操作,这些代码长短不一(如使用GCC 3.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条指令组成,其原型如下:
int atomic_swap(int oldval,int*p_var,int newval)
返回值为int型,变量oldval存储某一全局变量修改前的值,指针p_var指向该全局变量,而变量newval存储将赋给该全局变量的值,返回0值表示用新值对全局变量原先的值进行了替换,返回非0值,表示未用新值对全局变量原先的值进行替换;所述原子交换函数的算法如下:
1)、快速关中断;
2)、将oldval和p_var指向的地址处的值相减,将结果填入存放返回值的寄存器,如果为0,则继续执行第3步,如果不为0,则跳转到第4步;
3)、将newval的值赋给p_var指向的地址;
4)、打开中断,函数返回。
作为一种改进,所述实现内核路径上写全局变量访问操作的中断响应抖动减少技术的函数原型如下:
void write_global(int*pglb,int new)
其中变量pglb指向要进行写操作的全局变量的地址,变量new指向将要写入全局变量的值;所述实现内核路径上写全局变量访问操作的中断响应抖动减少技术算法如下:
1)、取出指针pglb指向的全局变量的值,赋给临时变量temp;
2)、调用原子交换函数,格式为atomic_swap(temp,pglb,new);
3)、如果原子交换函数返回值不为0,则调转到第1步;如果返回值为0,则函数退出。
作为一种改进,所述全局队列访问操作的中断响应抖动减少技术首先是插入节点操作,其函数原型如下:
void insert_queue(Node*pnew_node,const int&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,函数退出。
作为一种改进,所述全局堆栈访问操作的中断响应抖动减少技术,其原型为:
void push(Node*pnode,const int&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条SPARC平台的汇编指令组成,关中断的时间短且固定,能减少中断响应的抖动,并提高平均中断响应时间,减少外部中断的丢失。另外,由于临界区是由汇编指令组成,可以排除编译器导致的临界区执行时间的变化。
附图说明
图1为本发明一种实施例的中断响应抖动效果图;
图2为本发明一种实施例的原子交换函数算法流程图;
图3为本发明一种实施例的全局变量写操作算法流程图;
图4为本发明一种实施例的队列访问操作算法流程图;
图5为本发明一种实施例的队列删除操作算法流程图;
图6为本发明一种实施例的压栈操作算法流程图;
图7为本发明一种实施例的压栈操作算法流程图。
具体实施方式
实施例:
如图1所示,一种SPARC平台减少中断响应抖动的方法,步骤如下:1)、建立SPARC平台原子交换函数;2)、实现内核路径上写全局变量访问操作的中断响应抖动减少技术;3)、全局队列访问操作的中断响应抖动减少技术;4)、全局堆栈访问操作的中断响应抖动减少技术。
在本实施例中,所述建立SPARC平台原子交换函数的算法如下:
使用SPARC汇编指令实现了原子交换函数,该函数共由7条指令组成,其原型如下:
int atomic_swap(int oldval,int*p_var,int newval)
返回值为int型,变量oldval存储某一全局变量修改前的值,指针p_var指向该全局变量,而变量newval存储将赋给该全局变量的值,返回0值表示用新值对全局变量原先的值进行了替换,返回非0值,表示未用新值对全局变量原先的值进行替换。
如图2所示,所述原子交换函数的算法如下:
1)、快速关中断;
2)、将oldval和p_var指向的地址处的值相减,将结果填入存放返回值的寄存器,如果为0,则继续执行第3步,如果不为0,则跳转到第4步;
3)、将newval的值赋给p_var指向的地址;
4)、打开中断,函数返回。
在本实施例中,所述实现内核路径上写全局变量访问操作的中断响应抖动减少技术的函数原型如下:
void write_global(int*pglb,int new)
其中变量pglb指向要进行写操作的全局变量的地址,变量new指向将要写入全局变量的值。
如图3所示,实现内核路径上写全局变量访问操作的中断响应抖动减少技术算法如下:
1)、取出指针pglb指向的全局变量的值,赋给临时变量temp;
2)、调用原子交换函数,格式为atomic_swap(temp,pglb,new);
3)、如果原子交换函数返回值不为0,则调转到第1步;如果返回值为0,则函数退出。
在本实施例中,所述全局队列访问操作的中断响应抖动减少技术首先是插入节点操作,其函数原型如下:
void insert_queue(Node*pnew_node,const int&data,Queue*pqueue)
队列是先进先出的数据结构,插入操作总是在队列尾进行,所以第一个参数给出了将插入节点的指针,第二个参数给出了新节点中存储的数据,第三个参数是队列指针;
如图4所示,所述全局队列访问操作的中断响应抖动减少技术算法如下:
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为指向队列的指针;
如图5所示,其队列的删除操作算法如下:
1)、取出当前队列的头指针,赋值给临时变量old_head;
2)、将old_head的指针域赋给临时变量pnext;
3)、调用原子交换函数,格式为atomic_swap(old_head,&(pqueue->head),pnext);
4)、如果原子交换函数返回值不为0,则跳转到第1步;如果返回值为0,则返回old_head,函数退出。
在本实施例中,所述全局堆栈访问操作的中断响应抖动减少技术,其原型为:
void push(Node*pnode,const int&data,stack*pstack)
第一个参数是指向将插入的节点的指针,第二个参数data为待压入节点数据域存储的数据,第三个参数为指向栈的指针;
如图6所示,所述全局堆栈访问操作的中断响应抖动减少技术的算法如下:
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)
唯一的一个参数为指向栈的指针,如图7所示,出栈操作的算法如下:
1)、用临时变量old_top记录当前栈顶指针;
2)、将old_top的指针域赋值给临时变量pnode;
3)、调用原子交换函数,其格式为atomic_swap(old_top,pstack->top,pnode);
4)、如果原子交换函数返回值不为0,则跳转到第1步;如果返回值为0,则返回old_top,函数退出。
本发明可以保证对全局变量以及全局队列、全局堆栈等数据结构的读写访问的一致性,而且所有临界区都由7条SPARC平台的汇编指令组成,关中断的时间短且固定,能减少中断响应的抖动,并提高平均中断响应时间,减少外部中断的丢失。另外,由于临界区是由汇编指令组成,可以排除编译器导致的临界区执行时间的变化。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (1)
1.一种SPARC平台减少中断响应抖动的方法,其特征在于:步骤如下:
1)、建立SPARC平台原子交换函数;
2)、减少内核路径上写全局变量访问操作的中断响应抖动;
3)、减少全局队列访问操作的中断响应抖动;
4)、减少全局堆栈访问操作的中断响应抖动,其中:
步骤1)中的建立SPARC平台原子交换函数的算法如下:
使用SPARC汇编指令实现了原子交换函数,该函数共由7条指令组成,其原型如下:
int atomic_swap(int oldval,int*p_var,int newval)
返回值为int型,变量oldval存储某一全局变量修改前的值,指针p_var指向该全局变量,而变量newval存储将要赋给该全局变量的值,返回0值表示用新值对全局变量原先的值进行了替换,返回非0值,表示未用新值对全局变量原先的值进行替换;所述原子交换函数的算法如下:
11)、快速关中断;
12)、将oldval和p_var指向的地址处的值相减,将结果填入存放返回值的寄存器,如果为0,则继续执行步骤13),如果不为0,则跳转到步骤14);
13)、将newval的值赋给p_var指向的地址;
14)、打开中断,函数返回;
减少内核路径上写全局变量访问操作的中断响应抖动的函数原型如下:
void write_global(int*pglb,int new)
其中变量pglb指向要进行写操作的全局变量的地址,变量new指向将要写入全局变量的值;减少内核路径上写全局变量访问操作的中断响应抖动的算法如下:
21)、取出指针pglb指向的全局变量的值,赋给临时变量temp;
22)、调用原子交换函数,格式为atomic_swap(temp,pglb,new);
23)、如果原子交换函数返回值不为0,则调转到步骤21);如果返回值为0,则函数退出;
减少全局队列访问操作的中断响应抖动首先是插入节点操作,其函数原型如下:
void insert_queue(Node*pnew_node,const int&data,Queue*pqueue)
队列是先进先出的数据结构,插入操作总是在队列尾进行,所以第一个参数给出了将要插入节点的指针,第二个参数给出了新节点中存储的数据,第三个参数是队列指针;
减少全局队列访问操作的中断响应抖动的算法如下:
31)、将新节点数据域赋值为data,指针域赋值为null;
32)、将当前队尾节点赋值给临时变量old_tail,并将old_tail指针域指向新创建的节点;
33)、调用原子交换函数,格式为atomic_swap(old_tail,&(pqueue->tail),pnew_node);
34)、如果原子交换函数返回值不为0,则跳转到步骤32);如果返回值为0,则函数退出;
队列的删除操作在队列头进行,其函数原型如下:
Node*delete_queue(Queue*pqueue)
其中变量pqueue为指向队列的指针;
其队列的删除操作算法如下:
S1、取出当前队列的头指针,赋值给临时变量old_head;
S2、将old_head的指针域赋给临时变量pnext;
S3、调用原子交换函数,格式为atomic_swap(old_head,&(pqueue->head),pnext);
S4、如果原子交换函数返回值不为0,则跳转到步骤S1;如果返回值为0,则返回old_head,函数退出;
减少全局堆栈访问操作的中断响应抖动,其原型为:
void push(Node*pnode,const int&data,stack*pstack)
第一个参数是指向将要插入的节点的指针,第二个参数data为待压入节点数据域存储的数据,第三个参数为指向栈的指针;
减少全局堆栈访问操作的中断响应抖动的算法如下:
41)、将pnode数据域赋值为data;
42)、用临时变量old_top记录当前栈顶节点的指针;
43)、pnode的指针域指向old_top;
44)、调用原子交换函数,其格式为atomic_swap(old_top,&(pstack->top),pnode);
45)、如果原子交换函数返回值不为0,则跳转到步骤41);如果返回值为0,则函数退出;
出栈操作的原型如下:
Node*pop(stack*pstack)
唯一的一个参数为指向栈的指针,出栈操作的算法如下:
第一步骤、用临时变量old_top记录当前栈顶指针;
第二步骤、将old_top的指针域赋值给临时变量pnode;
第三步骤、调用原子交换函数,其格式为atomic_swap(old_top,pstack->top,pnode);
第四步骤、如果原子交换函数返回值不为0,则跳转到第一步骤;如果返回值为0,则返回old_top,函数退出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410060974.9A CN103984537B (zh) | 2014-02-21 | 2014-02-21 | 一种sparc平台减少中断响应抖动的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410060974.9A CN103984537B (zh) | 2014-02-21 | 2014-02-21 | 一种sparc平台减少中断响应抖动的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103984537A CN103984537A (zh) | 2014-08-13 |
CN103984537B true CN103984537B (zh) | 2017-04-19 |
Family
ID=51276531
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410060974.9A Active CN103984537B (zh) | 2014-02-21 | 2014-02-21 | 一种sparc平台减少中断响应抖动的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103984537B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108920217B (zh) * | 2018-03-30 | 2021-12-03 | 惠州市德赛西威汽车电子股份有限公司 | 一种减少不可重入函数的重构方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5003466A (en) * | 1987-02-06 | 1991-03-26 | At&T Bell Laboratories | Multiprocessing method and arrangement |
CN101349975A (zh) * | 2008-07-29 | 2009-01-21 | 北京中星微电子有限公司 | 实现中断底半部机制的方法及嵌入式系统 |
CN102609258A (zh) * | 2012-02-02 | 2012-07-25 | 武汉光庭科技有限公司 | 一种对旋转编码器识别的改进方法 |
CN103377081A (zh) * | 2012-04-27 | 2013-10-30 | 沈阳高精数控技术有限公司 | 嵌入式数控系统双核芯片和外设间中断机制的实现方法 |
-
2014
- 2014-02-21 CN CN201410060974.9A patent/CN103984537B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5003466A (en) * | 1987-02-06 | 1991-03-26 | At&T Bell Laboratories | Multiprocessing method and arrangement |
CN101349975A (zh) * | 2008-07-29 | 2009-01-21 | 北京中星微电子有限公司 | 实现中断底半部机制的方法及嵌入式系统 |
CN102609258A (zh) * | 2012-02-02 | 2012-07-25 | 武汉光庭科技有限公司 | 一种对旋转编码器识别的改进方法 |
CN103377081A (zh) * | 2012-04-27 | 2013-10-30 | 沈阳高精数控技术有限公司 | 嵌入式数控系统双核芯片和外设间中断机制的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103984537A (zh) | 2014-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Rhodes et al. | sPyNNaker: a software package for running PyNN simulations on SpiNNaker | |
CN101957751B (zh) | 一种状态机的实现方法及装置 | |
JP2006107481A5 (zh) | ||
WO2009018488A3 (en) | Executing multiple applications and their variations in computing environments | |
CN109471743A (zh) | 日志收集方法、装置及计算机可读存储介质 | |
CN103927187A (zh) | 嵌入式系统程序执行方法 | |
CN111061981A (zh) | 页面管理方法、装置、存储介质及电子设备 | |
CN103984537B (zh) | 一种sparc平台减少中断响应抖动的方法 | |
CN103365926A (zh) | 在文件系统中用于保存快照的方法和装置 | |
Bacci et al. | Optimal and robust controller synthesis: Using energy timed automata with uncertainty | |
CN105653271B (zh) | 行为树的静态解析、执行以及优化方法和装置 | |
Cai et al. | Stochastic analysis of predator–prey type ecosystems | |
CN105027098B (zh) | 减轻单元间干扰 | |
CN103699802A (zh) | 一种游戏场景中统一控制场景逻辑的方法及系统 | |
Okasaki | The role of lazy evaluation in amortized data structures | |
CN105740064B (zh) | Linux系统中防止服务端重启的方法及装置 | |
Welch et al. | Mobile data types for communicating processes | |
Malik | ContraContemporary | |
Lees et al. | Analysing probabilistically constrained optimism | |
CN109977024A (zh) | 支持nvm实时下载的cpu芯片仿真器 | |
Krishna | Perfect Timed Communication Is Hard | |
US12056490B2 (en) | Methods and systems for handling control flow structures in data-parallel architectures | |
CN103929769B (zh) | 一种应用于无线通信系统仿真的调度方法及系统 | |
KR102187880B1 (ko) | 게임 업데이트 가이드를 위한 방법 및 장치 | |
Paul | Lockless circular buffer over shared memory (high speed data transfer via shared memory) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100094 No. 28, Yongfeng Road, Beijing, Haidian District Patentee after: Beijing Shenzhou Aerospace Software Technology Co.,Ltd. Address before: 100094 No. 28, Yongfeng Road, Beijing, Haidian District Patentee before: BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co.,Ltd. |