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

news2024/11/22 14:21:14

目录

  • 内核:调度(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.coloradmin.cn/o/1189863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SPASS-描述性分析

将身高移入变量 结果展示: 表中分析变量“身高”的个案数、所有个案中的极大值、极小值、均值、标准差及偏度和峰度

了解web框架

Web框架前戏 Web框架本质 web框架本质上可以看成是一个功能强大的socket服务端,用户的浏览器可以看成是拥有可视化界面的socket客户端。两者通过网络请求实现数据交互,学者们也可以从架构层面上先简单的将Web框架看做是对前端、数据库的全方位整合 纯手撸web框架 …

微信小程序电商审核模版

《电商平台服务协议》与交易规则 下载链接 电商平台对入驻经营者的审核要求或规范文件 下载链接 电商平台对用户交易纠纷处理的机制或方案 下载链接 打包下载:https://download.csdn.net/download/nicepainkiller/88519604https://download.csdn.net/download/nicep…

SAP-PP-报错:工作中心 7333_JQ 工厂 7331 对任务清单类型 N 不存在

创建工艺路线时报错:工作中心 7333_JQ 工厂 7331 对任务清单类型 N 不存在, 这是因为在创建工作中心时未维护控制键值导致的

Leetcode—102.二叉树的层序遍历【中等】

2023每日刷题(二十四) Leetcode—102.二叉树的层序遍历 C语言BFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Return an array of arr…

16.字符连接

#include<stdio.h> #include <cstring> int main(){char s1[44];char s2[33];scanf("%s",s1);scanf("%s",s2);strcat(s1,s2) ;printf("连接两个字符为&#xff1a;%s ",s1); return 0;}

xdcms漏洞合集-漏洞复现

目录 xdcms v3.0.1漏洞 环境搭建 代码审计 目录总览 配置文件总览 登陆处sql注入 漏洞分析 漏洞复现 注册处sql注入漏洞 漏洞分析 漏洞复现 getshell 任意文件删除 xdcms订餐网站管理系统v1.0漏洞 简介 环境搭建 全局变量的覆盖 漏洞分析 漏洞复现 后台任意…

674. 最长连续递增序列 718. 最长重复子数组 1143.最长公共子序列 1035.不相交的线

674. 最长连续递增序列 题目&#xff1a; 给定一个未经排序的整数数组nums&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 dp数组含义&#xff1a; dp[i]&#xff1a;以下标i为结尾的连续递增的子序列长度为dp[i]。 递推公式&#xff1a; 怎么…

Unity随笔:C#运行时

Unity是如何编译运行C#的 &#xff08;1&#xff09;Unity会通过编译器将C#脚本编译成IL指令。 Unity会通过Roslyn来对C#代码进行编译&#xff0c;生成中间IL指令集。 当我们每次修改或者添加新的C#代码文件&#xff0c;Unity界面的右下角会出现短暂的“转圈”现象。这就意味…

【Bug】Python利用matplotlib绘图无法显示中文解决办法

一&#xff0c;问题描述 当利用matplotlib进行图形绘制时&#xff0c;图表标题&#xff0c;坐标轴&#xff0c;标签中文无法显示&#xff0c;显示为方框&#xff0c;并报错 运行窗口报错&#xff1a; 这是中文字体格式未导入的缘故。 二&#xff0c;解决方案 在代码import部…

通过一道题目带你深入了解WAF特性、PHP超级打印函数、ASCII码chr()对应表等原理[RoarCTF 2019]Easy Calc 1

题目环境&#xff1a; 依此输入以下内容并查看回显结果 11 1’ index.php ls 到这里没思路了 F12查看源代码 一定要仔细看啊&#xff0c;差点没找到&#xff0c;笑哭 访问calc.php文件 果然有点东西 PHP代码审计 error_reporting(0);关闭错误报告 通过GET方式传参的参数num sho…

ECA-Net(Efficient Channel Attention Network)

ECA-Net&#xff08;Efficient Channel Attention Network&#xff09;是一种用于计算机视觉任务的注意力模型&#xff0c;旨在增强神经网络对图像特征的建模能力。本文详细介绍ECA-Net注意力模型的结构设计&#xff0c;包括其背景、动机、组成部分以及工作原理。ECA-Net模块的…

河南开放大学与电大搜题微信公众号:携手共进,助力学习之路

作为河南省内颇具影响力和声誉的高等教育机构之一&#xff0c;河南开放大学一直致力于提供优质的教育资源和灵活的学习方式&#xff0c;以满足广大学习者的需求。而在这个追求知识的时代&#xff0c;学习者们尤其需要一个便捷、高效的工具来辅助学习。电大搜题微信公众号应运而…

viple入门(四)

&#xff08;1&#xff09;行打印 主要用于在运行窗口中显示数据&#xff0c;打印完成后&#xff0c;自动换行。 注意事项&#xff1a;不可同时打印两个数据&#xff0c;例如 解决方案1&#xff1a;使用或并&#xff0c;使得每次进入行打印的数据只有一个&#xff0c;缺点&am…

推荐大学生考研党都来使用的白板笔记软件!上岸卷王必备!

考研这条路&#xff0c;对于很多大学生来说&#xff0c;是一条漫漫长路。相信很多人都有这样的体会&#xff1a;看了大量的书籍&#xff0c;记了大量的笔记&#xff0c;但是到了临近考试的时候&#xff0c;却发现复习的内容和思路都不是很清晰&#xff0c;效率不高。 针对这个…

基于SpringBoot+Vue的体育馆管理系统

基于SpringBootVue的体育馆管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 器材详情 登录界面 管理员界面 摘要 SpringBootVue的体育馆管理系统是…

多路转接(上)——select

目录 一、select接口 1.认识select系统调用 2.对各个参数的认识 二、编写select服务器 1.两个工具类 2.网络套接字封装 3.服务器类编写 4.源文件编写 5.运行 一、select接口 1.认识select系统调用 int select(int nfds, fd_set readfds, fd_set writefds, fd_set ex…

服务器部署 Nacos 获取不到配置浏览器可以访问

服务器部署 Nacos 获取不到配置浏览器可以访问 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c…

Jmeter+ant+jenkins接口自动化测试

平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行&#xff0c;自动生成测试报告&#xff0c;以及持续集成。Jmeter 支持接口的测试&#xff0c;Ant 支持自动构建&#xff0c;而 Jenkins 支持持续集成&#xff0c;所以三者组合在一起可以构成一个功能完善的接口自动…

第四章:人工智能深度学习教程-激活函数(第三节-Pytorch 中的激活函数)

在本文中&#xff0c;我们将了解 PyTorch 激活函数。 目录 什么是激活函数以及为什么使用它们&#xff1f; Pytorch 激活函数的类型 ReLU 激活函数&#xff1a; Python3 Leaky ReLU 激活函数&#xff1a; Python3 S 形激活函数&#xff1a; Python3 Tanh 激活函数&am…