0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式实时系统中断管理模式及实现方法分析

电子设计 来源:单片机与嵌入式系统应用 作者:雷红卫;桑楠;熊 2020-03-10 08:05 次阅读

引 言

嵌入式实时系统(Real-Time System)是一个能够在指定或者确定的时间内对外部事件作出响应的系统,其重要的特性是实时响应性。嵌入式实时系统对外部事件的响应一般都是通过中断来处理的,其对中断的处理方式,直接影响到系统的实时性能。

1 、嵌入式内核的中断管理模式

1.1 简 介

实时多任务操作系统是嵌入式应用开发的基础平台。早期的嵌入式实时应用软件直接在处理器上运行,没有RTOS支持,现在的大多嵌入式应用开发都需要嵌入式操作系统的支持。实际上,此时的嵌入式操作系统相当于一个通用而复杂的主控程序,为嵌入式应用软件提供更强大的开发平台和运行环境。因为嵌入式系统已经将处理器、中断、定时器、I/O等资源包装起来,用一系列的API提供给用户,应用程序可以不关注底层硬件,直接借用操作系统提供的功能进行开发,此时的嵌入式操作系统可以视为一个虚拟机。

随着嵌入式实时系统的发展,为了方便对中断的处理,系统内核常接管中断的处理,比如提供一些系统调用接口来安装用户的中断,提供统一的中断处理接口等。根据系统内核的可抢占或者非抢占性,系统内核接管中断又有两种不同处理模式,如图1。

嵌入式实时系统中断管理模式及实现方法分析

在非抢占式内核的中断处理模式中,当在中断处理过程中有高优先级任务就绪时,不会立即切换到高优先级的任务,必须等待中断处理完后返回到被中断的任务中,等待被中断的任务执行完后,再切换到高优先级任务。在抢占式内核的中断处理模式中,如果有高优先级任务就绪时,则立刻切换到高优先级的任务。抢占式内核中断处理模式下的时序如图2。

在时序图中,符号A表示有高优先级任务N就绪。这种处理模式有利于高优先级任务的处理,但相应地延长了被中断的低优先级任务的执行时间。

1.2 嵌入式内核接管中断的处理机制

嵌入式内核接管中断的处理机制主要包括两个部分:面向应用的编程接口部分和面向底层的处理部分。面向用户应用的编程接口的任务之一是供支持用户安装中断处理例程。面向底层处理部分可以分为两个部分:中断向量表部分和中断处理部分。中断向量表部分主要指中断向量表的定位和向量表中表项内容的形式,一般在嵌入式内核中都提供一个中断向量表, 其表项的向量号应与处理器中所描述的向量对应;向量表表项的内容形式一般有两种形式。最常见的形式就是在具体的向量位置存储的是一些转移程序,转到具体的中断处理部分;另一种形式也就是中断向量位置存放具体的中断处理程序,此仅针对向量号之间彼此有一定的距离,此距离足以存放中断处理程序。面向底层部分的中断处理部分,是整个嵌入式内核中断管理的核心,在后面有详细的分析。

对于嵌入式内核中断管理模式图中的中断处理部分,以Delta OS内核为例,详细说明其中断处理部分。Delta OS内核中断处理部分采用了“统一接管”的思想,即Delta OS 为所有的外部中断都提供一个统一的入口_ISR_Handler。此入口的主要功能是保护中断现场,执行用户的中断服务程序,判断是否允许可抢占调度,中断现场的恢复等。Delta OS内核中断处理的流程如图3。

从Delta OS内核中断处理流程图中,可看出嵌入式内核中一些专用的处理方式。

① 在嵌入式内核中一般有两个堆栈:系统栈和任务栈。系统栈是系统为中断上下文处理而预留的堆栈;任务栈属于任务本身的私有堆栈,用来存储任务执行过程中一些临时变量等信息。因为中断上下文不隶属于任何任务的上下文中,所以嵌入式内核一般都有一个系统栈专门处理中断上下文的。当产生中断且非中断嵌套时,堆栈由被中断任务中的任务栈切换到系统栈;当在中断处理中又发生中断时,堆栈不再切换,仍用系统栈;当退出最外层中断时,堆栈又由系统栈切换到被中断的任务中的任务栈。

② 一般嵌入式内核有两种形式:抢占式和非抢占式。为了更好地支持系统的实时性,很多嵌入式实时内核都是抢占式内核,如Vxworks、pSOS 等。从上面Delta OS 内核中断处理流程可知Delta OS是抢占式内核。因为在中断处理中,当检测到有高优先级任务就绪时,就会切换到高优先级任务里,而不是等到退出中断后,再进行任务调度。

③ 在嵌入式内核中,中断时机和调度时机直接影响到系统的实时性。关中断的时机一般在执行核心操作之前。核心操作包括对链表的操作,对核心数据项(如指示同步,反应重要信息状态)的修改等场合都须关中断。执行完相应的核心操作后,就可以开中断。开调度时机主要提供重新调度的机会,一般在执行操作系统核心调用前关调度,执行完后开调度。系统中开关中断与开关调度的关系大致如下:

开关中断的粒度比开关调度要深,要细。开关中断主要是为实时性提供各种可能的中断时机,允许响应外部中断。中断里也可以执行调度和系统调用,但中断的上下文与任务的上下文是不一样的,因此在中断里只能执行一些特定的系统调用。这些特定系统调用是不会引起调用阻塞的,不要试图在中断里执行获取信号量,执行I/O操作等这些很容易引起调用阻塞的系统调用。

2、 中断管理模型

2.1 中断前-后段处理模型

在前面嵌入式内核中断管理模式分析中,嵌入式内核一般采用中断统一接管思想,在中断统一接管中调用用户的中断服务程序。中断管理模式中的中断处理部分又可以细化,如嵌入式Linux系统中关于中断管理机制中提出了“前半部”和“后半部”的处理思想。其实这种中断管理的思想把中断处理部分按照重要性分两部分,将必须要做的中断处理部分归为“前半部”,即这部分在中断处理部分实施;而将中断处理中可以延迟操作且影响不大的部分归为“后半部”,这部分在退出中断服务程序后实施。通过这样的中断管理思想减少的中断服务时间,为其它外部事件的中断响应提供了更多的时机。在实时内核中还有其它的中断处理机制,它们的思想都是尽量减少中断处理的时间。如在一些I/O处理部分,I/O操作所引起的中断处理部分只做标记功能,即只设一个标志或者发一个消息说明外部中断来了,而具体的I/O传输操作放在中断外部实施。根据上面的分析,将前面的中断处理思想归结为:中断“前-后”段处理模型,其模型如图4。

在图4中,“中断前部”主要完成外部事件发生中断请求时,系统对其响应所完成的必要功能,如中断现场保护、数据预取和预放等;“置标”部分主要通知某个任务或者线程已有一个中断发生,且中断的前部已完成;“中断后部”并不是在中断服务程序里执行,而是由接收到标记或者通知的任务或者线程来完成的,主要是完成本应在中断服务里完成的后继工作。举个例子,当网络接口卡报告新的数据包到达时,“中断前部”主要将数据包送到协议层;“中断后部”完成对数据包的具体处理。在此“中断前-后段处理模型”中,应该注意两个方面:

① 如何划分“中断前部”和“中断后部”。基本的划分标准是,应该立即处理的和必要的功能部分放在“中断前部”完成,可以推迟处理或者可以在中断外处理的功能部分放在“中断后部”完成。

②“中断后部”何时执行,取决于用于完成“中断后部”功能的任务或者线程的优先级。如果要让中断的后继部分较快地执行,则可以通过提高获得标记的任务或者线程的优先级。从极限角度思维,当获得标记的任务或者优先级很高时,在“中断前部”完成退出中断后,立即就执行获得标记的任务或者线程,这相当于获得标记的任务或者线程执行部分就在中断里执行。如果中断的后继部分并不要求较快的执行,则可以赋给获得标记的任务或者线程为普通的优先级。

2.2 单向量多中断处理映射技术

(1)问题的提出

在前面的嵌入式内核中断管理模式图中,中断向量表部分也属于模式图的一部分,不同嵌入式处理器体系中断向量的支持也不同。在PowerPC 8xx 系列的处理器中,所有外部中断对应的向量都是0x500。为了处理这种多个外部中断共用一个向量的情况,本节提出了单向量多中断处理技术。此技术的思想如下:

当外设中断触发时,首先定位到实向量位置,调用中断统一接口函数,中断统一接口函数对外设中断触发的参数进行测试,寻找到其对应的虚向量,从而触发虚向量处的回调函数,从而实现多个外部中断通过同一的实向量到多个虚向量的映射,解决了单向量多中断处理的问题。

单向量多中断处理映射技术的示意图如图5。

在上面的单向量多中断处理映射图中,V表示多个外设共享的中断请求向量号,V1,V2,…,Vn-1,Vn表示不同外设对应的虚向量号;Fi表示与 Vi对应的回调函数(i=1…n)。

(2)实现方法

基于前面的分析,将单向量多中断处理映射技术运用于Delta OS 移植到PowerPC MPC860平台上。PowerPC MPC860处理器的外部中断向量号为0x500。在单向量多中断处理模型图中,V=0x500。设有n个外部设备分别为D1,D2,D3,…,Dn,这些外部设备中断触发时的中断标志分别为 PPC_D1,PPC_D2,PPC_D3,…,PPC_Dn;Delta OS 内核为这些外部设备分配的虚向量号分别为V_D1,V_D2,V_D3,…,V_Dn,在实现中分别取值:0x2000、0x2100、0x2200等,即每个虚向量号间距256个字节。在Delta OS内核中声明了一个全局虚向量表_ISR_VECTOR_TABLE,通过系统调用delta_interrupt_catch,将用户的中断服务程序安装到指定的虚向量号处。Delta OS 用统一的中断接口函数_ISR_Handler 来处理外部中断。在模型实现中有两个重要的功能模块:用户中断安装模块和中断处理模块。下面分别用伪代码描述这两个模块的功能。

用户中断安装模块delta_interrupt_catch 的伪代码实现如下: delta_interrupt_catch(vector, new_isr_handler,old_isr_handler){ ① 检查向量号的有效性 ② 检查新中断服务程序的有效性 ③ 保存旧的中断服务程序指针 ④ 安装用户指定的新中断服务程序 _ISR_VECTOR_TALBE[vector]=new_isr_handler } 外设中断触发时,中断处理模块_ISR_Handler的伪代码实现如下: _ISR_Handler(void){ ① 中断现场的保护 ② 中断屏蔽位的设置 ③ 外设中断标志的检测 switch ( 标志) { case PPC_D1: F1=_ISR_VECTOR_TABLE[V_D1]且执行F1的功能 case PPC_D2: F2=_ISR_VECTOR_TABLE[V_D2]且执行F2的功能 case PPC_D3: F3=_ISR_VECTOR_TABLE[V_D3]且执行F3的功能 。 . 。 case PPC_Dn: Fn=_ISR_VECTOR_TABLE[V_Dn]且执行Fn的功能 default: 执行系统默认的中断处理程序 } ④ 中断屏蔽位的恢复 ⑤ 根据调度标志进行调度 ⑥ 中断现场的恢复 } 图5

嵌入式实时系统中断管理模式及实现方法分析

此技术已成功解决了PowerPC MPC860中单向量多中断处理的问题,而且其实现并不影响嵌入式内核的体系,具有较好的移植性。

3 、小 结

本文主要研究了嵌入式实时系统中断管理技术,从硬件体系和系统管理两方面阐述了影响中断性能的因素,着重分析了嵌入式内核中断管理模式。在嵌入式内核中断管理中,归结出“中断前-后段处理”模型,并针对一些处理器的多中断共用一个向量的问题,引入了单向量多中断处理的映射技术,并给以实现,对提高嵌入式实时系统的实时性提供了一定的参考价值。

责任编辑:gt


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5059

    文章

    18972

    浏览量

    301920
  • 操作系统
    +关注

    关注

    37

    文章

    6676

    浏览量

    123131
  • 定时器
    +关注

    关注

    23

    文章

    3231

    浏览量

    114314
收藏 人收藏

    评论

    相关推荐

    嵌入式Linux中断现场保护方法改善

    本内容介绍了嵌入式Linux中断现场保护方法改善,分析了传统中断现场保护方法和现在的
    发表于 11-09 11:34 1669次阅读
    <b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>中断</b>现场保护<b class='flag-5'>方法</b>改善

    基于嵌入式实时系统设计模式的设计

    为满足嵌入式实时系统快速适应硬件型号升级、快速变更要求以及可伸缩、可修改、可复用等方面的需求,本文提出了一种适用于嵌入式实时
    发表于 10-14 15:33 2807次阅读
    基于<b class='flag-5'>嵌入式</b><b class='flag-5'>实时</b><b class='flag-5'>系统</b>设计<b class='flag-5'>模式</b>的设计

    嵌入式系统U盘实时启动技术

    引言  随着USB技术的发展,优盘在PC机系统上已得到广泛的应用,基本上取代了软盘,PC机系统可以实现从优盘启动。由于优盘性能稳定,体积小巧,访问速度快,因此它也非常适合作为嵌入式
    发表于 09-05 11:36

    小型嵌入式操作系统中断管理实现

    小型嵌入式操作系统中断管理实现
    发表于 04-22 12:57

    【案例分享】FreeRTOS的嵌入式实时操作系统实现

    FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作系统
    发表于 07-23 04:30

    基于微内核的嵌入式实时操作系统

    ARTs-OS是一个基于微内核的嵌入式实时操作系统。ARTs-OS中的中断管理应该提供的基本功能包括:
    发表于 07-26 07:19

    嵌入式实时系统设计模式是什么?

    系统的观点来看,嵌入式实时系统也是系统,特别是硬件技术的快速发展,嵌入式
    发表于 10-08 11:35

    实时仿真和嵌入式系统开发有什么方法

    在日益激烈的竞争中,系统的开发周期显得尤为重要,但开发时间与系统安全性、可靠性又有一定冲突,如果仍然使用传统的编写代码的模式,显然有些不妥。本文介绍一种基于Matlab/RTW实现实时
    发表于 03-06 07:20

    实时嵌入式系统简介

    本文将首先介绍实时嵌入式系统,包括分类,约束和设计模式嵌入式系统设计是电气和计算机工程领域中最
    发表于 09-04 14:01

    嵌入式Linux 实时分析实时性改进

    分析Linux 实时性的同时,指出了将其应用于嵌入式实时系统时所存在的不足·研究了中断模拟和调
    发表于 04-21 23:32 16次下载

    面向嵌入式Linux系统的软中断设计与实现

    本文在分析标准Linux 内核的软中断机制的演化以及实现原理的基础上,提出并实现了一个面前嵌入式Linux
    发表于 08-03 11:20 16次下载

    嵌入式实时操作系统Petvos设计与实现

    PetOS 是一个自行设计的嵌入式实时操作系统。本文介绍了PetOS 的技术背景,并详细阐述PetOS 系统中的任务调度机制、任务管理机制以
    发表于 08-31 10:27 10次下载

    嵌入式系统开发之中断控制的实现

    嵌入式系统开发之中断控制的实现 中断是现代操作系统的一大特点,在
    发表于 05-15 18:28 926次阅读

    嵌入式实时操作系统ARTs-OS的中断管理

      ARTs-OS是一个基于微内核的嵌入式实时操作系统。ARTs-OS中的中断管理应该提供的基本功能包括:
    发表于 08-28 09:56 1051次阅读

    嵌入式实时系统及其在通信系统中的应用

    阐述了嵌入式实时系统的原理及特点,分析并论述嵌入式实时系统
    发表于 05-30 09:52 2938次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>实时</b><b class='flag-5'>系统</b>及其在通信<b class='flag-5'>系统</b>中的应用