CN101349975A - 实现中断底半部机制的方法及嵌入式系统 - Google Patents
实现中断底半部机制的方法及嵌入式系统 Download PDFInfo
- Publication number
- CN101349975A CN101349975A CN 200810117341 CN200810117341A CN101349975A CN 101349975 A CN101349975 A CN 101349975A CN 200810117341 CN200810117341 CN 200810117341 CN 200810117341 A CN200810117341 A CN 200810117341A CN 101349975 A CN101349975 A CN 101349975A
- Authority
- CN
- China
- Prior art keywords
- interrupt
- module
- interrupt process
- embedded
- task
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 108
- 230000007246 mechanism Effects 0.000 title claims abstract description 23
- 230000008569 process Effects 0.000 claims abstract description 75
- 238000007689 inspection Methods 0.000 claims description 4
- 230000002618 waking effect Effects 0.000 claims description 4
- 238000011549 displacement method Methods 0.000 claims description 2
- 238000004321 preservation Methods 0.000 claims description 2
- 230000004044 response Effects 0.000 abstract description 8
- 238000012545 processing Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001427 coherent effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
Images
Abstract
本发明提供一种实现中断底半部机制的方法及嵌入式系统,其中,方法包括:嵌入式操作系统收到中断请求后,执行中断操作,转到中断处理顶半部模块;所述中断处理顶半部模块执行中断处理程序后,转到底半部中断管理任务模块;所述管理任务模块执行底半部管理任务,所述底半部管理任务为嵌入式操作系统的具有高于常规任务的优先级的系统任务,所述底半部管理任务调用中断处理底半部模块;所述中断处理底半部模块执行中断处理底半部程序。本发明通过嵌入式操作系统的具有最高任务优先级的系统任务来完成中断顶半部和底半部的衔接,简单易行、响应快速、代码量很少,更适合于嵌入式应用领域。
Description
技术领域
本发明涉及嵌入式操作系统的中断机制,特别是涉及一种在嵌入式操作系统上实现中断底半部机制的方法及嵌入式系统。
背景技术
随着科技的发展和生活水平的日益提高,使得人们对使用的各类电子产品提出了更高的要求。随着电子产品的功能变得越来越强大,产品的实现也变得日益复杂,越来越多的产品采用了嵌入式操作系统,而作为嵌入式操作系统重要组成部分的中断机制的优劣将直接影响整个系统的性能。以下是对本发明所涉及的嵌入式操作系统、中断机制和中断底半部机制的基础知识的介绍:
1)嵌入式操作系统,是一种负责嵌入式系统的全部软、硬件资源的分配、调度工作,控制协调并发活动的系统软件。
2)中断机制,是现代计算机系统中的基础设施之一,它在系统中起着通信网络作用,以协调系统对各种外部事件的响应和处理,是实现多道程序设计的必要条件。
3)中断底半部机制,一些操作系统将中断处理例程分成两部分:顶半部(top half)和底半部(bottom half,BH)。顶半部是实际响应中断的例程,底半部是一个被顶半部调用在稍后安全的时间内运行的例程,底半部处理程序和顶半部最大的不同就在于,在执行BH时所有的中断都是打开的,所以说它是在“更安全”时间内运行。
中断处理的一个重要问题是怎样在处理历程内完成耗时的任务。响应一次设备中断需要完成一定数量的工作,但是中断处理例程需要尽快结束而不能使中断阻塞的时间过长,这两个需求彼此冲突,如何解决成为了一个问题。
目前很多操作系统中通过将中断处理例程分成两部分来解决这个问题,顶半部是实际响应中断的例程,处理与硬件打交道的紧急事情;而底半部是一个被顶半部调度,并在稍后更安全的时间内执行的例程。
顶半部与底半部处理例程之间最大的不同,就是当底半部处理程序执行时,所有的中断都是打开的,这就是所谓的在更安全的时间内运行。典型的情况就是顶半部保存设备的数据到一个设备特定的缓冲区并调度它的底半部,然后退出:这个操作是非常快的。然后底半部执行其它必要的工作,例如唤醒进程、启动另外的I/O操作等等。这种方式允许在底半部工作期间,顶半部还可以继续为新的中断服务。
而如何将中断处理程序的顶半部和底半部衔接起来,是中断底半部机制的非常关键的任务,而目前的中断底半部机制有tasklet(任务允许)和工作队列等,虽然功能强大,但实现起来较为复杂,需要较多的软硬件资源,对于资源较少的嵌入式系统并不适合。
发明内容
本发明的目的是提供一种实现中断底半部机制的方法及嵌入式系统,能方便简捷的将中断处理的顶半部和底半部衔接起来,解决现有技术需要较多的软硬件资源,不适合嵌入式系统的技术问题。
为了实现上述目的,一方面,提供了一种在嵌入式操作系统上实现中断底半部机制的方法,包括如下步骤:
嵌入式操作系统收到中断请求后,执行中断操作,转到中断处理顶半部模块;
所述中断处理顶半部模块执行中断处理程序后,转到底半部中断管理任务模块;
所述管理任务模块执行底半部管理任务,所述底半部管理任务为嵌入式操作系统的具有高于常规任务的优先级的系统任务,所述底半部管理任务调用中断处理底半部模块;
所述中断处理底半部模块执行中断处理底半部程序。
优选地,所述的方法,其中,在所述转到底半部中断管理任务模块的步骤之前,还包括:所述中断处理顶半部模块执行唤醒所述管理任务模块的唤醒函数,并转到任务调度器;所述任务调度器根据所述唤醒函数的请求调度所述管理任务模块。
优选地,所述的方法,其中,在所述中断处理底半部模块执行中断处理底半部程序的步骤之后,还包括:返回所述任务调度器;所述任务调度器返回所述嵌入式操作系统。
优选地,所述的方法,其中,所述底半部管理任务调用中断处理底半部模块的步骤具体包括:给全局变量g_BtFlag赋值,所述全局变量g_BtFlag的每一位对应一个中断处理函数;给局部变量int赋值;通过所述局部变量int,检查所述全局变量g_BtFlag的每一位对应的中断处理函数,如果所述中断处理函数还未执行,则通知所述中断处理底半部模块执行所述未执行的中断处理函数,直到所述全局变量g_BtFlag的每一位对应的中断处理函数全部执行。
优选地,所述的方法,其中,在所述转到中断处理顶半部模块的步骤之前,还包括:进行包括有寄存器值、终端返回地址和堆栈指针的现场参数的保存。
优选地,所述的方法,其中,所述唤醒函数以所述中断操作的中断号位参数,并设置有对应所述中断号的标志。
优选地,所述的方法,其中,所述检查所述全局变量g_BtFlag的每一位,是通过移位的方法,按照从低到高或者从高到低的顺序进行逐个检查。
优选地,所述的方法,其中,所述检查所述全局变量g_BtFlag的每一位,是通过数组来保存g_BtFlag的每一位的优先级,根据所述优先级设定的顺序进行检查。
本发明的另一个方面,提供一种嵌入式系统,包括:嵌入式操作系统单元、中断处理顶半部模块、中断处理底半部模块和底半部中断管理任务模块;
所述嵌入式操作系统单元,用于在收到中断请求后,执行中断操作,调用所述中断处理顶半部模块;
所述中断处理顶半部模块,用于执行中断处理程序后,唤醒所述底半部中断管理任务模块;
所述底半部中断管理任务模块,用于执行底半部管理任务,所述底半部管理任务为嵌入式操作系统的具有最高任务优先级的系统任务,所述底半部管理任务调用所述中断处理底半部模块;
所述中断处理底半部模块,用于执行中断处理底半部程序。
优选地,所述的嵌入式系统,其中,所述中断处理顶半部模块中包括有唤醒函数模块,所述中断处理顶半部模块通过执行所述唤醒函数模块的唤醒函数来唤醒所述底半部中断管理任务模块。
优选地,所述的嵌入式系统,其中,还包括任务调度器,用于根据所述唤醒函数的请求调度所述底半部中断管理任务模块。
本发明实施例至少存在以下技术效果:
目前解决中断底半部中断处理程序调用问题的机制有tasklet和工作队列等,虽然功能强大,但实现起来较为复杂;而本发明实施例,通过嵌入式操作系统的具有最高任务优先级的系统任务来完成中断顶半部和底半部的衔接,简单易行、响应快速、代码量很少,更适合于嵌入式应用领域,尤其是在需要微内核的时候优势明显。
附图说明
图1为本发明实施例提供的正常中断处理流程;
图2为本发明实施例提供的中断底半部机制实现流程图;
图3为本发明实施例提供的中断管理任务流程图;
图4为本发明实施例提供的实现中断底半部机制的嵌入式系统的结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对具体实施例进行详细描述。
操作系统最重要的功能就是任务调度,而嵌入式的操作系统任务一般分为若干个优先级,当有多个任务处于就绪状态时,优先级最高的任务最先被调度运行。系统在运行时,往往需要一些辅助的系统任务来配合完成管理工作,本发明实施例正是利用了这样的一个系统任务来实现中断底半部机制的。
本发明实施例在操作系统初始化的时候,创建一个系统任务OS_BISRMngTsk(底半部中断管理任务),专门用于处理执行完中断顶半部程序以后,其对应的底半部程序的调用。
一般中断的流程如图1所示。当前程序正在运行的时候,处理器接收到了一个中断,处理器就放弃当前正在运行的程序,保存好现场后转去执行相应的中断处理程序,执行完中断处理程序后返回之前运行的程序继续往下执行。
并不是所有的中断处理程序都要使用底半部处理程序,当中断处理程序很简单的时候,本发明实施例中的实现同图1一样采用直接响应,处理完后直接返回的方式。当中断程序比较复杂,就有必要采用底半部机制。
在采用底半部机制时,本发明对此的实施例如图2所示,图中的底半部中断管理任务是系统初始化时启动的OS_BtISRMngTsk,用于调度底半部中断处理函数,具有比任何普通任务都高的任务优先级。整个实现的流程如下:
201.处理器正在执行某程序的时候发生中断,处理器保存现场(包括寄存器值,中断返回地址,堆栈指针等),转去处理对应中断的中断处理程序(顶半部);
202.在顶半部处理程序的末尾执行一个函数,这个函数以本中断号为参数,在该函数中设置与本中断号对应的一个标志,然后唤醒底半部中断管理任务;
203.中断返回,注意此时已经脱离了中断状态,中断返回前执行任务调度,这时优先级最高的底半部中断管理任务就先被处理器执行,该任务流程如图3所示;
204.在底半部中断管理任务中调用对应的中断处理底半部程序;
205.执行完底半部程序后返回底半部中断管理任务;
206.底半部中断管理任务执行一遍后进入睡眠状态,将处理器控制权交还给任务调度器;
207.任务调度器重新执行调度,如果调度了之前中断的程序,则其继续运行,流程结束。
底半部中断管理任务OS_BtISRMngTsk的流程图如图3所示,全局变量g_BtFlag用于保存与中断号对应的标志,1位对应一个中断号,为1时表示需要执行对应的中断底半部处理程序,为0时则不执行。
系统中有一个全局的函数指针数组g_pBtISRHandler[MAX_INT_NUM],保存了中断底半部处理函数的指针,初始时为NULL,在设备驱动程序申请某中断号int以后,需要进行初始化,将int对应的底半部处理函数指针赋给g_pBtISRHandler[int]。中断底半部处理程序管理任务通过执行g_pBtISRHandler[int]()调用中断号为int的底半部处理函数。
具体过程如下:
301.给全局变量g_BtFlag赋值,所述全局变量g_BtFlag的每一位对应一个中断处理函数;
302.底半部中断管理任务进入睡眠状态;
303.给局部变量int赋值;
304.通过所述局部变量int,检查所述全局变量g_BtFlag的每一位对应的中断处理函数,如果所述中断处理函数还未执行,则通知所述中断处理底半部模块执行所述未执行的中断处理函数,直到所述全局变量g_BtFlag的每一位对应的中断处理函数全部执行。
在检查所述全局变量g_BtFlag的每一位时,可以通过移位的方法,按照从低到高或者从高到低的顺序进行逐个检查,也可以通过数组保存要检查的中断的顺序,例如[20,11,9,26...],这样如果20,11同时存在底半部程序要执行,就会先去执行20,g_BtFlag的顺序不同,中断底半部程序的执行顺序不同,这对系统都是有一定影响的。
图4为本发明实施例提供的实现中断底半部机制的嵌入式系统的结构图。如图,嵌入式系统包括:
嵌入式操作系统单元110、中断处理顶半部模块120、任务调度器130、底半部中断管理任务模块140和中断处理底半部模块150。
所述嵌入式操作系统单元110,用于在收到中断请求后,执行中断操作,调用所述中断处理顶半部模块120;
所述中断处理顶半部模块120,用于执行中断处理程序后,通过执行唤醒函数模块121的唤醒函数转到任务调度器130,以便唤醒所述底半部中断管理任务模块140;
任务调度器130,用于根据所述唤醒函数的请求调度所述底半部中断管理任务模块140。
所述底半部中断管理任务模块140,用于执行底半部管理任务,所述底半部管理任务为嵌入式操作系统的具有最高任务优先级的系统任务,所述底半部管理任务调用所述中断处理底半部模块150;
所述中断处理底半部模块150,用于执行中断处理底半部程序。
由上可知,与现行方案比较,本发明实施例具有如下优势:目前解决中断底半部中断处理程序调用问题的机制有tasklet和工作队列等,虽然功能强大,但实现起来较为复杂;而本发明实施例,通过嵌入式操作系统的具有最高任务优先级的系统任务来完成中断顶半部和底半部的衔接,简单易行、响应快速、代码量很少,更适合于嵌入式应用领域,尤其是在需要微内核的时候优势明显。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (11)
1.一种在嵌入式操作系统上实现中断底半部机制的方法,其特征在于,包括如下步骤:
嵌入式操作系统收到中断请求后,执行中断操作,转到中断处理顶半部模块;
所述中断处理顶半部模块执行中断处理程序后,转到底半部中断管理任务模块;
所述管理任务模块执行底半部管理任务,所述底半部管理任务为嵌入式操作系统的具有高于常规任务的优先级的系统任务,所述底半部管理任务调用中断处理底半部模块;
所述中断处理底半部模块执行中断处理底半部程序。
2.根据权利要求1所述的方法,其特征在于,在所述转到底半部中断管理任务模块的步骤之前,还包括:
所述中断处理顶半部模块执行唤醒所述管理任务模块的唤醒函数,并转到任务调度器;
所述任务调度器根据所述唤醒函数的请求调度所述管理任务模块。
3.根据权利要求1所述的方法,其特征在于,在所述中断处理底半部模块执行中断处理底半部程序的步骤之后,还包括:
返回所述任务调度器;
所述任务调度器返回所述嵌入式操作系统。
4.根据权利要求1所述的方法,其特征在于,所述底半部管理任务调用中断处理底半部模块的步骤具体包括:
给全局变量g_BtFlag赋值,所述全局变量g_BtFlag的每一位对应一个中断处理函数;
给局部变量int赋值;
通过所述局部变量int,检查所述全局变量g_BtFlag的每一位对应的中断处理函数,如果所述中断处理函数还未执行,则通知所述中断处理底半部模块执行所述未执行的中断处理函数,直到所述全局变量g_BtFlag的每一位对应的中断处理函数全部执行。
5.根据权利要求1所述的方法,其特征在于,在所述转到中断处理顶半部模块的步骤之前,还包括:进行包括有寄存器值、终端返回地址和堆栈指针的现场参数的保存。
6.根据权利要求2所述的方法,其特征在于,所述唤醒函数以所述中断操作的中断号位参数,并设置有对应所述中断号的标志。
7.根据权利要求4所述的方法,其特征在于,所述检查所述全局变量g_BtFlag的每一位,是通过移位的方法,按照从低到高或者从高到低的顺序进行逐个检查。
8.根据权利要求4所述的方法,其特征在于,所述检查所述全局变量g_BtFlag的每一位,是通过数组来保存g_BtFlag的每一位的优先级,根据所述优先级设定的顺序进行检查。
9.一种嵌入式系统,其特征在于,包括:嵌入式操作系统单元、中断处理顶半部模块、中断处理底半部模块和底半部中断管理任务模块;
所述嵌入式操作系统单元,用于在收到中断请求后,执行中断操作,调用所述中断处理顶半部模块;
所述中断处理顶半部模块,用于执行中断处理程序后,唤醒所述底半部中断管理任务模块;
所述底半部中断管理任务模块,用于执行底半部管理任务,所述底半部管理任务为嵌入式操作系统的具有最高任务优先级的系统任务,所述底半部管理任务调用所述中断处理底半部模块;
所述中断处理底半部模块,用于执行中断处理底半部程序。
10.根据权利要求9所述的嵌入式系统,其特征在于,所述中断处理顶半部模块中包括有唤醒函数模块,所述中断处理顶半部模块通过执行所述唤醒函数模块的唤醒函数来唤醒所述底半部中断管理任务模块。
11.根据权利要求10所述的嵌入式系统,其特征在于,还包括任务调度器,用于根据所述唤醒函数的请求调度所述底半部中断管理任务模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810117341.1A CN101349975B (zh) | 2008-07-29 | 2008-07-29 | 一种在嵌入式操作系统上实现中断底半部机制的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810117341.1A CN101349975B (zh) | 2008-07-29 | 2008-07-29 | 一种在嵌入式操作系统上实现中断底半部机制的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101349975A true CN101349975A (zh) | 2009-01-21 |
CN101349975B CN101349975B (zh) | 2014-04-23 |
Family
ID=40268781
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810117341.1A Active CN101349975B (zh) | 2008-07-29 | 2008-07-29 | 一种在嵌入式操作系统上实现中断底半部机制的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101349975B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929819A (zh) * | 2012-10-19 | 2013-02-13 | 北京忆恒创源科技有限公司 | 用于处理计算机系统中的存储设备的中断请求的方法 |
CN103984537A (zh) * | 2014-02-21 | 2014-08-13 | 北京神舟航天软件技术有限公司 | 一种sparc平台减少中断响应抖动的技术 |
CN103870326B (zh) * | 2012-12-11 | 2018-07-13 | 厦门雅迅网络股份有限公司 | 一种将中断处理程序底半部搬移到应用层的方法及应用 |
CN110794759A (zh) * | 2019-10-29 | 2020-02-14 | 北京和利时智能技术有限公司 | 一种plc任务调度方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1783020A (zh) * | 2005-09-12 | 2006-06-07 | 浙江大学 | 基于PowerPC体系结构的嵌入式操作系统的中断管理方法 |
CN100535879C (zh) * | 2007-08-22 | 2009-09-02 | 中兴通讯股份有限公司 | 一种嵌入式实时系统中断处理装置及方法 |
-
2008
- 2008-07-29 CN CN200810117341.1A patent/CN101349975B/zh active Active
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929819A (zh) * | 2012-10-19 | 2013-02-13 | 北京忆恒创源科技有限公司 | 用于处理计算机系统中的存储设备的中断请求的方法 |
CN102929819B (zh) * | 2012-10-19 | 2016-02-10 | 北京忆恒创源科技有限公司 | 用于处理计算机系统中的存储设备的中断请求的方法 |
CN103870326B (zh) * | 2012-12-11 | 2018-07-13 | 厦门雅迅网络股份有限公司 | 一种将中断处理程序底半部搬移到应用层的方法及应用 |
CN103984537A (zh) * | 2014-02-21 | 2014-08-13 | 北京神舟航天软件技术有限公司 | 一种sparc平台减少中断响应抖动的技术 |
CN103984537B (zh) * | 2014-02-21 | 2017-04-19 | 北京神舟航天软件技术有限公司 | 一种sparc平台减少中断响应抖动的方法 |
CN110794759A (zh) * | 2019-10-29 | 2020-02-14 | 北京和利时智能技术有限公司 | 一种plc任务调度方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101349975B (zh) | 2014-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8261284B2 (en) | Fast context switching using virtual cpus | |
CN100549964C (zh) | 信息处理设备、中断处理控制方法 | |
US7788435B2 (en) | Interrupt redirection with coalescing | |
US20020161957A1 (en) | Methods and systems for handling interrupts | |
US7627705B2 (en) | Method and apparatus for handling interrupts in embedded systems | |
KR20090005078A (ko) | 스마트카드 임베디드 조작 시스템 및 작업처리 방법 | |
CN104598426A (zh) | 用于异构多核处理器系统的任务调度方法 | |
CN104102548A (zh) | 任务资源调度处理方法和系统 | |
CN102375761A (zh) | 业务管理方法和装置、以及设备 | |
US10248456B2 (en) | Method and system for providing stack memory management in real-time operating systems | |
CN103473138A (zh) | 基于线程池的多任务队列调度方法 | |
CN104598294A (zh) | 用于移动设备的高效安全的虚拟化方法及其设备 | |
US7565659B2 (en) | Light weight context switching | |
CN107577539B (zh) | 用于内核态和用户态通讯的共享内存结构及其应用 | |
CN103744716A (zh) | 一种基于当前vcpu调度状态的动态中断均衡映射方法 | |
CN104094235A (zh) | 多线程计算 | |
CN113010275A (zh) | 一种中断处理方法和装置 | |
CN109445939A (zh) | 一种基于主动出让机制的软实时调度内核的调度方法 | |
CN102855156A (zh) | 一种中断控制器及中断控制方法 | |
CN102708006A (zh) | 处理优化负载调整 | |
EP1693743A2 (en) | System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock | |
CN101349975A (zh) | 实现中断底半部机制的方法及嵌入式系统 | |
CN103019848A (zh) | 一种pci总线非向量中断实现方法 | |
CN101685407B (zh) | 一种虚拟环境中的任务调度系统方法 | |
CN101369258B (zh) | 输入输出控制系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210222 Address after: No. 602, 6th floor, shining building, 35 Xueyuan Road, Haidian District, Beijing 100083 Patentee after: BEIJING ZHONGXINGTIANSHI TECHNOLOGY Co.,Ltd. Address before: 100083, Haidian District, Xueyuan Road, Beijing No. 35, Nanjing Ning building, 15 Floor Patentee before: Vimicro Corp. |