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. Linux服务器CPU使用率较低但负载较高

    CPU使用率较低但负载较高 问题描述 Linux 系统没有业务程序运行,通过 top 观察,类似如下图所示,CPU 很空闲,但是 load average 却非常高,如下图所示. 处理办法 load ...

  2. UBANTU zongjie

    1.fatal error: openssl/aes.h: No such file or directory 要在Debian.Ubuntu或者其他衍生版上安装OpenSSL: $ sudo apt ...

  3. Airtest iOS测试环境部署

    [本文出自天外归云的博客园] 简介 这个Airtest IDE是通过iOS-Tagent来操作iPhone的,你可以在Airtest IDE里录制脚本来实现自动化操作iPhone 前提 1. 得有个i ...

  4. C#学习笔记(34)——委托传值(回忆版)

    说明(2018-4-6 20:31:03): 1. 昨天晚上看三层,看完第一天的最后一节,会员的修改和增加,感觉欲仙欲死,果断关机睡觉. 2. 上午搞了半天哈利波特的原版书epub的下载,结果都没发现 ...

  5. 【转载】基于rasa的对话系统搭建(上)

    文章介绍使用rasa nlu和 rasa core 实现一个电信领域对话系统demo,实现简单的业务查询办理功能,更完善的实现需要进一步数据的收集.demo基于玩具数据集,可以达到下面的效果: Bot ...

  6. HttpWebRequest 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系

    请求对象前加入 ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate; 然后实现该方法 ...

  7. PCL_common模块api代码解析

    pcl_common库包含大多数PCL库使用的公共数据结构和方法.核心数据结构包括PointCloud类和许多用于表示点.表面法线.RGB颜色值.特征描述符等的点类型.它还包含许多用于计算距离/范数. ...

  8. SQUAD的rnet复现踩坑记

    在港科大rnet(https://github.com/HKUST-KnowComp/R-Net) 实现的基础上做了复现 采用melt框架训练,原因是港科大实现在工程上不是很完美,包括固定了batch ...

  9. Kafka集群管理工具kafka-manager的安装使用

    一.kafka-manager简介 kafka-manager是目前最受欢迎的kafka集群管理工具,最早由雅虎开源,用户可以在Web界面执行一些简单的集群管理操作.具体支持以下内容: 管理多个集群 ...

  10. Windows Server2012R2 FTP服务器配置

    转载博客:http://blog.csdn.net/smalllu161226/article/details/53887751 1.打开windows server2012R2 服务器管理器界面 添 ...