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. Tomcat 7.0安装与配置

    下载后解压缩到C盘,重命名为Tomcat-7.0.67,目录最好不要有空格: 以下为Tomcat 7的配置: 首先,右键计算机–>属性–>高级系统设置–>环境变量:  下载好压缩包后 ...

  2. myeclipse创建hibernate工程

    1.创建数据库: from blog http://www.cnblogs.com/zhaocundang/p/9061959.html 使用navicat mysql IDE: 创建数据库 book ...

  3. Ubuntu下Apache虚拟主机+反向代理

    反向代理 就是通过一台代理服务器,让Internet用户可以访问到内部网络上的服务器 下图中192.168.0.4 可以理解带有2个网卡,一个是公网ip,一个是192.168.0.4 代理内外中的2个 ...

  4. 斯特林公式 ——Stirling公式(取N阶乘近似值)(转)

    斯特灵公式是一条用来取n阶乘近似值的数学公式.一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用.从图中可以看出,即使在n很小的时候,斯特灵公式的取值已经十分准确. 公式为:    ...

  5. laravel 在linux环境下解决.htaccess无效和去除index.php

    LoadModule rewrite_module modules/mod_rewrite.so (去掉前面的#注释) AllowOverride All (根目录的配置下,确保设置成All) < ...

  6. 网络编程 -- RPC实现原理 -- Netty -- 迭代版本V1 -- 入门应用

    网络编程 -- RPC实现原理 -- 目录 啦啦啦 V1——Netty入门应用 Class : NIOServerBootStrap package lime.pri.limeNio.netty.ne ...

  7. python socket 实现的简单http服务器

    预备知识: 关于http 协议的基础请参考这里. 关于socket 基础函数请参考这里. 关于python 网络编程基础请参考这里. 一.python socket 实现的简单http服务器   废话 ...

  8. iOS(WKWebView)OC与JS交互 之三

      随着H5功能愈发的强大,没进行过混合开发的小伙们都不好意思说自己能够独立进行iOS的app开发,在iOS7操作系统下,常用的native,js交互框架有easy-js,WebViewJavascr ...

  9. Project Move from Qt 4 to Qt 5 项目工程的迁移

    将Qt4的项目迁到Qt5中并不需要新建一个Qt5的工程,可以直接在原工程文件上修改,这里我们使用的是VS2010和Qt5.4的环境,我们需要做以下修改: 1. 在工程里找到这个文件:工程名.vcxpr ...

  10. npm构建保存 code ELIFECYCLE解决办法

    参考文档https://blog.csdn.net/gh254172840/article/details/78871573 使用npm构建报错 解决办法,进入工作目录 rm -rf node_mod ...