本文主要是介绍华清远见作业第四十五天——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(第三天)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!