一、典型的μC/OS-Ⅲ中断服务程序解析

μC/OS-Ⅲ系统中典型有内核参与中断服务程序示例如下:

MyISR:                                                                 (1)

Disable all interrupts;                                (2)

Save the CPU registers;                             (3)

OSIntNestingCtr++;                                    (4)

if(OSIntNestingCtr == 1){                           (5)

OSTCBCurPtr->StkPtr = Current task's CPU stack pointer register value;

}

Clear interrupting device;                          (6)

Re-enable interrupts(optional);                (7)

Call user ISR;                                                 (8)

OSIntExit();                                                    (9)

Restore the CPU registers;                        (10)

Return from interrupt;                               (10)

(1)中断服务程序需要用汇编语言编写,MyISR需要替换为自定义的中断服务程序名称。

(2)在进入中断后进行其他处理前需要关闭所有中断,防止其他中断打断现场保护程序。若CPU对此功能进行硬件处理,则不需软件做任何工作。

(3)现场保护。μC/OS-Ⅲ系统中要求将全部需要进行现场保护的通用寄存器和特殊寄存器存入任务堆栈。

(4)递增OSIntNestingCtr变量,该变量指示中断嵌套层数。

(5)如果OSIntNestingCtr为1表示有任务被打断,进行现场保护时需要将被打断的任务指针保存到OS_TCB中。

(6)完成现场保护后,需要清除中断,以防止退出中断处理函数后重复执行中断。

(7)如果需要实现中断嵌套,此处可以重新打开中断。(可选)

(8)调用用户编写的中断处理程序user ISR。此程序应该尽量精简。

(9)中断服务程序结束后,调用OSIntExit()程序通知系统内核发生中断。在OSIntExit()中会递减OSIntNestingCtr,当发现OSIntNestingCtr为0,即已返回任务级程序,则执行任务调度,有优先级更高的程序需要执行,则直接执行,不再返回中断。若无更高优先级任务,则返回中断。

(10)若能返回中断继续执行,则进行现场恢复。并返回之前中断的任务。

μC/OS-Ⅲ系统中典型无内核参与中断服务程序示例如下:

MyshortISR:                                                                    (1)

Save enough registers as needed by the ISR;         (2)

Clear inter rupting device;                                         (3)

DO NOT re-enable interrupts;                                   (4)

Call user ISR;                                                                 (5)

Restore the saved CPU registers;                             (6)

Return from interrupt;                                               (6)

(1)同上,该名称需要替换为自定义中断服务函数名。

(2)此处仅保存中断服务程序需要使用的寄存器。

(3)清中断,避免中断服务程序退出后再次响应中断。

(4)注意此处不可重开中断,因为重开中断后,高优先级中断可能打断此中断执行,若高优先级中断调用系统内核,会导致中断时间变长。

(5)调用中断处理函数。

(6)中断处理完成,恢复CPU寄存器,返回原任务。

问题:此代码中无关中断操作,为何?

二、中断向任务发布消息的方式

(1)直接发布

直接发布方式是指响应中断后,中断处理函数处理了中断所需请求,然后调用系统内核,检测是否有高优先级任务就绪,进行任务调度。此模式下使用关中断方式来保护临界段代码。

(2)延迟发布

延迟发布方式是指响应中断后,中断处理函数对中断请求进行初步处理,然后将中断送入中断队列,等待进一步处理,之后就从中断返回。此模式下使用锁定调度器的方式保护临界段代码。

三、系统节拍中断

基于μC/OS-Ⅲ的系统通常需要底层平台提供一个周期性的定时信号,称为时钟节拍,或系统节拍。该时钟信号周期一般为10~1000Hz。

时钟节拍中断大体与其他中断相同,只是必须调用OSTimeTick()函数。该中断仅用于通知系统时钟节拍的到来。

时钟节拍可以用来实现延时、超时等待等系统功能服务。

μC/OS-Ⅲ系统的中断管理的更多相关文章

  1. 7.1-uC/OS-III中断管理

    在 uC/OS 系统中,中断相当于一个优先级最高的任务.中断一般用于处理比较紧急的事件, 而且只做简单处理,例如标记该事件,带退出中断后再做详细处理.在使用 uC/OS系统时, 一般建议使用信号量. ...

  2. STM32中断管理函数

    CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256 级的可编程中断设置.但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分. STM32 ...

  3. ARM公布“物联网”嵌入式mbed OS系统软件平台

    继ARM公司发布了为嵌入式微控制器设计的Cortex-M7架构处理器,ARM又公布了专为廉价低功耗“物联网”设计的新版软件及系统平台,以加速物联网设备的发展及部署.该软件为基于ARM现有Cortex- ...

  4. 使用VMware Workstation Pro 12 虚拟机安装Mac OS系统教程 全程图解

    导读:使用虚拟机安装Windows.Linux或者Ubuntu系统大家或许看了很多,但如何使用VMware Workstation Pro 12安装Mac OS,的确需要好好研究一番:否则无法下手,因 ...

  5. Linux中断管理

    CPU和外设之间的交互,或CPU通过轮询机制查询,或外设通过中断机制主动上报. 对大部分外设中断比轮询效率高,但比如网卡驱动采取轮询比中断效率高. 这里重点关注ARM+Linux组合下中断管理,从底层 ...

  6. Linux中断管理 (1)Linux中断管理机制

    目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机制> <Linux中断管理 (2)软中断和tasklet> <Linux中断管 ...

  7. Linux中断管理 (2)软中断和tasklet

    目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机制> <Linux中断管理 (2)软中断和tasklet> <Linux中断管 ...

  8. Linux中断管理 (3)workqueue工作队列

    目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机制> <Linux中断管理 (2)软中断和tasklet> <Linux中断管 ...

  9. linux 的基本操作(linux系统的日常管理)

    系统的日常管理 笔者在前面介绍的内容都为linux系统基础类的,如果你现在把前面的内容全部很好的掌握了,那最好了.不过笔者要说的是,即使你完全掌握了,你现在还是不能作为一名合格的linux系统管理员的 ...

  10. 【swupdate文档 一】嵌入式系统的软件管理

    嵌入式系统的软件管理 嵌入式系统变得越来越复杂, 它们的软件也反映了这种复杂性的增加. 为了支持新的特性和修复,很有必要让嵌入式系统上的软件 能够以绝对可靠的方式更新. 在基于linux的系统上,我们 ...

随机推荐

  1. Upload java coed in Ubuntu(在Linux 16上,上传代码)

    指令如下:(按照如下指令顺序执行即可) 1.git status  (注释:可以查看哪些代码改动了) 2.git add .     (注意:不要漏掉add后面的" . ",将本地 ...

  2. xml 方式更新和获取 配置文件 appSettings 节点 解决办法

    最近在搞一个小程序,会用到动态修改配置文件来进行处理,在百度上找了很多办法,但是始终达不到我预想的效果,先列出程序运行环境和开发工具版本: 开发工具:VS2010 .Net 运行环境:4.0 有两种方 ...

  3. Gradle版本变更的问题

    了解相关三个概念 gradle .gradle wrapper . gradle plugin (1)Gradle  :  项目的构建工具,管理一个项目的依赖架包.性质和maven相似. (2)Gra ...

  4. jpg/png格式图片转eps格式的方法总结

    jpg/png格式图片转eps格式的方法总结 转自http://blog.sina.com.cn/s/blog_5410e7b50101lme2.html 用latex写论文的筒子应该遇到这样的问题: ...

  5. FtpClient.storeFile返回false解决方法

    在确定路径和文件名没有中文的情况下添加以下代码 ftp.setFileTransferMode(ftp.BINARY_FILE_TYPE); ftp.enterLocalPassiveMode();/ ...

  6. 关于STM32的抢占式优先级说明。——Arvin

    关于STM32的中断设置.--Arvin 中断 STM32 很多人在配置STM32中断时对固件库中的这个函数NVIC_PriorityGroupConfig()配置优先级分组方式,会很不理解,尤其是看 ...

  7. Asp.Net_<%%>模式常用语法

    1.//弹出对话框.点击转向指定页面 Response.Write("<script>window.alert('该会员没有提交申请,请重新提交!')</script> ...

  8. Docker容器是否可以改变世界?

    Docker容器是否可以改变世界? 2016-01-15 杜亦舒 2016年了,很多大牛开始预测技术趋势,其中一个普遍的观点我也很认同: Docker会更加流行,会改变程序世界 2015年的上半年我接 ...

  9. 两个list 合并成新一个list

  10. contiki-rime-单跳单播

    rucb是单跳单播的最顶层,将数据以块为单位进行传输(Bulk transfer). ruc,Reliable communication,保证可靠通信,主要实现确认和序列功能. suc,Stubbo ...