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. 嵌入式开发之hi3519---GPIO 驱动

    在一个嵌入式系统中使用最多的莫过于 通用输入输出 GPIO口.看到论坛中经常有朋友问海思为什么没有提供GPIO驱动.其实不然. 在海思SDK  xxx/osdrv/tools/board_tools/ ...

  2. [Bayes] Metroplis Algorithm --> Gibbs Sampling

    重要的是Gibbs的思想. 全概率分布,可以唯一地确定一个联合分布 ---- Hammersley-Clifford 多元高斯分布 当然,这个有点复杂,考虑个简单的,二元高斯,那么超参数就是: 二元高 ...

  3. [Unity3D] C# Basic : Gameplay Scripting

    教程:https://unity3d.com/cn/learn/tutorials/s/scripting 补充:http://www.runoob.com/csharp/csharp-inherit ...

  4. post请求参数问题

    from:https://www.cnblogs.com/btgyoyo/p/6141480.html jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样 ...

  5. python中getcwd()方法慎用

    比如我们想要获取当前目录的路径,有人可能会用到getcwd()方法,但是会发现这个方法有时候不好用.下面介绍一下,getcwd()方法的具体细节: 1.os.getcwd():获取当前工作目录,也就是 ...

  6. Spark排序之SortBy

    sortBy函数源码:接收三个参数,第一个参数必须,第二个和第三个参数非必要 def sortBy[K]( f: (T) => K, ascending: Boolean = true, num ...

  7. [转]pycharm active code

    43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  8. 服务器中了蠕虫病毒Wannamine2.0小记

    近期用户反馈某台服务器总感觉性能不是很好存在卡顿,于是今天远程上去分析. 打开任务管理器发现CPU使用率非常低,内存使用也在接受范围内(10/64G).不过我有一个偏好就是不喜欢用系统自带的任务管理器 ...

  9. subordinate clause/从句

    What Is a Subordinate Clause? (with Examples)A subordinate clause (or dependent clause) is a clause ...

  10. Linux系统中的文件权限

    r(read)         4    可读 w(write)   2     可写 x()           1     可执行 644            755 rw-r-r        ...