广告
返回顶部
首页 > 资讯 > 后端开发 > Python >ucos-3-任务调度1
  • 591
分享到

ucos-3-任务调度1

ucos 2023-01-31 00:01:23 591人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

转自:Http://blog.csdn.net/chunzi417/article/details/5864755uC/OS-II的任务一般格式为:void TASKn(void *pdata){        pdata = pdata;

转自:Http://blog.csdn.net/chunzi417/article/details/5864755

uC/OS-II的任务一般格式为:
void TASKn(void *pdata)
{
        pdata = pdata;
        
        while (1)
        {
                OSTimeDly(OS_TICKS_PER_SEC); 
        } 
}
   ucos-II是基于任务优先级抢占式任务调度法的,就是内核在管理调度时,调用任务切换函数(一般为SSched()),在该函数中将此时已处于就绪状态(条件一)并且为最高优先级(条件二)的任务的保存于其栈中的相应信息压入cpu寄存器中(软中断完成),然后cpu开始运行该任务的代码。
   内核是何时进行任务调度的呢?虽然uC/OS-II是可被剥夺资源的内核(高优先级可强行占有低优先级正在使用的资源),但此事发生的前提是内核实时"检测"到了更高就绪的优先级了,那么内核是怎样来实时检测的呢?
   带着这个问题让我们再来看看任务的结构——里边有函数OSTimeDly(OS_TICKS_PER_SEC),一看就知道这是个延时函数,除了延时外它还会有其他用途呢?经查看其源码了解到里边有一条代码:OSSched(),对,函数OSTimeDly()的作用就是将此时正在运行的函数挂起(保存任务控制块OS_TCB中的相应信息)(任务控制块OS_TCB是系统分配给每个任务的信息存储单元),然后调用函数OSSched()进行任务切换,进而执行就绪的最高优先级任务。此刻,我们了解到uCOS-II的任务切换是在执行的任务中调用延时函数OSTimeDly()进行的。
   现在,还有一个问题还没解决,就是当延时到了,内核如何将资源返还给被延时挂起的任务?
   我们先来了解一下任务可控制块(OS_TCB),任务控制块是一个数据结构,当任务的cpu使用权被剥夺时,uC/OS-II用它来保存该任务的状态。当任务重新得到cpu使用权时,任务控制块确保任务从当时被中断的那一点丝毫不差地继续执行。OS_TCB全部驻留在RAM中。在OS_TCB中有一项时间延时项OSTCBDly,调用函数OSTimeDly()过程中有一步骤就是给OSTCBDly赋延时值。uC/OS—II中有函数OSTimTick(),叫时钟节拍函数,它的一项工作就是给每个用户任务控制块OS_TCB中的时间延迟项OSTCBDly减1(如果该项不为零),当某项任务的任务控制块中的时间延时项OSTCBDly减为0时,这个任务就进入了就绪态,等待任务切换。而时钟节拍函数OSTimTick()的调用函数由时钟节拍中断服务函数OSTickISR()调用(或与相应函数配合调用)。
   现在,我们来理一下思路:任务调用函数OSTimeDly(),挂起任务和调用切换函数并设置延时时间——>周期性调用时钟节拍中断服务函数OSTickISR()进行任务延时计数(OSTimTick()完成),延时到时调用任务切换函数OSSched(),进行任务切换。
   综上,任务切换有两种途径——时钟节拍中断服务函数OSTickISR()进行切换,任务中调用时间延迟函数OSTimeDly()进行切换。
从先后顺序来说,应该是OSTimeDly()先发生(设置OSTCBDly),才会有时钟节拍中断函数OSTickISR()进行切换的动作发生。

--结束END--

本文标题: ucos-3-任务调度1

本文链接: https://www.lsjlt.com/news/182838.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ucos-3-任务调度1
    转自:http://blog.csdn.net/chunzi417/article/details/5864755uC/OS-II的任务一般格式为:void TASKn(void *pdata){        pdata = pdata;...
    99+
    2023-01-31
    ucos
  • 并发任务调度:使用Go WaitGroup构建任务调度引擎
    并发任务调度是一种将多个任务并行执行的技术,可以提高程序的执行效率。Go语言中提供了一个很方便的并发控制工具——WaitGroup,...
    99+
    2023-10-08
    Golang
  • Python任务调度之sched
    这次我们主要讲解下Python自带模块当中的sched,不但小巧,也很强大,在实际应用中,某些场合还是可以用到的。作为一名Linux的SA,我们已经习惯了用crontab,而sched提供了一种延迟处理机制,也可以理解为任务调度的另一种方式...
    99+
    2023-01-31
    Python sched
  • Linux 定时任务调度(crontab)
    一、Crontab Crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。 可以使用Crontab定时处理离线任务,比如...
    99+
    2023-09-20
    linux 服务器 运维
  • Python任务调度模块APSched
    介绍 官网文档:http://apscheduler.readthedoc...API:http://apscheduler.readthedoc... APScheduler是一个python的第三方库,用来提供python的后台程序。...
    99+
    2023-01-31
    模块 Python APSched
  • SpringBoot 调度任务及常用任务表达式
    首先需要用@EnableScheduling注解到*applicatin.java,用来检测是否有调度任务。@Scheduled 注解用于标注这个方法是一个定时任务的方法。Spring会自动扫描这个注解,启动调度任务。package com...
    99+
    2023-05-30
    spring boot 调度
  • quarzt定时调度任务解析
    简介Quarzt是一个项目中定时执行任务的开源项目,Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用,这里我们介绍和spring整合的例子...
    99+
    2023-05-30
    quartz 定时任务 任务调度
  • springboot任务调度怎么实现
    要在Spring Boot中实现任务调度,可以使用Spring Task框架。下面是一些步骤来实现任务调度:1. 在pom.xml文...
    99+
    2023-10-11
    springboot
  • 浅析Linux中crontab任务调度
    一.创建调度任务 指令 crontnPijwQab -e 进入当前用户编辑界面 crontab -u 用户名 -e 进入指定用户编辑界面 进入crontab任务编辑界面 任务编写格式 #每分钟执行查看一次/ect目录,把...
    99+
    2022-06-04
    linux 任务调度 linux crontab
  • quartz任务调度怎么实现
    在Java中,可以使用Quartz任务调度框架来实现任务调度。以下是实现Quartz任务调度的一般步骤:1. 添加依赖:在项目的构建...
    99+
    2023-08-31
    quartz
  • PHP中如何进行任务调度和定时任务?
    在Web开发中,很多网站和应用需要定期执行一些任务,比如清理垃圾数据、发送邮件等。为了自动化这些任务,开发人员需要实现任务调度和定时任务的功能。本文将介绍PHP中如何实现任务调度和定时任务,以及一些常用的第三方库和工具。一、任务调度任务调度...
    99+
    2023-05-14
    PHP 定时任务 任务调度
  • java任务调度quartz怎么实现
    使用Quartz实现Java任务调度的步骤如下:1. 导入Quartz库:在项目的依赖管理中,添加Quartz库的Maven或Gra...
    99+
    2023-09-18
    quartz java
  • .net任务调度框架Hangfire简介
    任务调度是我们项目中常见的功能,虽然任务调度的功能实现本身并不难,但一个好用的轮子还是可以给我们的开发的效率提升不少的。 在.net环境中,较为有名的任务调度框架是HangFire与...
    99+
    2022-11-13
  • Go语言dolphinscheduler任务调度处理
    目录简介自动化使用例子任务结果检查测试连接重跑任务小结简介 dolphinscheduler是一个可视化DAG工作流任务调度平台,在大数据领域做任务调用非常流行 提供了类似a...
    99+
    2022-06-08
    GO
  • .net任务调度框架FluentScheduler简介
    之前我在文章中介绍过.net中的任务调度框架Hangfire,HangFire虽然本身输入比较简单好用的,但是,如果我们的程序本身提供的服务不是任务调度,而任务调度只是里面并不重要的...
    99+
    2022-11-13
  • C# TaskScheduler任务调度器的实现
    目录什么是TaskScheduler?TaskScheduler  任务调度器的原理 .net中的任务调度器有哪些一: ThreadPoolTaskSc...
    99+
    2023-05-20
    C# TaskScheduler任务调度器 C# TaskScheduler
  • 【linux】linux实操篇之任务调度
    目录 前言crond 任务调度概述基本语法快速入门案例案例一:每隔一分钟将ls -l /etc/ 追加到 /tmp/to.txt 文件案例二:每隔一分钟执行python文件 结语 前言 我们常用linux做一...
    99+
    2023-08-19
    linux 运维 服务器
  • Java 任务调度框架 Quartz实操
    目录1、Quartz 1.1 引入依赖 1.2 入门案例 任务类,需要实现 Job 接口 定时器类 1.3 Job 与 JobDetail 1.4 JobExecutionConte...
    99+
    2022-11-12
  • 怎么通过spring做调度任务
    本篇内容主要讲解“怎么通过spring做调度任务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么通过spring做调度任务”吧!构建工程创建一个Springboot工程,在它的程序入口加上@E...
    99+
    2023-06-05
  • java任务调度quartz怎么使用
    要使用Quartz任务调度器,您需要按照以下步骤进行操作:1. 首先,您需要添加Quartz的依赖项到您的项目中。您可以在Maven...
    99+
    2023-08-14
    java quartz
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作