μC/OS-II---内核:任务调度

目录

  • 内核:调度(oc_core.c文件的函数)
    • OS_TCB(任务控制块)初始化
    • 任务控制块列表(ucos_ii.h文件的函数)
    • 系统调用,主动让渡CPU
    • 发生中断,强制当前任务让渡CPU
    • 就绪表(ucos_ii.h文件的函数)
      • 设置任务进入就绪态
      • 设置任务脱离就绪态
      • 在就绪表中找到优先级最高(数最小)的任务

在这里插入图片描述

内核:调度(oc_core.c文件的函数)

OS_TCB(任务控制块)初始化

INT8U   OS_TCBInit    (
							INT8U            prio,
							OS_STK          *ptos,
							OS_STK          *pbos,
							INT16U           id,
							INT32U           stk_size,
							void            *pext,
							INT16U           opt
					  );

任务控制块列表(ucos_ii.h文件的函数)

OS_EXT  OS_TCB            OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS];

系统调用,主动让渡CPU

void  OS_Sched (void)
{
	#if OS_CRITICAL_METHOD == 3u                           /* Allocate storage for CPU status register     */
		OS_CPU_SR  cpu_sr = 0u;
	#endif
		OS_ENTER_CRITICAL();
		
		if (OSIntNesting == 0u)                            /* Schedule only if all ISRs done and ...       */
		{
			if (OSLockNesting == 0u)                       /* ... scheduler is not locked                  */
			{
				OS_SchedNew();
				OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
				
				if (OSPrioHighRdy != OSPrioCur)            /* No Ctx Sw if current task is highest rdy     */
				{
	#if OS_TASK_PROFILE_EN > 0u
					OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */
	#endif
					OSCtxSwCtr++;                          /* Increment context switch counter             */
					OS_TASK_SW();                          /* Perform a context switch                     */
				}
			}
		}
		
		OS_EXIT_CRITICAL();
}

发生中断,强制当前任务让渡CPU

void  OSIntExit (void)
{
	#if OS_CRITICAL_METHOD == 3u                               /* Allocate storage for CPU status register */
		OS_CPU_SR  cpu_sr = 0u;
	#endif
		
		if (OSRunning == OS_TRUE)
		{
			OS_ENTER_CRITICAL();
			
			if (OSIntNesting > 0u)                             /* Prevent OSIntNesting from wrapping       */
			{
				OSIntNesting--;
			}
			
			if (OSIntNesting == 0u)                            /* Reschedule only if all ISRs complete ... */
			{
				if (OSLockNesting == 0u)                       /* ... and not locked.                      */
				{
					OS_SchedNew();
					OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
					
					if (OSPrioHighRdy != OSPrioCur)            /* No Ctx Sw if current task is highest rdy */
					{
	#if OS_TASK_PROFILE_EN > 0u
						OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task  */
	#endif
						OSCtxSwCtr++;                          /* Keep track of the number of ctx switches */
						OSIntCtxSw();                          /* Perform interrupt level ctx switch       */
					}
				}
			}
			
			OS_EXIT_CRITICAL();
		}
}

就绪表(ucos_ii.h文件的函数)

OS_EXT  OS_PRIO           OSRdyTbl[OS_RDY_TBL_SIZE];       /* Table of tasks which are ready to run    */

设置任务进入就绪态

设置任务脱离就绪态

在就绪表中找到优先级最高(数最小)的任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/127098.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

postman中文乱码

在header中添加这两个: Content-Type application/json;charsetUTF-8 Accept application/json;charsetUTF-8

cmd打开idea

当我们用idea打开一个项目的时候,有时候这个项目目录是有的,但是用idea的open却找不到,有时候我要重新关闭窗口,再open好多次才有 于是我现在使用命令打开,先把idea安装路径的bin目录放在path里面 然后cd到项目路径&…

第四季度净利润扭亏为盈,迪士尼的流媒体终于成功了?

对于一直关注迪士尼的投资者来说,眼下最关心的问题只有一个——迪士尼转行流媒体成功了吗? 而对于这一问题答案,或许可以从迪士尼最新发布的财报中找到。11月9日,华特迪士尼公布了截至2023年9月30日的第四季度和全年收益。其中&a…

OpenText Exceed TurboX (ETX) —— 对图形密集型应用程序进行高性能远程访问

OpenText Exceed TurboX (ETX) —— 对图形密集型应用程序进行高性能远程访问 OpenText Exceed TurboX使团队(无论位于何处)能够对图形密集型应用程序进行高性能远程访问,提高生产力并减少 IT 支出,以确保快速投资回报。 亮点: 降低IT支出…

ps 让图片附着在文字上

按住alt在文字与图片图片中间,文字在图片下面)

python默认的输入类型是字符串,怎样转换为其他的类型

在Python中,默认的输入类型是字符串(str类型)。无论你输入的是数字、字符还是其他类型的内容,input函数都会将其作为字符串处理并返回。 如果需要将字符串转换为其他类型(如整数、浮点数等),可…

UDP网络编程

一)熟悉TCP/IP五层协议: 1)封装:就是在数据中添加一些辅助传输的信息; 2)分用:就是解析这些信息 3)发送数据的时候,上层协议要把数据交给下层协议,由下层协议来添加一些信息 4)接收数据的时候,下层协议要把数据交给上层协议&#…

047_第三代软件开发-日志分离

第三代软件开发-日志分离 文章目录 第三代软件开发-日志分离项目介绍日志分离用法 关键字: Qt、 Qml、 log、 日志、 分离 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C 的强…

常见的设计模式

一、是什么 在软件工程中,设计模式是对软件设计中普遍存在的各种问题所提出的解决方案 设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案 设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象&a…

倾斜摄影测量实景三维建模ContextCapture Master

目录 专题一 倾斜摄影测量原理及应用领域 专题二 倾斜摄影测量数据采集方法 专题三 CC支持数据类型及导入数据方法 专题四 CC空三计算参数设置及数据处理方法 专题五 CC控制点与连接点添加及应用 专题六 三维重建及应用 专题七 三维模型修复与场景拼接 更多应用 Contex…

Ceph-deploy跳过gpg-key验证(离线环境安装Ceph)

问题 CentOS-7.6.1810离线环境搭建Ceph环境时出现gpg-key安装源公钥检查错误。原因是执行ceph-deploy install 命令的服务器无法访问互联网。具体报错如下图: 解决 安装命令后新增--no-adjust-repos参数即可跳过安装 GPG 密钥。 命令如下: ceph-deplo…

考研408,1000道精心打磨的计算机考研题,选它就对了!

前言:大家好,我是小威,今天给大家安利一本考研408的书籍,身边有考研同学也都在用,书籍确实不错! 以下正文开始 计算机考研1000题 难度高! 知识点多! 复习时间短! 不…

中国电子学会2023年09月份青少年软件编程Scratch图形化等级考试试卷二级真题(含答案)

2023-09 Scratch二级真题 分数:100 测试时长:60min 一、选择题(共25题,共50分) 1.点击绿旗,运行程序后,舞台上的图形是?(D )(2分)…

webpack babel

构建工具 简介 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。我们…

如何使用Net2FTP搭建免费web文件管理器打造个人网盘

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一,特别是智能设备的大面积使用,无论是个人…

rabbitMq虚拟主机概念

虚拟主机是RabbitMQ中的一种逻辑隔离机制,用于将消息队列、交换机以及其他相关资源进行隔离。 在RabbitMQ中,交换机(Exchange)用于接收生产者发送的消息,并根据特定的路由规则将消息分发到相应的队列中。而虚拟主机则…

Linux 的热插拔机制通过 Udev(用户空间设备)实现、守护进程

一、Udev作用概述 udev机制简介udev工作流程图 二、Linux的热拔插UDEV机制 三、守护进程 守护进程概念守护进程在后台运行基本特点 四、守护进程和后台进程的区别 一、Udev作用概述 udev机制简介 Udev(用户空间设备)是一个 Linux 系统中用于动态管…

瑞芯微:基于RK3568的深度估计模型部署

根据单张图像估计深度信息是计算机视觉领域的经典问题,也是一项具有挑战的难题。由于单目图像的尺度不确定,传统方法无法计算深度值。 随着深度学习技术的发展,该范式已经成为了估计单目图像的深度信息的一种解决方案。早期的深度估计方法大多…

线程安全(JAVA)

线程安全对于我们编写多线程代码是非常重要的。 什么是线程安全? 在我们平时的代码中有些代码在单线程程序中可以正常执行,但如果同样的代码放在在多个线程中执行就会引发BUG,而这种现象我们一般称为 “线程安全问题” 或 “线程不安全”。…

(动手学习深度学习)第7章 稠密连接网络---DenseNet

目录 DenseNetDenseNet的优点:DenseNet的改进思路总结 DenseNet代码实现 DenseNet DenseNet的优点: 省参数。在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半。对于工业界而言,小模型可以显著…
最新文章