参考:

  1. 【野火】物联网操作系统 LiteOS 开发实战指南
  2. Huawei LiteOS | 中文网

9. 中断管理

9.1 概况

9.1.1 基本概念

  • 中断:指CPU正在处理某件事的时候,外部发生了某一事件,请求CPU迅速处理,CPU暂时中断当前的工作,转入处理所发生的事件,处理完之后再回到原来被中断的地方,继续原来的工作,这样的过程称为中断
  • 中断一般用于处理比较紧急的事件,而且只做简单处理,如标志该事件,一般建议使用信号量、消息或事件标志组等标志中断的发生,并将这些内核对象发布给处理任务,处理任务再做具体处理
  • 与中断相关的硬件划分为三类:
    • 外设:当外设需要请求 CPU 时,产生一个中断信号,该信号连接至中断控制器
    • 中断控制器:中断控制器是 CPU 众多外设中的一个,它一方面接收其他外设中断信号的输入,另一方面,它会发出中断信号给 CPU。可以通过对中断控制器编程实现对中断源的优先级、触发方式、打开和关闭源等设置操作 ,譬如Cortex-M 的NVIC,NVIC 最多支持 240 个中断,每个中断最多 256 个优先级
    • CPU本身:CPU 会响应中断源的请求,中断当前正在执行的任务,转而执行中断处理程序。

9.1.2 和中断相关的名词解释

  • 中断号:每个中断请求信号都会有特定的标志,使得计算机能够判断是哪个设备提出的中断请求,这个标志就是中断号
  • 中断请求:“紧急事件”需向CPU提出申请(发一个电脉冲信号),要求中断,及要求CPU暂停当前执行的任务,转而处理该“紧急事件”,这一申请过程称为中断申请
  • 中断优先级:为使系统能够及时响应并处理所有中断,系统根据中断时间的重要性和紧迫程度,将中断源分为若干个级别,称作中断优先级。Huawei LiteOS支持中断控制器的中断优先级及中断嵌套,同时中断管理未对优先级和嵌套进行限制
  • 中断处理程序:当外设产生中断请求后,CPU暂停当前的任务,转而响应中断申请,即执行中断处理程序
  • 中断触发:中断源发出并送给CPU控制信号,将接口卡上的中断触发器置“1”,表明该中断源产生了中断,要求CPU去响应该中断,CPU暂停当前任务,执行相应的中断处理程序
  • 中断触发类型:外部中断申请通过一个物理信号发送到NVIC,可以是电平触发或边沿触发
  • 中断向量:中断服务程序的入口地址
  • 中断向量表:存储中断向量的存储区,中断向量与中断号对应,中断向量在中断向量表中按照中断号顺序存储

9.1.3 LiteOS的中断支持

  • 接管中断版本:

    • 中断初始化
    • 中断创建
    • 开/关中断
    • 恢复中断
    • 中断使能
    • 中断屏蔽
  • 非接管中断版本:
    • 开/关中断
    • 恢复中断
    • 中断使能
    • 中断屏蔽

9.2 中断的运作机制

9.2.1 中断执行顺序

当中断产生时,处理机将按如下顺序进行执行:

  1. 保存当前处理机状态信息
  2. 载入异常或中断处理函数到PC寄存器
  3. 把控制权转交给处理函数并开始执行
  4. 当处理函数执行完成后,恢复处理器状态信息
  5. 从异常或中断中返回到前一个程序执行点

可以通过两条特殊的指令关中断开中断让处理器不响应或响应中断,在关闭中断期间,通常处理器会把新产生的中断挂起,当中断打开时立即进行响应,所以会有适当的延时响应中断,故用户在进入临界区的时候应快进快出

9.2.2 中断发生的环境

  • 在任务的上下文中

    任务在工作的时候,如果此时发生了一个中断,无论中断优先级是多大,都会打断当前任务的执行,从而转到对应的中断服务函数中执行,如下图所示的过程:

  • (1)、(3):在任务运行的时候发生了中断,那么中断会打断任务的运行,那么操作系统会先保存当前任务的上下文环境,转而去处理中断服务函数

  • (2)、(4):当且仅当中断服务函数处理完的时候才恢复任务的上下文环境,继续执行运行任务

  • 在中断服务函数处理上下文中

    在执行中断服务函数过程中,如果有更高优先级别的中断源触发中断,由于当前处于中断处理上下文环境中,根据不同的处理架构可能有不同的处理方式:

    • 的中断等待挂起直到当前中断处理离开后再进行响应
    • 的高优先级中断打断当前中断处理过程,而去响应这个更高优先级的新中断源,也称为中断嵌套,LiteOS允许中断嵌套

    如下图所示:

    • (1):当中断1的服务函数在处理的时候发生了中断2,由于中断2的优先级较中断1更高,所以发生了中断嵌套,那么操作系统将先保存当前中断服务函数的上下文环境,并且转向处理中断2
    • 当且仅当中断2执行完的时候,才能继续执行中断1

9.2.3 中断延迟

  • 中断延迟是指从中断开始的时刻终端服务函数例程开始执行时刻之间的时间段
    中断延迟=识别中断时间+[等待中断打开时间]+[关闭中断时间]中断延迟 = 识别中断时间 + [等待中断打开时间] + [关闭中断时间] 中断延迟=识别中断时间+[等待中断打开时间]+[关闭中断时间]

    注:此处指最大可能的中断延迟时间

    • 识别中断时间:外界硬件发生中断后,CPU读取中断向量,查找中断向量表找到对应中断服务子程序(ISR)的首地址,然后跳转到对应的ISR去做相应处理的时间
    • 等待中断打开时间
      • (支持中断嵌套的环境)高优先级中断服务函数正在执行,低优先级中断发生,会等待高优先级中断服务函数执行完毕之后才会响应低优先级中断,这部分时间
      • (不支持中断嵌套的环境)当前中断正在处理,发生另一个中断,系统不会立即响应,等待当前中断处理完毕才会响应,这部分时间
    • 关闭中断时间:操作系统中,很多时候我们会主动进入临界段,系统不允许当前状态被中断打断,临界区发生的中断会被挂起,直到退出临界段时候打开中断,这部分时间

9.3 开发说明

9.3.1 接管中断版本

接管简单来说就是,所有的中断都由 RTOS 的软件管理,硬件来了中断时,由软件决定是否响应,可以挂起中断,延迟响应或者不响应

  • 功能函数

    Huawei LiteOS 系统中的中断模块为用户提供下面几种功能。

接口名 描述
LOS_HwiCreate 硬中断创建,注册硬中断处理程序
LOS_IntUnLock 开中断
LOS_IntRestore 恢复到关中断之前的状态
LOS_IntLock 关中断
LOS_HwiDelete 硬中断删除
  • 函数详解

    • 创建硬件中断函数LOS_HwiCreate()

      LiteOS接管了中断,那么关于中断的注册创建也是由LiteOS管理

      UINT32 LOS_HwiCreate(HWI_HANDLE_T  uwHwiNum,    //硬件的中断向量号HWI_PRIOR_T   usHwiPrio,  //硬件中断优先级HWI_MODE_T    usMode,      //硬件中断模式HWI_PROC_FUNC pfnHandler,   //中断服务处理函数HWI_ARG_T     uwArg )     //输入参数
      
    • 删除硬件中断函数LOS_HwiDelete()

      当某些中断不需要使用的时候,就可以进行注销(删除),当删除了中断的时候就无法再次使用

      UINT32 LOS_HwiDelete(HWI_HANDLE_T uwHwiNum)     //硬件中断向量号
      
  • 开发流程

    1. 修改配置项

      • 打开硬中断裁剪开关:LOSCFG_PLATFORM_HWI 定义为 YES
      • 配置硬中断使用最大数:LOSCFG_PLATFORM_HWI_LIMIT
    2. 调用中断初始化 LOS_HwiInit 接口
    3. 调用中断创建接口 LOS_HwiCreate 创建中断,根据需要使能指定中断
    4. 调用 LOS_HwiDelete 删除中断
  • 注意事项

    • 创建中断并不等于已经初始化中断了,真正的初始化还是由我们自己编写,所以注册之前,应先将中断初始完成
    • 根据具体硬件平台,配置支持的最大中断数及中断初始化操作的寄存器地址。在Cortex-m3, Cortex-m4, Cortex-m7 中基本无需修改, LiteOS 已经处理好,直接使用即可
    • 中断处理程序耗时不能过长,影响 CPU 对中断的及时响应
    • 关中断后不能执行引起调度的函数
    • 中断恢复 LOS_IntRestore 的入参必须是与之对应的 LOS_IntLock 保存的关中断之前的PRIMASK的值

9.3.2 非接管中断

  • 非接管中断的方式其实跟裸机差不多,需要我们自己配置中断,并且使能中断,编写中断服务函数
  • 在中断服务函数中使用内核IPC通信机制,一般建议使用:
    • 信号量
    • 消息
    • 事件标志组等标志事件的发生,
  • 将事件发布给处理任务,等退出中断后,再由相关处理任务具体处理中断

LiteOS 中断管理相关推荐

  1. 一起来学习LiteOS中断模块的源代码

    摘要:本文带领大家一起剖析了LiteOS中断模块的源代码. 本文我们来一起学习下LiteOS中断模块的源代码,文中所涉及的源代码,均可以在LiteOS开源站点https://gitee.com/Lit ...

  2. nrf52840 gpiote如何配置中断输入_STM32第四章外部中断管理

    点击上方"果果小师弟",选择"置顶/星标公众号"干货福利,第一时间送达!STM32F4 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32F4 ...

  3. 【Linux 内核】Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )

    文章目录 一.进程调度 二.内存管理 三.中断管理 四.设备管理 五.文件系统 一.进程调度 进程调度 : 进程 是 系统中 进行 资源分配 的 基本单位 ; 每个进程 在 运行时 , 都 感觉自己占 ...

  4. 学习正点原子讲解FreeRTOS中断管理心得和cortex-M3权威指南笔记

    1.一个任务恢复运行: (1)恢复一个任务的运行:将一个任务从挂起态恢复到就绪态,只有通过函数vTaskSuspend()设置为挂起态的任务才能使用vTaskResume()恢复,函数原型为void ...

  5. Linux中的中断管理机制

    1.中断相关基础知识介绍 1.1.中断产生背景 假设现在CPU需要去获取一个键盘的时间,如果处理器发出一个请求信号之后一直在轮询键盘的响应,由于键盘响应速度比处理器慢得多并且需要等待用户输入,这对于C ...

  6. 10.FreeRTOS学习笔记-中断管理

    FreeRTOS 的中断管理支持: 开/关中断. 恢复中断. 中断使能. 中断屏蔽. 可选择系统管理的中断优先级 中断管理的运作机制 当中断产生时,处理机将按如下的顺序执行: 保存当前处理机状态信息 ...

  7. LiteOS 内存管理

    参考: [野火]物联网操作系统 LiteOS 开发实战指南 Huawei LiteOS | 中文网 8. 内存管理 8.1 基本概念 8.1.1 概念 LiteOS操作系统将内核与内存管理分开实现,操 ...

  8. FreeRTOS Cortex-M 中断管理

    目录 1.中断简介 中断的优先级数字越小优先级越大,这是它内部的15个 外部的有140个但用不了那么多 ​编辑 WEAK NVIC 的访问地址是 0xE000_E000 NVIC结构体里的寄存器 优先 ...

  9. (四)STM32F407总线架构、时钟系统配置相关的函数,IO 引脚复用器和映射,NVIC中断管理,寄存器地址映射

    基础知识 一.GPIO输入输出各种模式 二.STM32F407总线架构 三.STM32F407时钟系统 (1) STM32F4 时钟树概述 (2)STM32F4 时钟初始化配置 (3)STM32F4 ...

最新文章

  1. [iOS]开发者证书和描述文件的作用
  2. 【习题3】数字和数学计算【第4天】
  3. 关于类、方法、对象(实例):静态方法
  4. HTML实时显示任务状态,如何监视后台任务进度和完成 (HTML)
  5. 【转】什么是CT使用的水模、体模
  6. 聊聊、Integer 封装特性
  7. python处理出租车轨迹数据_1-出租车数据的基础处理,由gps生成OD(pandas).ipynb...
  8. Windows 硬盘分区整数大小计算
  9. WKWebView刷新URL
  10. ant组件中select默认选中某一项
  11. arm9开发板重新生成文件系统,并烧写
  12. 【HDU 4699】Editor【栈】
  13. 大雪坪剑来 Spring Cloud 教程(二):Spring Boot 集成 mybatis 实现增删改查
  14. Python用PIL获取图片信息
  15. Android调用系统闹钟AlarmClock
  16. ARCGIS绘制南海图框
  17. 滑动鼠标滚轮后浏览器页面抖动
  18. 如何识破钓鱼邮件攻击
  19. LCD 调试技巧 01
  20. C语言排列组合(函数

热门文章

  1. 专访迅游科技袁旭:聚焦三大核心业务板块,差异化网络通信能力让赛道不断拓宽...
  2. 【论文阅读】计算机视觉经典论文合辑
  3. 复制文件或文件夹时出错(无法复制***:没有足够的可用磁盘空间。) .
  4. 计算机毕业论文选题推荐|软件工程|系列九
  5. SAP MM 第一节 后台配置
  6. ag-grid——表格插件
  7. react 是怎么运行的?
  8. python opencv error “parallel_impl.cpp (240) WorkerThread 155: Can‘t spawn new thread: res = 11“
  9. uFTP-Linux下FTPServer实现
  10. 2017年爱奇艺校招模拟笔试编程