8.0-uC/OS-III临界段
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临界段的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- 【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理
LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr = SS:SP!!! ], SS ;将当前SS(栈的基地址)寄存器值存放至当前任务控制 ...
- RTX临界段,中断锁与任务锁
临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被中断,在进入临界段之前须关中断,而临界段代码执行完毕后,要立即开中断. ...
- FreeRTOS 临界段和开关中断
以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行不被中断 ...
- uC/OS II原理分析及源码阅读(一)
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...
- uc/os任务创建
问题描述: uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...
- uC/OS 的任务调度解析 (转)
uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...
- 关于uC/OS的简单学习(转)
1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...
随机推荐
- ubuntu下mysql远程连接和访问慢的解决方法
原本连接很快的mysql服务器,连接速度奇慢.以前几十毫秒的连接现在完成一次要近5秒钟,在排除了网络问题后,只有从mysql下手.原来每次访问db,mysql就会试图去解析来访问的机器的domain ...
- Linux/Centos下使用mtr做路由图进行网络分析
工具作用: mtr可以做路由图供我们分析哪里出现故障或者是否存在有网络拥塞的情况 1. 首先安装mtr 工具 使用yum 安装 : yum install mtr -y 2. 使用 我经常在工 ...
- exec vs sp_executesql
1.exec vs sp_executesql 1.1 说到exec了解SQLServer的朋友第一反应应该是它用来执行存储过程,对的这是其一,另一个作用是执行一个动态批处理.总结下:a.执行一个 ...
- Sequential Minimal Optimization (SMO) 算法
SVM 最终关于 $a$ 目标函数为凸优化问题,该问题具有全局最优解,许多最优化算法都可以解决该问题,但当样本容量相对很大时,通常采用 SMO 算法(比如 LIBSVM),该算法为启发式算法,考虑在约 ...
- 使 用 Jquery 全选+下拉+单选+事件+挂事件
先引用Jquery代码包 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...
- python金融与量化分析----Jupyter Notebook使用
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言.在本文中,我们将介绍 Jupyter notebook 的主要特性,以 ...
- CentOS和Redhat单用户模式
当系统无法启动时,可能是/etc/fstab挂载错误导致这时候可以进入单用户模式修改配置文件后重启 重启系统出现以下界面按e 选择第二栏按e健 在后面输入1回车回到上一个页面按b健启动 进入单用户模式 ...
- WordOperate
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- POJ 3974 - Palindrome - [字符串hash+二分]
题目链接:http://poj.org/problem?id=3974 Time Limit: 15000MS Memory Limit: 65536K Description Andy the sm ...
- [No0000F6]C# 继承
继承是面向对象程序设计中最重要的概念之一.继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易.同时也有利于重用代码和节省开发时间. 当创建一个类时,程序员不需要完全重新编写新的数 ...