1.CPU的中断处理

理器通常有多个中断源。 例如, UART中断、 DMA中断、 ADC中断、定时器中断等。

2.中断器件标志中断处理器,然后中断处理器将优先级最高的中断
提交给CPU。

现在的中断控制器都是智能的,允许定义中断优先级,记住哪些中断还处于挂起状态。在大多数情况下,中断控制器会直接提供对应ISR的向量地址给CPU 。

如果全局中断被关闭,CPU就会忽视来自于中断控制器的中断请求,但这些请求会在中断控制器中被挂起直到CPU重新开启中断。 

3. CPU处理中断有两种模式:
(1).所有的中断指向同一个ISR
(2).每个中断指向各自的ISR

4.典型的中断服务程序

进入中断时 CPU需执行的一些步骤。其中( 2)( 3)( 10)( 11)
是处理器自动完成的。( 4) ~( 9)需用户在ISR中编写。

( 9).ISR的工作完成后,用户必须调用OSIntExit()告诉uC/OS-III
中断服务程序已经完成。 OSIntExit()中将OSIntNestingCtr递减, 如果其值变为0,就意味着ISR将会返回到任务级代码(否则返回前一层的中断)。

中断服务中可能使能了比原任务更高优先级的任务。这时uC/OS-III选择优先级最高的就绪任务或返回原任务。

( 10).如果ISR使能了一个更低优先级的任务, OSIntExit()返回
原任务。

5.短中断服务程序( ISR)

上述顺序的代码是假定ISR会发送信号量或消息给任务。然而,
在很多情况下, ISR不需要发送通知任务, 而是在ISR中直接完成需要的工作(假定需要完成的工作代码较短)。在这种情况下, ISR的结构如下所示:

短ISR程序, 如上所定义, 是一个例外。 它不遵循uC/OS-III的规则,所有uC/OS-III不知道ISR中发生了什么。

6.每个中断向量指向不同的地址

中断向量控制器中的中断向量都指向对应的ISR地址。 ISR中的程序尽可能用汇编写(如章节9-2所示)。当然,这样会导致编程的复杂化。

然而,其中大部分的代码都是从另一个ISR中复制和黏贴的。
除了一些用户要改变的代码。

7.直接提交和延迟提交

uC/OS-III有两种方法处理来自于中断的时间; 直接提交和延迟提交。通过OS_CFH.H中的OS_CFG_ISR_POST_DEFERRED_EN来选
择。当设置为0时, uC/OS-III使用直接提交方法。 当设置为1时,
使用推迟提交方法。

(1).直接提交

( 3)若ISR使能了低于或等于原任务优先级的任务, ISR
结束时, uC/OS-III返回原任务并从被中断处继续执行。
( 4)若ISR使能了高于原任务优先级的任务, ISR结束
后,进入调度。 uC/OS-III切换到高优先级任务。

(2).延迟提交方式

延迟提交方式(通过设置OS_CFG_ISR_POST_DEFERRED_EN为1),代替了关中断方式用于处理临界段。 uC/OS-III锁住调度器,

这可以避免其它任务访问临界段代码。 延迟提交方式中, 中断几乎没被关闭。然而,该方式有点复杂。

( 3) ISR中调用"post"函数发送信号量或消息给任务。然而, 它不是直接发送给任务, 而是先发送到中断队列。 然后中断处理函数被就绪。这是uC/OS-III的内部任务且具有最高优先级(优先级为0)。

( 4) ISR的最后, uC/OS-III会切换到中断处理任务,它将中断队列中消息发送给任务。 在此, 我们关闭中断防止在处理中断队列时被另外的中断程序打断。 最后,

该任务使能中断, 锁住调度器, 提交信息。 信息是在任务级被提交的。 这样, 就是在任务级完成临界段的处理了。

( 5)当中断处理任务清空中断队列时,它就会将自己停止,重
新开启调度器,调用调度器选择下一个任务运行。
( 6)如果优先级更高的任务被使能, uC/OS-III会上换到该任务。

8.直接提交VS延迟提交

在直接提交方式中, uC/OS-III访问临界段时关中断。 然而, 在延
迟提交方式中, uC/OS-III访问临界段时锁调度器。
在延迟提交方式中,访问中断队列时uC/OS-III需要关中断。然而,
这段关中断时间是非常短的且是相当固定的。

如果在应用中关中断时间是关键性的,因为应用中有非常频繁的中断源, 且应用不能接受直接提交方式那样较长的关中断时间。 推荐使用延迟提交方式。

如果多个任务具有相同的优先级或者多个任务等待不同的事件,遍历这些等待的事件任务需要很长的处理时间意味着产生长临界段、挂起多个对象,

它需要很长的临界段、使用广播消息(uC/OS-III在处理广播消息时通过关调度器保护临界段),等这些情况可以使用延迟提交方式。

9.系统时基

uC/OS-III需要一个能提供周期性时间的时基源,叫做系统时基。硬件定时器可以被设置为每秒产生10到1000Hz的中断提供系统时基。也可以从交流电中获得50Hz到60Hz的时基源。

事实上,也可以从交流电中获得100Hz到120Hz的过零点作为时基。

时基可以看做是系统的心跳。它的速率决定于时基源。然而,时基速率越快,系统的额外支出就越大。

时基中断程序必须调用OSTimeTick()OSTimeTick() 

7.0-uC/OS-III中断管理的更多相关文章

  1. uc/os iii移植到STM32F4---IAR开发环境

    也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...

  2. uC/OS - III 移植 IAR平台

    关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...

  3. Linux中断管理

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

  4. uC/OS II原理分析及源码阅读(一)

    uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...

  5. 基于μC/OS—III的CC1120驱动程序设计

    基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120   嵌入式操作系统   STM32F103ZE   ...

  6. uC/OS 的任务调度解析 (转)

    uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...

  7. 【原创】uC/OS II 任务切换原理

    今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...

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

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

  9. 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II

    SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...

  10. STM32中断管理函数

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

随机推荐

  1. PHP 开发者的 Docker 之旅

    用 PHP 作为我们「Docker 开发大礼包」开篇是带着一些朝圣的心情的.这是一门堪称「古老」的语言,这也是一门争议最多的语言,这更是一门不断涅槃的语言.「PHP 是最好的语言」这个流传已久的梗,或 ...

  2. ownCloud安卓android客户端版本2.9.3

    2018年11月26日 版本升级:ownCloud 2.9.3. 下载地址 2018年7月28日 版本升级:ownCloud 2.8.0,支持指纹.图案登录APP. 2018年2月6日 版本升级:ow ...

  3. linux服务器ssh防爆破

    查看爆破次数记录 # cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2&quo ...

  4. web多站点跨域访问

    有时项目app和m 需要公用一套接口 这个时候就要用到跨域:特别是app接口跨域访问站点时. 跨域配置: 1.iis服务器上需要安装URLwrite2.0 2.web.config 需要添加这个配置: ...

  5. 【Unity】微信支付SDK官方安卓Demo的使用问题

    Unity3d使用微信支付是属于APP内发起支付调用的情况,其本质上是在安卓项目上使用微信SDK,安卓项目开发完成后再导入到Unity中作为Unity插件使用,即Unity中C#调用安卓(Java)代 ...

  6. 梯度下降(gradient descent)算法简介

    梯度下降法是一个最优化算法,通常也称为最速下降法.最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的.最速下降法是用 ...

  7. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  8. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序。

      SortedSet可自动为元素排序. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序.   练习:自定义类用TreeSet排序. 与HashSet不同, ...

  9. Flask-SQLAlchemy 中多表链接查询(不使用外键)

    SQLAlchemy 是一个功能强大的 ORM . Flask-SQLAlchemy 是一个 Flask 插件,它让我们在 Flask 框架中使用 SQLAlchemy 变得更容易. 本篇介绍我在使用 ...

  10. etl数据同步工具 kettle

    kellet使用 https://www.cnblogs.com/gala1021/p/7814712.html