1.临界段 (临界段代码,也叫临界区,是指那些必须完整连续运行,不可被打断的代码段)

锁调度器,可以执行ISR,开启调度器不可执行ISR;
(1).临界段代码,也称作临界域,是一段不可分割的代码。 uC/OS-III中包含了很多临界段代码。 如果临界段可能被中断, 那么就需要关中断以保护临界段。 如果临界段可能被任务级代码打断, 那么需要锁调度器保护临界段。
(2).uC/OS-III中的临界段的保护方法决定于 ISR中对消息的处理方式。
(3).如 果OS_CFG_ISR_POST_DEFERRED_EN被设为0(见OS_CFG.H),在进入临界段之前 uC/OS-III 会关中断。如 果OS_CFG_ISR_POST_DEFERRED_EN被设为 1,在进入大多数临界段之前会关调度器。
(4).uC/OS-III定义了一个进入临界段的宏和两个出临界段的宏。
OS_CRITICAL_ENTER( ),
OS_CRITICAL_EXIT( ),
OS_CRITICAL_EXIT_NO_SCHED()
2.关中断
设置 OS_CFG_ISR_POST_DEFERRED_EN为 0后,在进入临界段之前uC/OS-III会关中断,在离开临界段之后开中断。

3.关中断测量
(1).uC/CPU提供了测量关中断时间的功能。通过设置CPU_CFG.H中的CPU_CFG_TIME_MEAS_INT_DIS_EN为1启用该功能。
(2).每次关中断前开始测量,开中断后结束测量。测量功能保存了 2个方面的测量值, 任务总的关中断时间, 每个任务最近一次关中断的时间。因此,用户可以根据任务的关中断时间对其加以优化。
(3).时间戳的控制单元位于CPU_TS中。时间戳的速率决定于CPU的速率。 例如, 如果CPU速率为1MHz, 时间戳的速率为1MHz。 那么CPU_TS的分辨率为1微秒。
显然, 测出的关中断时间还包括了测量时消耗的额外时间。 然而,减掉测量时所耗时间就是实际上的关中断时间。关中断时间跟处理器的指令、 速度、 内存访问速度有很大的关系。在这种情况下, 硬件设计者应介绍内存的访问速度, 它是影响整个系统性能的。
3.锁住调度器
当设置 OS_CFG_ISR_POST_DEFERRED_EN为 1时,在进入临
段前uC/OS-III会锁住调度器,退出临界段后开启调度器。
4.测量锁调度时间
(1).uC/OS-III提供了测量锁调度器时间的功能, 通过设置OS_CFG.H中的OS_CFG_SCHED_LOCK_TIME_MEAS_EN为1开启。
(2).加锁调度器前测量开始,解锁调度器后测量结束。测得的两种值为:总的锁调度器时间,每个任务的锁调度器时间。因此,用户可以知道每个任务的锁调度器时间,并根据此优化代码。
(3).测得的锁调度器时间还包括测量时额外增加的时间。减掉额外的时间就是锁调度器时间的准确值。
5.uC/OS-III与长临界段

8.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. 【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理

    LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr = SS:SP!!! ], SS ;将当前SS(栈的基地址)寄存器值存放至当前任务控制 ...

  4. RTX临界段,中断锁与任务锁

    临界段         代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被中断,在进入临界段之前须关中断,而临界段代码执行完毕后,要立即开中断.    ...

  5. FreeRTOS 临界段和开关中断

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被中断 ...

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

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

  7. uc/os任务创建

    问题描述:      uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...

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

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

  9. 关于uC/OS的简单学习(转)

    1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...

随机推荐

  1. “failed to excute script xxx” PyInstaller 打包python程序为exe文件过程错误

    在使用PyInstaller打包python程序,打包命令为: pyinstaller -F -w -i manage.ico yourpyfile.py 顺便说一下几个参数的作用 -F:是直接生成单 ...

  2. ABBYY PDF Transformer+系统要求

    ABBYY PDF Transformer+是一个新的,全面的巧妙解决PDF文档的工具,它将泰比的光学字符识别(OCR)技术和Adobe®PDF技术完美结合,以确保实现便捷地处理任何类型的PDF文件, ...

  3. python 模块会导入几次?猴子补丁为什么可以实现?

    一共三个文件 a.py内容是 print('被导入') x = 1 b.py内容是 import a a.x = 2 c.py内容是 import a import b print(a.x) 现在运行 ...

  4. iOS SQLite 数据库迁移

    本文转载至 http://www.jianshu.com/p/c19dd08697bd 最近不得不考虑关于数据库迁移的问题,原先用了种很不好的处理方式(每次版本升级就删除本地数据库,太傻),于是开始考 ...

  5. Github安卓开源项目编译运行

    转:http://blog.csdn.net/laihuan99/article/details/9054985 很多新手朋友朋友在Github搜索开源项目时,有时候不明白怎么导入eclipse.的确 ...

  6. Android开发训练之第五章第六节——Transferring Data Using Sync Adapters

    Transferring Data Using Sync Adapters GET STARTED DEPENDENCIES AND PREREQUISITES Android 2.1 (API Le ...

  7. [原]openstack-kilo--issue(八)NovaException: Unexpected vif_type=binding_failed

    2016-12-06 11:11:22.593 1505 INFO nova.scheduler.client.report [req-43897fe4-800f-436a-a13b-1a0098c8 ...

  8. [ASP.NET MVC]视图是如何呈现的 (续)

    在上一篇文章中,我们知道了通过Controller执行ActionResult的Execute可以找到对应Controler对应的ViewEngine,然后在View中把Action的结果显示出来.那 ...

  9. Spark2 Model selection and tuning 模型选择与调优

    Model selection模型选择 ML中的一个重要任务是模型选择,或使用数据为给定任务找到最佳的模型或参数. 这也称为调优. 可以对诸如Logistic回归的单独Estimators进行调整,或 ...

  10. Linux CentOS中防火墙的关闭及开启端口

    注:CentOS7之前用来管理防火墙的工具是iptable,7之后使用的是Firewall 样例:在CentOS7上安装tomcat后,在linux本机上可以访问tomcat主页,http://ip: ...