os系统
任务延时函数OSTimeDly
功能:调用该函数的任务将自己延时一段时间并执行一次任务调度,一旦规定的延时时间完成或有其它的任务通过调用OSTimeDlyResume()取消了延时,调用OSTimeDly()函数的任务马上进入就绪状态(前提是先将任务调度后执行的任务执行到程序尾,且调用OSTimeDly的任务此时优先级最高)。
任务延时函数OSTimeDly用于阻塞任务一定时间,这个时间以参数的形式给出。如果这个参数的值是N,那么在N个时间片(时钟滴答)之后,任务才能回到就绪态获得继续运行的机会。如果参数的值是0,就不会阻塞任务。任务延时函数OSTimeDly的代码分析如程序3.4所示。
程序3.4 任务延时函数OSTimeDly代码分析
- void OSTimeDly (INT32U ticks)
- {
- INT8U y;
- if (OSIntNesting > 0u) { /*中断服务程序不能延时*/
- return;
- }
- if (OSLockNesting > 0u) { /*如果调度器被上锁不能延时,因为延时后就要进行调度*/
- return;
- }
- if (ticks > 0u) { /*如果延时时间大于0才会进行延时*/
- OS_ENTER_CRITICAL();
- /*在就绪表和就绪组中取消当前任务的就绪标志*/
- y=OSTCBCur->OSTCBY;
- OSRdyTbl[y] &= (OS_PRIO)~OSTCBCur->OSTCBBitX;
- if (OSRdyTbl[y] == 0u) {
- OSRdyGrp &= (OS_PRIO)~OSTCBCur->OSTCBBitY;
- }
- /*给任务块的OSTCBDly项赋值延时时间*/
- OSTCBCur->OSTCBDly = ticks; /* 向任务控制块TCB装载延时时间 */
- OS_EXIT_CRITICAL();
- OS_Sched();/* 进行一次任务调度*/
- }
- }
本段代码层次清晰且比较简单。OSLockNesting是调度锁,也就是说,如果OSLockNesting>0,那么不允许进行任务调度。因为任务延时的时候要中止当前任务的执行,所以要进行调度,因此在调度锁有效的情况下是不能执行任务延时的。如果延时时间大于0,那么就要进行一次任务调度,将当前的任务的就绪标志取消,也就是对就绪表和就绪组的相关操作。之后将延时时间给任务块的OSTCBDly项以对延时进行计数。操作系统在每个时钟中断都要对每个OSTCBDly大于0的任务块的OSTCBDly进行减1操作和进行调度,那么当任务的延迟时间到了的时候(OSTCBDly为0)就可以恢复到就绪态。
需要注意的是,如果将任务延时1个时间片,调用OSTimeDly(1),会不会产生正确的结果呢?回答是否定的。这是因为任务在调用时间延时函数的时候可能已经马上就要发生时钟中断了,那么设置OSTCBDly的值为1,想延时10ms,然后系统切换到一个新的任务运行。在可能极短的时间,如0.5ms的时间后就进入时钟中断服务程序,立刻将OSTCBDly的值减到0了。调度器在调度的时候就会恢复这个才延时了0.5ms的任务执行。可见,OSTimeDly的误差最大应该就是1个时间片的长度,OSTCBDly(1)不会刚好延时10ms,如果真的需要延时1个时间片,最好调用OSTCBDly(2)。
任务延时函数OSTimeDly的流程如图3.3所示。

os系统的更多相关文章
- OS.js – 开源的 Web OS 系统,赶快来体验
OS.js 是一个开源的 Web OS 系统,可以在浏览器中运行,提供了窗口管理器,应用程序API,用户界面开发套件和抽象的文件系统等.可以部署在 Node 或者 PHP 环境中运行.OS.js is ...
- OS 系统下安装MySql 配置MySql环境变量
学习Hive需要,闲话不说 本文的内容: 下载Mysql for Mac 下载Mysql Workbench 安装 Mysql 和 Mysql Workbench 配置Mysql在OS 系统上的环境变 ...
- 首个攻击该Mac OS系统的恶意软件——KeRanger
首个攻击该Mac OS系统的恶意软件——KeRanger 曾几何时,苹果操作系统一度被人认为是最安全的操作系统.然而近几年,针对苹果系统的攻击日益增多,影响范围也越来越大.无独有偶,近日,苹果Mac ...
- 在 Linux 的 KVM虚拟机 上安装 Mac OS 系统的研究总结
在 Linux 的 KVM虚拟机 上安装 Mac OS 系统的研究总结 一.资料来源: 网上一共找到两个方法,一个是视频上的教程,一个是网页资料. 二.视频资料方法内容:1.install qe ...
- Google工程师打造Remix OS系统 桌面版安卓下载
三位前Google工程师打造的Remix OS系统终于来到了PC桌面上,现已可以下载尝鲜. Remix OS for PC基于Android-x86项目,由安卓5.1 Lollipop深度定制而来,不 ...
- Mac OS系统
Mac OS系统 目录 概述 Mac OS系统常用操作 概述 Mac OS系统常用操作 显示或隐藏文件 在终端输入:defaults write com.apple.finder AppleShowA ...
- ARM公布“物联网”嵌入式mbed OS系统软件平台
继ARM公司发布了为嵌入式微控制器设计的Cortex-M7架构处理器,ARM又公布了专为廉价低功耗“物联网”设计的新版软件及系统平台,以加速物联网设备的发展及部署.该软件为基于ARM现有Cortex- ...
- 教你Mac OS系统四种改动Hosts文件的方法
使用Mac OS X系统的用户.在某些时候可能遇到了须要改动系统Hosts文件的情况,那么Mac OS系统怎样改动Hosts文件呢?和Windows系统有何差别呢?我们知道事实上改动Hosts文件仅仅 ...
- 使用VMware Workstation Pro 12 虚拟机安装Mac OS系统教程 全程图解
导读:使用虚拟机安装Windows.Linux或者Ubuntu系统大家或许看了很多,但如何使用VMware Workstation Pro 12安装Mac OS,的确需要好好研究一番:否则无法下手,因 ...
- Mac os系统gdb调试器的安装与使用
Mac os系统gdb调试器的安装与使用 1.简介 Mac os下的Terminal 终端中默认情况下并没有安装gdb调试器,但是可以通过gcc编译器进行代码编译,如果出错了就需要通过gdb调试器进行 ...
随机推荐
- bzoj 4515: [Sdoi2016]游戏
Description Alice 和 Bob 在玩一个游戏. 游戏在一棵有 n 个点的树上进行.最初,每个点上都只有一个数字,那个数字是 123456789123456789. 有时,Alice 会 ...
- bzoj 1179: [Apio2009]Atm
Description Input 第 一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路 的起点和终点的 ...
- LAMP第二部分apache配置
课程大纲:1. 下载discuz! mkdir /data/wwwcd /data/wwwwget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3 ...
- ab返回结果参数分析
Server Software 返回的第一次成功的服务器响应的HTTP头.Server Hostname 命令行中给出的域名或IP地址Server Port 命令行中给出端口.如果没 ...
- HTML中的超链接
超链接:也叫URL(Uniform Resource Locator),就是统一资源定位器.一般效果是我们点击网页上某个地方,网页会自动跳转到另外一个地方. 一般链接遵循以下要求:scheme://h ...
- Server Tomcat v7.0 Server at localhost failed to start.
1:这里记录一下这个错误,反正百度一大推,但是很长很长,我感觉这个问题肯定是servlet引起的,因为我遇到的总是如此: 2:我的问题如下所示: <servlet> <servlet ...
- 使用ajax调用webservice加载table
写了个ajax调用webservice动态加载表格的案例 不废话直接上代码 webservice代码: /// <summary> /// 首页显示会员信息 /// </summar ...
- [整理]HTTPS和SSL证书
在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: • https:在http(超 ...
- SQLServer 创建服务器和数据库级别审计
概述 在上一篇文章中已经介绍了审计的概念:本篇文章主要介绍如何创建审计,以及该收集哪些审核规范. 一.常用的审核对象 1.1.服务器审核对象 1.FAILED_LOGIN_GROUP( Audit L ...
- 跟我一起读postgresql源码(十)——Executor(查询执行模块之——Scan节点(下))
接前文跟我一起读postgresql源码(九)--Executor(查询执行模块之--Scan节点(上)) ,本篇把剩下的七个Scan节点结束掉. T_SubqueryScanState, T_Fun ...