一、典型的μ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. mac上eclipse用gdb调试(转)

    mac上eclipse用gdb调试 With its new OS release, Apple has discontinued the use of GDB in OS X. Since 2005 ...

  2. 2.ReactNative Properties|States|Styles 笔记

    原文地址:http://reactnative.cn/docs/0.31/props.html#content 1. property: 如下代码所示 import React, { Componen ...

  3. 学习视频更新管理,对于前面数据库视频资料,以及.net资料失效感到抱歉

    首先,对不起,各位网友,我知道也都是好学的的人才会来查找视频,抱歉视频失效了.以后有需要的可以常联系我,有错误定当及时改正.如有延误多多包含. 上一次发的.net学习视频失效了,我决定帮大家多找一些学 ...

  4. R中数据拆分和整合

    library(data.table)ID <- c(NA,1,2,2)IDTime <- c(1,2,NA,1)TimeX1 <- c(5,3,NA,2)X1X2 <- c( ...

  5. 如何获得APP内部资源

    安装一个iTools(百度一下就有) 用USB连接设备,打开iTools

  6. Selenium碰到的异常记录

    .markdown-preview:not([data-use-github-style]) { padding: 2em; font-size: 1.2em; color: rgb(171, 178 ...

  7. nginx 日志变量含义

    log_format logstash "remote_addr | $time_local | $request | $status | $body_bytes_sent | " ...

  8. javascript面向对象(学习和理解)

    js中创建变量基本如下: var name = 'saodiseng'; var email = 'wuyucoder@126.com'; var website = 'http://www.cnbl ...

  9. html在一个页面显示另一个页面的部分内容

    老板今天让在网站上面显示实时监控画面,研究了一早,找了个简单的方法 先把监控分享在网上(我使用的海康威视摄像头,分享到萤石直播http://square.ys7.com/square/index.js ...

  10. Baltic2008联合内阁

    Description      N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如 ...