μC/OS-Ⅲ系统的中断管理

一、典型的μ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()函数。该中断仅用于通知系统时钟节拍的到来。

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

时间: 2024-07-30 10:14:44

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

我理解的windows中断管理

只谈外部中断的windows内核管理,异常和trap不在此文的讨论之列. 1. windows中断总貌 在windows中,物理上的中断源被抽象为KINTERRUPT结构.一个中断源在windows中对应一个KINTERRUPT数组,数组的长度为CPU的个数,如果是单核系统,那么这个数组长度为1.先分析KINTERRUPT结果. windows存储了IDT(Interrupt Descriptor Table),这张表是一个数组结构,数组的下标是Vector号(此Vector不是PIC/APIC

第一次作业:基于Orange's OS系统的进程模型分析与心得体会

1一. 操作系统进程概念模型与进程控制块概念浅析 1. 什么是进程? 图 1 - 1 (WIN10系统任务管理器对进程管理的图形化界面) 计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. --百度百科 应用程序的实例.对正在运行的程序的抽象. --<现代操作系统> 2. 什么是进程控制块? 进程控制块(Processing Control Block),是操作系统核心中一种数据结构,主要表示进程状态.其作用是使一个在多道程序环境下不能独立

STM32中断管理函数

CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256 级的可编程中断设置.但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分. STM32 有76 个中断,包括16 个内核中断和60 个可屏蔽中断,具有16 级可编程的中断优先级. 而我们常用的就是这60 个可屏蔽中断,所以我们就只针对这60 个可屏蔽中断进行介绍. 在 MDK 内,与NVIC 相关的寄存器,MDK 为其定义了如下的结构体: typedef struct { vu32 I

x01.os.1: BIOS 中断

这只是一点准备工作.为了显示字符串,需要调用中断:int  0x10 (AH=0x13).具体参数设置,参考我的归纳整理如下: INT 10 (AH = 0) -----------------功能:设置显示方式调用参数:    AL = 00:40 * 25 黑白方式         01:40 * 25 彩色方式         02:80 * 25 黑白方式         03:80 * 25 彩色方式         04:320 * 200 彩色图形方式         05:320

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

继ARM公司发布了为嵌入式微控制器设计的Cortex-M7架构处理器,ARM又公布了专为廉价低功耗“物联网”设计的新版软件及系统平台,以加速物联网设备的发展及部署.该软件为基于ARM现有Cortex-M架构设计的mbed平台,包括免费的嵌入式mbed OS操作系统,以及软件工具包mbed Device Server,公司称“能够以安全的方式为连接和管理设备提供所需的服务器端技术”,ARM旨在借mbed基础软件为物联网设备打造“砖块”,物联网设备 供应商能够专注于为其产品增加更多新功能并从市场脱颖

STM32 μC/OS系统进睡眠模式的方法

本文版权:成都至诚恒远物联网技术有限公司 网址: www.heryit.cn 联系电话: 028-87657875 13060063607 前段时间做基于μC/OS系统的开发,遇到一个问题,在运行任务的时候需要使CPU进入睡眠状态几秒钟,但直接调用__WFI();时没有效果,后来查找资料发现需要在空闲任务中调用. 下面是我让cpu进入睡眠状态的例子: void  App_TaskIdleHook (void) { //检查标志确定是否需要睡眠  if(Flag_Power_Off != 0)  

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

目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机制> <Linux中断管理 (2)软中断和tasklet> <Linux中断管理 (3)workqueue工作队列> 关键词: 工作队列的原理是把work(需要推迟执行的函数)交由一个内核线程来执行,它总是在进程上下文中执行. 工作队列的优点是利用进程上下文来执行中断下半部操作,因此工作队列允许重新调度和睡眠,是异步执行的进程上下文,它还能解决软中断和tasklet执行时间过长导

STM32F103ZET6的中断管理

1.STM32的中断 STM32的中断管理是属于内核部分的,所以中断管理的寄存器也是属于内核组,不属于芯片外设,在查看相关资料的时候,需要查看相对应的内核手册. STM32F103ZET6是Cortex-M3内核的IC.Cortex-M3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置.但是STM32并没有完全使用Cortex-M3内核的全部中断,只是用了其中的一部分. 在STM32中,有时候中断也称为异常.系统异常,把它们统一理解为中断就可以了

C语言学习-中断管理总结 2020-3-1

1.异常与中断的概念: 异常:CPU处理器内部运行状态出现紧急状况,需要CPU去处理.例如:硬件错误,指令出错等异常,属于同步异常. 中断:CPU处理器外部运行状态出现紧急状况,需要CPU去处理.例如:外设请求中断以及外部事件输入导致的中断,属于异步异常. 异常与中断的区别:导致异常的事件来源不同,一个是内部事件,一个是外部事件:另一方面,同步异常产生后,处理器必须立马响应,而异步异常产生后,处理器可以选择延缓处理或者不处理. 中断:中断其实就是CPU的常规执行流程被事件打断,迫使CPU进入紧急

OS 系统下安装MySql 配置MySql环境变量

学习Hive需要,闲话不说 本文的内容: 下载Mysql for Mac 下载Mysql Workbench 安装 Mysql 和 Mysql Workbench 配置Mysql在OS 系统上的环境变量 进入MySql 1.下载Mysql for Mac      下载地址:http://dev.mysql.com/downloads/ 注意,下载末尾是 .dmg格式的文件,这要下错..... 2.下载Mysql Workbench   下载地址:http://dev.mysql.com/dow