底层day3作业

思维导图

 作业:
1.总结任务的调度算法,把实现代码再写一下

算法:抢占式调度+时间片轮转
1.抢占式调度:任务优先级高的可以打断任务优先级低的执行(适用于不同优先级)

2.时间片轮转:每一个任务拥有相同的时间片(1ms),保证任务执行的公平性,当一个任务的时间片耗尽时任务就必须退出(适用于相同优先级)

//先定义出创建任务需要的属性和变量
osThreadId_t myTask03Handle;
const osThreadAttr_t myTask03_attributes = {.name = "myTask03",.stack_size = 128 * 4,.priority = (osPriority_t) osPriorityNormal1,
};void StartTask03(void *argument);
void StartDefaultTask(void *argument)
{/* USER CODE BEGIN StartDefaultTask *//* Infinite loop */for(;;){printf("StartDefaultTask is start\r\n");//判断ID是否为空,为空的话就将任务创建出来if(myTask03Handle == NULL){//创建任务3,任务3的优先级比任务2要高myTask03Handle = osThreadNew(StartTask03, NULL, &myTask03_attributes);}printf("StartDefaultTask is end\r\n");osDelay(500);}
void StartTask03(void *argument)
{for(;;){printf("StartTask03 is running\r\n");osDelay(500);}
}

时间片轮转:

    int i = 0;for(;;){printf("StartDefaultTask is start\r\n");for(i = 0; i < 9000000; i++){//模拟消耗时间片;}printf("StartDefaultTask is end\r\n");osDelay(500);}

 

2.总结任务的状态以及是怎么样进行转换的

Ready:就绪态,在创建任务后会进入就绪态

Running:运行态,任务正在运行

Blocked:阻塞态,因为等待某一个事件进入了休眠的状态(时间,互斥锁,信号量)

Suspended:挂起态,将任务挂起后任务还是存在的,可以进行恢复

怎么样进行转换:

Running->Suspnded:使用vTaskSuspend将任务挂起

Ready->Suspnded:使用vTaskSuspend将任务挂起,使用vTaskResume将任务恢复

Running->Blocked:使用休眠函数或者是被信号量,互斥锁等阻塞

Blocked->Suspnded:使用vTaskSuspend将任务挂起

Blocked->Ready:当休眠完成后或者是当等待到信号量,互斥锁等进行就绪态

总结:
 

1.什么是FreeRTOS

FreeRTOS是一个实时操作系统(RTOS),专注于提供可预测的、低延迟的任务调度和执行。它适用于对任务执行时间有严格要求的嵌入式系统

FreeRTOS设计简单,内存占用较小,适合于资源有限的嵌入式系统。FreeRTOS提供了基本的任务管理、内存管理和同步机制等基本功能,适用于简单的嵌入式系统。

FreeRTOS通常用于嵌入式系统、嵌入式控制器、传感器网络、汽车控制单元等需要实时性和低功耗的应用领域

2.为什么要引入FreeRTOS

引入操作可以提高CPU的运行效率

3.FreeRTOS和Linux操作系统的区别

实时性

FreeRTOS是一个实时操作系统(RTOS),专注于提供可预测的、低延迟的任务调度和执行。它适用于对任务执行时间有严格要求的嵌入式系统。

Linux是一个通用的操作系统,对实时性能要求相对较低。虽然有一些实时扩展如PREEMPT-RT,但Linux的实时性能不如FreeRTOS那么可预测。

内存占用

FreeRTOS设计简单,内存占用较小,适合于资源有限的嵌入式系统。

Linux拥有更多的功能和驱动程序支持,但相应地需要更多的内存和处理器资源。

功能和复杂性

FreeRTOS提供了基本的任务管理、内存管理和同步机制等基本功能,适用于简单的嵌入式系统。

Linux提供了丰富的功能,包括多任务管理、网络支持、文件系统等,适用于复杂的嵌入式系统和桌面服务器等环境。

应用领域

FreeRTOS通常用于嵌入式系统、嵌入式控制器、传感器网络、汽车控制单元等需要实时性和低功耗的应用领域。

Linux广泛应用于服务器、网络设备、桌面计算机、嵌入式系统(通常是更强大的嵌入式系统,如嵌入式 Linux)等领域。

4.STM32Cubemx配置FreeRTOS工程的步骤

FreeRTOS初始化

开启调度器,线程开始运行

调度器接管程序,不会在运行到while1

5.任务的概念

任务 == 线程

在FreeRTOS中,任务(Task)是并发执行的基本单元,它是一段独立执行的代码,可以被操作系统调度执行。

6.任务的优先级

任务的优先级就是代表任务执行的先后顺序。

数值越大任务的优先级越高

任务优先级越高任务越先执行

7.任务的创建方法

动态创建和静态创建

区别:

1.动态创建任务不需要手动提供栈,栈会由系统自动创建,静态创建任务需要自己提供栈,栈一般由数组来表示

2.动态创建适用于需要随时创建和删除任务的场景,静态创建任务适用于任务数量确定的场景。

3.动态创建任务需要消耗的资源会比较多,静态创建任务需要消耗的资源比较少。

8.任务的状态

Ready:就绪态,在创建任务后会进入就绪态

Running:运行态,任务正在运行

Blocked:阻塞态,因为等待某一个事件进入了休眠的状态(时间,互斥锁,信号量)

Suspended:挂起态,将任务挂起后任务还是存在的,可以进行恢复

9.任务的删除方法

删除自己

void osThreadExit (void)

删除其他任务

 osStatus_t osThreadTerminate (osThreadId_t thread_id)

10.任务的调度算法

算法:抢占式调度+时间片轮转
1.抢占式调度:任务优先级高的可以打断任务优先级低的执行(适用于不同优先级)

2.时间片轮转:每一个任务拥有相同的时间片(1ms),保证任务执行的公平性,当一个任务的时间片耗尽时任务就必须退出(适用于相同优先级)

11.空闲任务和空闲任务钩子函数

空闲任务是在系统中没有其他任务在执行的时候执行的一个特殊任务

1.空闲任务会监测是否有任务把自己删除了,如果有的话那么就释放他的资源。

2.防止CPU进行空转状态,浪费CPU资源。

钩子函数是通过钩子函数可以在FreeRTOS插入我们自己的代码。

开启空闲任务的钩子函数   钩子函数调用     实现函数主体

FreeRTOSConfig.h文件是FreeRTOS功能的总管文件,需要开启对应或者是关闭对应的功能,设置对应的宏开关就行了

适用场合:

1.空闲任务钩子是在空闲任务被调用的时候被调用

2.systick滴答定时器,在滴答定时器的中断被调用

3.在分配和申请内存失败的时候调用内存分配失败钩子函数

4.守护任务开启时调用

5.当栈溢出的时候使用

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

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

相关文章

定制红酒:与客户的互动沟通,提升定制满意度

在云仓酒庄洒派&#xff0c;云仓酒庄洒派深知与客户之间的互动沟通对于提升定制满意度至关重要。因此&#xff0c;云仓酒庄洒派始终致力于与消费者建立积极、进一步的沟通&#xff0c;确保他们能够获得满意的红酒定制体验。 首先&#xff0c;云仓酒庄洒派通过多种渠道与客户建立…

C语言数组地址详解及相关题——各种奇奇怪怪的偏难怪

文章目录 一、数组二、[]使用原理三、指针数组与数组指针指针数组数组指针 四、数组名、*数组名与&数组名的区别一维数组二维数组 空间移动计算总结 一、数组 数组&#xff08;英文 array&#xff09;就是一组同类型变量的集合。它具有三个特性&#xff1a;长度固定、连续…

19 卷积层【李沐动手学深度学习v2课程笔记】

目录 1. 从全连接到卷积 2. 卷积层 3. 图像卷积代码 3.1 互相关运算 3.2 实现二维卷积层 3.3 图像中目标的边缘检测 3.4 学习卷积核 4. 小结 1. 从全连接到卷积 在欧几里得几何中&#xff0c;平移是一种几何变换&#xff0c;表示把一幅图像或一个空间中的每一个点在相同…

《汇编语言》- 读书笔记 - 第16章-直接定址表

《汇编语言》- 读书笔记 - 第16章-直接定址表 16.1 描述了单元长度的标号&#xff08;数据标号&#xff09;检测点 16.1 16.2 在其他段中使用数据标号assume通过标号取地址检测点 16.2 16.3 直接定址表&#xff08;Direct Addressing Table&#xff09;例1分析代码效果 例2分析…

AIOPS:Zabbix结合讯飞星火做自动化告警+邮件通知并基于人工智能提供解决方案

目前Zabbix官方已经提供Zabbix+ChatGPT的解决方案 ChatGPT一周年,你充分利用了吗?Zabbix+ChatGPT,轻松化解告警! 但是由于需要魔法等其他因素,比较不稳定,遂决定使用国内模型,这里我挑选的是讯飞星火,基于我之前的文档,在此基础上通过Zabbix的告警脚本实现调用AI模型…

[C++]类和对象,explicit,static,友元,构造函数——喵喵要吃C嘎嘎4

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

关于数竞~

关于数竞 我的本科

【Redisson分布式锁】Redisson读写锁加锁机制分析

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

掘根教你拿捏C++异常(try,catch,throw,栈解退,异常规范,异常的重新抛出)

在介绍异常之前&#xff0c;我觉得很有必要带大家了解一下运行时错误和c异常出现之前的处理运行时错误的方式。这样子能更深入的了解异常的作用和工作原理 运行阶段错误 我们知道&#xff0c;程序有时候会遇到运行阶段错误&#xff0c;导致程序无法正常运行下去 C在运行时可…

云计算 3月8号 (wordpress的搭建)

项目wordpress 实验目的&#xff1a; 熟悉yum和编译安装操作 锻炼关联性思维&#xff0c;便于以后做项目 nginx 编译安装 1、安装源码包 [rootlinux-server ~]# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel [rootlinux-server ~]# wget http://nginx.…

玩转Random的正确姿势

一、关于java.util.Random 我们知道&#xff0c;在数学领域里面0到1之间的小数是无穷无尽的&#xff0c;所以如果从数学角度上来讲&#xff0c;要计算0到1之间某个小数出现的概率是不现实的&#xff0c;但是作为计算机领域的人员应该会注意到&#xff0c;大多数编程语言中随机…

类与对象(三)--static成员、友元

文章目录 1.static成员1.1概念&#x1f3a7;面试题✒️1.2static的特性&#x1f3a7;1.3思考&#x1f3a7; 2.友元2.1什么是友元&#xff1f;&#x1f3a7;2.2两种友元关系&#xff1a;&#x1f3a7; 1.static成员 1.1概念&#x1f3a7; &#x1f50e; static关键字用于声明类…