实现中断底半部机制的方法及嵌入式系统的制作方法

文档序号:6464623阅读:230来源:国知局
专利名称:实现中断底半部机制的方法及嵌入式系统的制作方法
技术领域
本发明涉及嵌入式操作系统的中断机制,特别是涉及一种在嵌入式操作系 统上实现中断底半部机制的方法及嵌入式系统。
背景技术
随着科技的发展和生活水平的日益提高,使得人们对使用的各类电子产品 提出了更高的要求。随着电子产品的功能变得越来越强大,产品的实现也变得 日益复杂,越来越多的产品釆用了嵌入式操作系统,而作为嵌入式操作系统重 要组成部分的中断机制的优劣将直接影响整个系统的性能。以下是对本发明所
涉及的嵌入式操作系统、中断机制和中断底半部^L制的基础知识的介绍
1) 嵌入式操作系统,是一种负责嵌入式系统的全部软、硬件资源的分配、 调度工作,控制协调并发活动的系统软件。
2) 中断机制,是现代计算机系统中的基础设施之一,它在系统中起着通 信网络作用,以协调系统对各种外部事件的响应和处理,是实现多道程序设计
的必要条件。
3) 中断底半部机制, 一些操作系统将中断处理例程分成两部分顶半部 (top half)和底半部(bottom half, BH)。顶半部是实际响应中断的例程,底半部是 一个被顶半部调用在稍后安全的时间内运行的例程,底半部处理程序和顶半部 最大的不同就在于,在执行BH时所有的中断都是打开的,所以说它是在"更安 全"时间内运行。
中断处理的一个重要问题是怎样在处理历程内完成耗时的任务。响应一次 设备中断需要完成一定数量的工作,但是中断处理例程需要尽快结束而不能使 中断阻塞的时间过长,这两个需求彼此冲突,如何解决成为了一个问题。
目前很多操作系统中通过将中断处理例程分成两部分来解决这个问题,顶 半部是实际响应中断的例程,处理与硬件打交道的紧急事情;而底半部是一个
被顶半部调度,并在稍后更安全的时间内执行的例程。
顶半部与底半部处理例程之间最大的不同,就是当底半部处理程序执行 时,所有的中断都是打开的,这就是所谓的在更安全的时间内运行。典型的情 况就是顶半部保存设备的数据到 一个设备特定的缓冲区并调度它的底半部,然
后退出这个操作是非常快的。然后底半部执行其它必要的工作,例如唤醒进 程、启动另外的i/o才喿作等等。这种方式允许在底半部工作期间,顶半部还可 以继续为新的中断月良务。
而如何将中断处理程序的顶半部和底半部衫f接起来,是中断底半部机制的 非常关键的任务,而目前的中断底半部机制有tasklet (任务允许)和工作队列 等,虽然功能强大,但实现起来较为复杂,需要较多的软硬件资源,对于资源 较少的嵌入式系统并不适合。

发明内容
本发明的目的是提供一种实现中断底半部机制的方法及嵌入式系统,能方 便简捷的将中断处理的顶半部和底半部衔接起来,解决现有技术需要较多的软 硬件资源,不适合嵌入式系统的技术问题。
为了实现上述目的, 一方面,提供了一种在嵌入式操作系统上实现中断底 半部机制的方法,包括如下步骤
嵌入式操作系统收到中断请求后,执行中断操作,转到中断处理顶半部模
块;
所述中断处理顶半部模块执行中断处理程序后,转到底半部中断管理任务
模块;
所述管理任务模块执行底半部管理任务,所述底半部管理任务为嵌入式操 作系统的具有高于常规任务的优先级的系统任务,所述底半部管理任务调用中
断处理底半部模块;
所述中断处理底半部模块执行中断处理底半部程序。
优选地,所述的方法,其中,在所述转到底半部中断管理任务模块的步骤 之前,还包括所述中断处理顶半部^^莫块执行唤醒所述管理任务^f莫块的唤醒函 数,并转到任务调度器;所述任务调度器根据所述唤醒函数的请求调度所述管
理任务模块。
优选地,所述的方法,其中,在所述中断处理底半部才莫块执行中断处理底
半部程序的步骤之后,还包括返回所述任务调度器;所述任务调度器返回所 述嵌入式操作系统。
优选地,所述的方法,其中,所述底半部管理任务调用中断处理底半部才莫 块的步骤具体包括给全局变量g—BtFlag赋值,所述全局变量g一BtFlag的每 一位对应一个中断处理函数;给局部变量int赋值;通过所述局部变量int,检 查所述全局变量g—BtFlag的每一位对应的中断处理函数,如果所述中断处理 函数还未执行,则通知所述中断处理底半部模块执行所述未执行的中断处理函 数,直到所述全局变量g一BtFlag的每一位对应的中断处理函数全部执行。
优选地,所述的方法,其中,在所述转到中断处理顶半部模块的步骤之前, 还包括进行包括有寄存器值、终端返回地址和堆栈指针的现场参数的保存。
优选地,所述的方法,其中,所述唤醒函数以所述中断操作的中断号位参 数,并设置有对应所述中断号的标志。
优选地,所述的方法,其中,所述检查所述全局变量g—BtFlag的每一位, 是通过移位的方法,按照从低到高或者从高到低的顺序进行逐个检查。
优选地,所述的方法,其中,所述检查所述全局变量g—BtFIag的每一位, 是通过数组来保存g—BtFlag的每一位的优先级,根据所述优先级设定的顺序 进行检查。
本发明的另一个方面,提供一种嵌入式系统,包括嵌入式操作系统单元、 中断处理顶半部模块、中断处理底半部模块和底半部中断管理任务模块;
所述嵌入式操作系统单元,用于在收到中断请求后,执行中断操作,调用 所述中断处理顶半部模块;
所述中断处理顶半部模块,用于执行中断处理程序后,唤醒所述底半部中 断管理任务模块;
所述底半部中断管理任务模块,用于执行底半部管理任务,所述底半部管 理任务为嵌入式操作系统的具有最高任务优先级的系统任务,所述底半部管理 任务调用所述中断处理底半部模块;
所述中断处理底半部模块,用于执行中断处理底半部程序。
优选地,所述的嵌入式系统,其中,所述中断处理顶半部;f莫块中包括有唤 醒函数模块,所述中断处理顶半部模块通过执行所述唤醒函数模块的唤醒函数 来唤醒所述底半部中断管理任务模块。
优选地,所述的嵌入式系统,其中,还包括任务调度器,用于根据所述唤 醒函数的请求调度所述底半部中断管理任务模块。
本发明实施例至少存在以下技术效果
目前解决中断底半部中断处理程序调用问题的机制有tasklet和工作队列 等,虽然功能强大,但实现起来较为复杂;而本发明实施例,通过嵌入式操作 系统的具有最高任务优先级的系统任务来完成中断顶半部和底半部的衔接,简 单易行、响应快速、代码量很少,更适合于嵌入式应用领域,尤其是在需要微 内核的时候优势明显。


图1为本发明实施例提供的正常中断处理流程;
图2为本发明实施例提供的中断底半部机制实现流程图3为本发明实施例提供的中断管理任务流程图4为本发明实施例提供的实现中断底半部机制的嵌入式系统的结构图。
具体实施例方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对 具体实施例进行详细描述。
搡作系统最重要的功能就是任务调度,而嵌入式的操作系统任务一般分为 若干个优先级,当有多个任务处于就绪状态时,优先级最高的任务最先被调度 运行。系统在运行时,往往需要一些辅助的系统任务来配合完成管理工作,本 发明实施例正是利用了这样的一个系统任务来实现中断底半部机制的。
本发明实施例在操作系统初始化的时候,创建一个系统任务 OS一BtISRMngTsk(底半部中断管理任务),专门用于处理执行完中断顶半部程 序以后,其对应的底半部程序的调用。 一般中断的流程如图l所示。当前程序正在运行的时候,处理器接收到了
一个中断,处理器就;故弃当前正在运行的程序,保存好现场后转去执行相应的 中断处理程序,执行完中断处理程序后返回之前运行的程序继续往下执行。
并不是所有的中断处理程序都要使用底半部处理程序,当中断处理程序很 简单的时候,本发明实施例中的实现同图l一样采用直接响应,处理完后直接 返回的方式。当中断程序比较复杂,就有必要采用底半部机制。
在采用底半部机制时,本发明对此的实施例如图2所示,图中的底半部中 断管理任务是系统初始化时启动的OS—BtISRMngTsk,用于调度底半部中断处 理函数,具有比任何普通任务都高的任务优先级。整个实现的流程如下
201 .处理器正在执行某程序的时候发生中断,处理器保存现场(包括寄存器 值,中断返回地址,堆栈指针等),转去处理对应中断的中断处理程序(顶半部);
202. 在顶半部处理程序的末尾执行一个函数,这个函数以本中断号为参 数,在该函数中设置与本中断号对应的一个标志,然后唤醒底半部中断管理任
务;
203. 中断返回,注意此时已经脱离了中断状态,中断返回前执行任务调度, 这时优先级最高的底半部中断管理任务就先被处理器执-f亍,该任务流程如图3
所示;
204. 在底半部中断管理任务中调用对应的中断处理底半部程序;
205. 执行完底半部程序后返回底半部中断管理任务;
206. 底半部中断管理任务执行一遍后进入睡眠状态,将处理器控制权交还 给任务调度器;
207. 任务调度器重新执行调度,如果调度了之前中断的程序,则其继续运 行,流程结束。
底半部中断管理任务OS一BtlSRMngTsk的流程图如图3所示,全局变量 g一BtFlag用于保存与中断号对应的标志,l位对应一个中断号,为l时表示需 要执行对应的中断底半部处理程序,为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,以1更唤醒所述底半部中断管理 任务模块140;
任务调度器130,用于根据所述唤醒函数的请求调度所述底半部中断管理 任务模块140。
所述底半部中断管理任务模块140,用于执行底半部管理任务,所述底半 部管理任务为嵌入式操作系统的具有最高任务优先级的系统任务,所述底半部
管理任务调用所述中断处理底半部模块150;
所述中断处理底半部模块150,用于执行中断处理底半部程序。
由上可知,与现行方案比较,本发明实施例具有如下优势目前解决中断 底半部中断处理程序调用问题的机制有tasklet和工作队列等,虽然功能强大, 但实现起来较为复杂;而本发明实施例,通过嵌入式操作系统的具有最高任务 优先级的系统任务来完成中断顶半部和底半部的衔接,简单易行、响应快速、 代码量很少,更适合于嵌入式应用领域,尤其是在需要微内核的时候优势明显。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通 技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰, 这些改进和润饰也应一见为本发明的保护范围。
权利要求
1.一种在嵌入式操作系统上实现中断底半部机制的方法,其特征在于,包括如下步骤嵌入式操作系统收到中断请求后,执行中断操作,转到中断处理顶半部模块;所述中断处理顶半部模块执行中断处理程序后,转到底半部中断管理任务模块;所述管理任务模块执行底半部管理任务,所述底半部管理任务为嵌入式操作系统的具有高于常规任务的优先级的系统任务,所述底半部管理任务调用中断处理底半部模块;所述中断处理底半部模块执行中断处理底半部程序。
2. 根据权利要求l所述的方法,其特征在于,在所述转到底半部中断管 理任务;f莫块的步骤之前,还包括所述中断处理顶半部模块执行唤醒所述管理任务模块的唤醒函数,并转到 任务调度器;所述任务调度器根据所述唤醒函数的请求调度所述管理任务模块。
3. 根据权利要求1所述的方法,其特征在于,在所述中断处理底半部模 块执行中断处理底半部程序的步骤之后,还包括返回所述任务调度器; 所述任务调度器返回所述嵌入式操作系统。
4. 根据权利要求1所述的方法,其特征在于,所述底半部管理任务调用 中断处理底半部4莫块的步骤具体包括给全局变量g一BtFlag赋值,所述全局变量g一BtFlag的每一位对应一个中 断处理函数;给局部变量int赋值;通过所述局部变量int,检查所述全局变量g—BtFlag的每一位对应的中断 处理函数,如果所述中断处理函数还未执行,则通知所述中断处理底半部模块 执行所述未执行的中断处理函数,直到所述全局变量g—BtFlag的每一位对应 的中断处理函数全部执行。
5. 根据权利要求1所述的方法,其特征在于,在所述转到中断处理顶半 部模块的步骤之前,还包括进行包括有寄存器值、终端返回地址和堆栈指针 的现场参数的保存。
6. 根据权利要求2所述的方法,其特征在于,所述唤醒函数以所述中断 操作的中断号位参数,并设置有对应所述中断号的标志。
7. 根据权利要求4所述的方法,其特征在于,所述检查所述全局变量 g—BtFlag的每一位,是通过移位的方法,按照从低到高或者从高到低的顺序进 行逐个4企查。
8. 根据权利要求4所述的方法,其特征在于,所述检查所述全局变量 g_BtFlag的每一位,是通过数组来保存g_BtFlag的每一位的优先级,根据所 述优先级设定的顺序进行检查。
9. 一种嵌入式系统,其特征在于,包括嵌入式操作系统单元、中断处 理顶半部才莫块、中断处理底半部冲莫块和底半部中断管理任务模块;所述嵌入式操作系统单元,用于在收到中断请求后,执行中断操作,调用 所述中断处理顶半部冲莫块;所述中断处理顶半部^f莫块,用于执行中断处理程序后,唤醒所述底半部中 断管理任务模块;.所述底半部中断管理任务模块,用于执行底半部管理任务,所述底半部管 理任务为嵌入式操作系统的具有最高任务优先级的系统任务,所述底半部管理 任务调用所述中断处理底半部模块;所述中断处理底半部才莫块,用于执行中断处理底半部程序。
10. 根据权利要求9所述的嵌入式系统,其特征在于,所述中断处理顶半 部模块中包括有唤醒函数模块,所述中断处理顶半部模块通过执行所述唤醒函 数模块的唤醒函数来唤醒所述底半部中断管理任务模块。
11. 根据权利要求10所述的嵌入式系统,其特征在于,还包括任务调度 器,用于根据所迷唤醒函数的请求调度所述底半部中断管理任务模块。
全文摘要
本发明提供一种实现中断底半部机制的方法及嵌入式系统,其中,方法包括嵌入式操作系统收到中断请求后,执行中断操作,转到中断处理顶半部模块;所述中断处理顶半部模块执行中断处理程序后,转到底半部中断管理任务模块;所述管理任务模块执行底半部管理任务,所述底半部管理任务为嵌入式操作系统的具有高于常规任务的优先级的系统任务,所述底半部管理任务调用中断处理底半部模块;所述中断处理底半部模块执行中断处理底半部程序。本发明通过嵌入式操作系统的具有最高任务优先级的系统任务来完成中断顶半部和底半部的衔接,简单易行、响应快速、代码量很少,更适合于嵌入式应用领域。
文档编号G06F9/46GK101349975SQ20081011734
公开日2009年1月21日 申请日期2008年7月29日 优先权日2008年7月29日
发明者李栋梁, 游明琦, 国 艾 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1