FreeRTOS--3

1.总结任务调度算法之间的区别,重新实现一遍任务调度算法的代码。

一,抢占式调度:高优先级的任务可以打断低优先级任务的执行。
抢占式调度适用于任务优先级不同的任务。使用默认的任务去创建一个优先级比他高的任务,观察抢占式调度的现象。

//创建比默认任务优先级高的参数
osThreadId_t Task2Handle;
const osThreadAttr_t Task2_attributes = {.name = "Task2",.stack_size = 128 * 4,.priority = (osPriority_t) osPriorityNormal,
};//声名入口函数void Task2(void *argument);void StartDefaultTask(void *argument)
{for(;;){printf("StartDefaultTask is start\r\n");//创建一个任务优先级比StartDefailtTa要高的任务sKif(Task2Handle == NULL){//判断任务2的id是否存在,不存在说明没有创建任务2,此时可以创建它Task2Handle = osThreadNew(Task2,NULL,&Task2_attributes);}printf("StarDefaultTask is end\r\n");osDelay(500);}
}//实现任务2入口函数
void Task2(void *argument)
{for(;;){printf("Task2 is running\r\n");osDelay(500);}
}

可以看出任务2先被创建优先级更高.

2..时间片轮转:相同优先级的任务有相同的时间片(1ms),当时间片耗尽,任务必须退出

 创建两个优先级相同的任务,其中一个消耗全部时间片,观察现象。

//创建一个同等级任务
osThreadId_t myTask02Handle;
const osThreadAttr_t myTask02_attributes = {.name = "myTask02",.stack_size = 128 * 4,.priority = (osPriority_t) osPriorityNormal,
};void StartDefaultTask(void *argument)
{/* USER CODE BEGIN StartDefaultTask *//* Infinite loop */int i = 0;for(;;){
//任务1消耗时间片printf("StartDefaultTask is start\r\n");for(i=0;i<9000000;i++){;  //执行消耗时间}printf("StarDefaultTask is end\r\n");osDelay(500);}
}void StartTask02(void *argument)
{/* USER CODE BEGIN StartTask02 *//* Infinite loop */for(;;){printf("StartTask02\r\n");osDelay(500);}/* USER CODE END StartTask02 */
}

 

时间片到了,会自动退出。。 

1.3.协作式调度:一般使用osDelay实现,两个任务协商运行。 

2.总结静态创建任务和动态创建任务的区别,以及动态创建任务和静态创建任务的源码分析步骤。
2.1静态创建

  • 1.在静态创建任务时,会创建一个数组,数组太大会导致内存不足

  • 2.静态创建使用xTaskCreateStatic函数创建。

  • 3.静态创建任务需要具体的栈(通过数组来指定),还需要提供栈的大小。

  • 4.静态创建适用于任务数量确定的情况下

创建时数组太大会导致内存空间不足 

 

 

2.2动态创建

  • 1.动态创建使用的是xTaskCreate函数创建

  • .2.动态创建不需要指定具体的栈只需要指定栈的大小,栈会通过pvPortMalloc动态创建出来

  • 3.动态创建需要消耗的系统资源会比静态创建任务要多。

  • 4.动态创建任务适用于需要随时申请和随时释放的场景

最后,静态任务创建和动态任务创建在任务的生命周期管理上也存在差异。静态任务的生命周期通常与应用程序的生命周期相同,而动态任务的生命周期则可以根据需要动态调整。

 3.总结任务的状态,以及任务状态之间的转换关系。

  • 1.Ready:就绪态,当任务被创建后就会进入到就绪态

  • 2.Running:运行态,任务的代码正在执行。

  • 3.Blocked:阻塞态,当任务在等待时间,或者是信号量,互斥量的时候进入阻塞态。

  • 4.Suspended:挂起态,当任务被挂起后任务还存在但是不运行。

1.程序首先创建就绪态 Ready

2.当调度器选择了当前任务,让当前任务的代码执行Ready--->Running。

3.Running->Ready:当任务执行结束后,重新进入就绪态

4.运行态可以调用Blocking API进入阻塞等待.

5..Running->Suspeded:Blocked->Suspeded:Ready->Suspeded:使用vTaskSuspend函数可以让任务运行态,阻塞态和就绪态进入或进入挂起态, 。。。

 Suspeded->Ready:使用vTaskResume函数让任务重新进入就绪态.

 

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

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

相关文章

HTML基础:脚本 script 标签

你好&#xff0c;我是云桃桃。 1枚程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 255篇原创内容-公众号 后台回复“前端工具”可获取开发工具&#xff0c;持续更新中 后台回复“前端基础题”可得到前端基础100题汇…

CSS(二)---【常见属性、复合属性使用】

零.前言 本篇文章主要阐述CSS常见属性、复合属性&#xff0c;更多前置知识请见作者其它文章&#xff1a; CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 1.CSS属性 CSS的属性有上百个&#xff0c;但是我们并不需要全部学习&#xff0c;只要我们学习一部分…

MuJoCo 入门教程(一)

系列文章目录 前言 一、简介 MuJoCo 是多关节接触动力学&#xff08;Multi-Joint dynamics with Contact&#xff09;的缩写。它是一个通用物理引擎&#xff0c;旨在促进机器人、生物力学、图形和动画、机器学习以及其他需要快速、准确地仿真铰接结构与环境交互的领域的研究和开…

数据结构(初阶)第二节:顺序表

从本文正式进入对数据结构的讲解&#xff0c;开始前友友们要有C语言的基础&#xff0c;熟练掌握动态内存管理、结构体、指针等章节&#xff0c;方便后续的学习。 顺序表&#xff08;Sequence List&#xff09; 线性表的概念&#xff1a;线性表&#xff08;linear list&#xff…

手写简易操作系统(二十二)--时间管理

前情提要 上一节我们实现了硬盘的驱动&#xff0c;本来这一节打算实现文件系统的&#xff0c;但是文件系统中有个时间属性&#xff0c;所以这里我们先实现操作系统的时间管理。 一、除法 我们的系统是一个32位的系统&#xff0c;在编译一些除法的时候编译的时候没问题&#…

保持ssh断开后,程序不会停止执行

保持ssh断开后&#xff0c;程序不会停止执行 一、前言 笔者做远程部署搞了一阵子&#xff0c;快结项时发现一旦我关闭了ssh连接窗口&#xff0c;远程服务器会自动杀掉我在ssh连接状态下运行的程序。 这怎么行&#xff0c;岂不是想要它一直运行还得要一台电脑一直打开ssh连接咯…

曲线降采样之道格拉斯-普克算法Douglas–Peucker

曲线降采样之道格拉斯-普克算法Douglas–Peucker 该算法的目的是&#xff0c;给定一条由线段构成的曲线&#xff0c;找到一条点数较少的相似曲线&#xff0c;来近似描述原始的曲线&#xff0c;达到降低时间、空间复杂度和平滑曲线的目的。 附赠自动驾驶学习资料和量产经验&…

【C语言】“vid”Microsoft Visual Studio安装及应用(检验内存泄露)

文章目录 前言安装包获取配置VLD完成 前言 我们在写代码时往往容易存在内存泄漏的情况&#xff0c;所以存在这样一个名为VLD的工具用来检验内存泄漏&#xff0c;现在我来教大家安装一下 安装包获取 vld下载网址&#xff1a;https://github.com/KindDragon/vld/releases/tag/…

YOLOv8结合SCI低光照图像增强算法!让夜晚目标无处遁形!【含端到端推理脚本】

这里的"SCI"代表的并不是论文等级,而是论文采用的方法 — “自校准光照学习” ~ 左侧为SCI模型增强后图片的检测效果,右侧为原始v8n检测效果 这篇文章的主要内容是通过使用SCI模型和YOLOv8进行算法联调,最终实现了如上所示的效果:在增强图像可见度的同时,对图像…

【中文视觉语言模型+本地部署 】23.08 阿里Qwen-VL:能对图片理解、定位物体、读取文字的视觉语言模型 (推理最低12G显存+)

项目主页&#xff1a;https://github.com/QwenLM/Qwen-VL 通义前问网页在线使用——&#xff08;文本问答&#xff0c;图片理解&#xff0c;文档解析&#xff09;&#xff1a;https://tongyi.aliyun.com/qianwen/ 论文v3. : 一个全能的视觉语言模型 23.10 Qwen-VL: A Versatile…

读取信息boot.bin和xclbin命令

bootgen读Boot.bin命令 johnjohn-virtual-machine:~/project_zynq/kv260_image_ubuntu22.04$ bootgen -read BOOT-k26-starter-kit-202305_2022.2.bin xclbinutil读xclbin命令 johnjohn-virtual-machine:~/project_zynq/kv260_image_ubuntu22.04$ xclbinutil -i kv260-smartca…

Linux权限提升总结

几个信息收集的项目推荐 运行这几个项目就会在目标主机上收集一些敏感信息供我们参考和使用 一个综合探针&#xff1a;traitor 一个自动化提权&#xff1a;BeRoot(gtfo3bins&lolbas) 使用python2运行beroot.py就可以运行程序&#xff0c;然后就可以收集到系统中的大量信…

mysql锁表问题

问题描述 偶尔应用日志会打印锁表超时回滚 org.springframework.dao.CannotAcquireLockException: ### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transactionmysql锁…

vue-ueditor-wrap上传图片报错:后端配置项没有正常加载,上传插件不能正常使用

如图所示,今天接收一个项目其中富文本编辑器报错 此项目为vue2项目,富文本编辑器为直接下载好的资源存放在public目录下的 经过排查发现报错的函数在ueditor.all.min.js文件内,但是ueditor.all.min.js文件夹是经过压缩的 所以直接,将index.html中的引用路径修改为ueditor…

商城网站-礼品网站首页html+css+js+说明文档

网页设计与网站建设作业htmlcssjs 预览 说明 单页面&#xff0c;轮播图 获取&#xff1a;https://hpc.baicaitang.cn/2077.html

java的警示之有危险的行为

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;&#x1f468;&#x1f3fb;‍&#x1f393;告别&#xff0c;今天 &#x1f4d4;高质量专栏 &#xff1a;☕java趣味之旅 欢迎&#x1f64f;点赞&#x1f5e3;️评论&#x1f4e5;收藏&#x1f493;关注 &#x1f496;衷心的希…

06 | Swoole 源码分析之 Coroutine 协程模块

首发原文链接&#xff1a;Swoole 源码分析之 Coroutine 协程模块 大家好&#xff0c;我是码农先森。 引言 协程又称轻量级线程&#xff0c;但与线程不同的是&#xff1b;协程是用户级线程&#xff0c;不需要操作系统参与。由用户显式控制&#xff0c;可以在需要的时候挂起、或…

Redis中的复制功能(三)

复制 服务器运行ID 除了复制偏移量和复制积压缓冲区之外&#xff0c;实现部分重同步还需要用到服务器运行ID(run ID): 1.每隔Redis服务器&#xff0c;不论主服务器还是从服务&#xff0c;都会有自己的运行ID2.运行ID在服务器启动时自动生成&#xff0c;由40个随机的十六进制…

迈向数字化医疗:互联网医院APP开发中的设计思路与技术要点

在开发互联网医院APP时&#xff0c;需要综合考虑设计思路和技术要点&#xff0c;确保用户体验和医疗服务质量的提升。接下来&#xff0c;小编将从设计思路和技术要点两个方面进行讲解。 一、设计思路 用户导向&#xff1a;在设计互联网医院APP时&#xff0c;需要将用户体验放在…