华清远见作业第四十五天——FreeRTOS(第三天)

2024-03-09 01:36

本文主要是介绍华清远见作业第四十五天——FreeRTOS(第三天),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

总结任务的调度算法,把实现代码再写一下

抢占式调度

简单来说就是谁的优先级高就先执行谁
//首先定义出任务相关信息

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)
{for(;;){printf("开始\r\n");if(myTask03Handle==NULL){//创建任务myTask03Handle=osThreadNew(StartTask03,NULL,&myTask03-attributes);}printf("结束\r\n");osDelay(500);}
}
void StartTask03(void *argument)
{for(;;){printf("0303\r\n");osDelay(500);}
}


时间片轮转

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

void StartDefaultTask(void *argument)
{int i=0;for(;;){printf("开始\r\n");for(i=0;i<9000000;i++){;    //模拟消耗时间片}printf("结束\r\n");osDelay(500);}
}


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

Ready:就绪态
Running:运行态
Blocked:阻塞态
Suspended:挂起态
从Running到Suspended:使用vTaskSuspend将任务挂起
从Ready到Suspended:使用vTaskSuspend将任务挂起,使用vTaskResume将任务恢复
从Running到Blocked:使用休眠函数或被信号量,互斥锁等阻塞
从Blocked到Suspended:使用vTaskSuspend将任务挂起
从Blocked到Ready:当休眠完成后或者是等待到信号量,互斥锁等进行就绪态

什么是FreeRTOS

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

为什么引入FreeRTOS

引入FreeRTOS可以提高CPU的运行速率

FreeRTOS和Linux操作系统的区别

FreeRTOS提供了基本的任务管理、内存管理和同步机制等基本功能,适用于简单的嵌入式系统。
Linux提供了丰富的功能,包括多任务管理、网络支持、文件系统等,适用于复杂的嵌入式系统和桌面服务器等环境。

STM32Cubemx配置FreeRTOS工程的步骤

创建然后在SYS里面勾选第一个
然后在RCC选择Crystal/Ceramic Resonator
然后生成程序

任务的概念

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

任务的优先级

根据任务的紧急程度来确定
任务的创建方法分配任务的优先级

任务的状态

Ready:就绪态
Running:运行态
Blocked:阻塞态
Suspended:挂起态

任务的删除方法

删除自己:void osThreadExit(void)
删除其他任务:osStatus-t osThreadTerminate (osThreadID-T thread-id)

任务的调度算法

抢占式
时间片轮转

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

空闲任务是在系统中没有其他任务在执行的时候执行的一个特殊任务。
钩子函数:通过钩子函数可以在FreeRTOS插入我们自己的代码。
 

这篇关于华清远见作业第四十五天——FreeRTOS(第三天)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/789126

相关文章

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

Java基础回顾系列-第三天-Lambda表达式

Java基础回顾系列-第三天-Lambda表达式 Lambda表达式方法引用引用静态方法引用实例化对象的方法引用特定类型的方法引用构造方法 内建函数式接口Function基础接口DoubleToIntFunction 类型转换接口Consumer消费型函数式接口Supplier供给型函数式接口Predicate断言型函数式接口 Stream API 该篇博文需重点了解:内建函数式

FreeRTOS学习笔记(六)队列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、队列的基本内容1.1 队列的引入1.2 FreeRTOS 队列的功能与作用1.3 队列的结构体1.4 队列的使用流程 二、相关API详解2.1 xQueueCreate2.2 xQueueSend2.3 xQueueReceive2.4 xQueueSendFromISR2.5 xQueueRecei

FreeRTOS学习笔记(二)任务基础篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 任务的基本内容1.1 任务的基本特点1.2 任务的状态1.3 任务控制块——任务的“身份证” 二、 任务的实现2.1 定义任务函数2.2 创建任务2.3 启动任务调度器2.4 任务的运行与切换2.4.1 利用延时函数2.4.2 利用中断 2.5 任务的通信与同步2.6 任务的删除2.7 任务的通知2

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )

Java高级Day38-网络编程作业

112.网络编程作业 //1.使用字符流的方式,编写一个客户端程序和服务器端程序//2.客户端发送"name",服务器端接收到后,返回"我是nova"//3.客户端发送"hobby",服务器端接收到后,返回"编写java程序"//4.不是这两个问题,回复"你说啥呢"​​===============//客户端//===============public class SocketT

龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了改进和优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以前往本人在B站的视频合集(图2所示)观看所有演示视频,合集首个视频链接为: 借助RT-Thread和LVGL