RTOS学习笔记--时间片调度
RTOS学习笔记–时间片调度
本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号
介绍:在RTOS中,除了按优先级调度之外,还可以按照时间片调度,也就是给每个任务分配一个时间片,在该时间片中执行任务。时间片可以设置,由SystemStick决定
其结构如下所示
- 首先Task1运行完一个时间片后,切换至Task2运行
- Task2运行完一个时间片后,切换至Task3运行
- Task3运行过程中(还不到一个时间片),Task3阻塞了(系统延时或等待信号量等),此时直接切换到下一个任务Task1
- Task1运行完一个时间片后,切换至Task2运行
注意:
- 同等优先级任务,轮流执行;时间片流转
- 一个时间片大小,取决为滴答定时器中断频率
- 注意没有用完的时间片不会再使用,下次任务Task3得到执行还是按照一个时间片的时钟节拍运行
如果在一个时间片内,任务没有执行完毕,那么将会等到下一个时间片在继续该任务剩下的代码。
代码实现
开启时间片调度,以及设置时间片
/*FreeRTOSConfig.h*/
#define configUSE_PREEMPTION 1
/*FreeRTOS.h*/
#ifndef configUSE_TIME_SLICING#define configUSE_TIME_SLICING 1
#endif
设置时间片周期
/*FreeRTOSConfig.h*/
#define configTICK_RATE_HZ ((TickType_t)20)/*1000/20 = 50ms*/
/*设置的是频率 频率为20HZ 周期为1/20=0.05s =50ms*/
设置要按时间片调度任务优先级相同
/*任务2*/
#define TASK2_PRIO 2/*任务3*/
#define TASK3_PRIO 2
任务实现
/*任务2*/
void task2(void *argv)
{uint32_t task2_times=0;while(1){/*进去临界区,保护数据*/taskENTER_CRITICAL();printf("Task2 Run times:%d\r\n",task2_times++);/*退出临界区*/taskEXIT_CRITICAL();HAL_Delay(10);}}
/*任务3*/
void task3(void *argv)
{uint32_t task3_times=0;while(1){taskENTER_CRITICAL();printf("Task3 Run times:%d\r\n",task3_times++);taskEXIT_CRITICAL();HAL_Delay(10);}
}
分析:
- 没有采用阻塞延时vTaskDelay(n) 使其进入阻塞态,说明其一直处于就绪态
- 按照一个时间片运行时间是50ms
运行结果
Task2 Run times:0
Task2 Run times:1
Task2 Run times:2
Task2 Run times:3
Task2 Run times:4Task3 Run times:0
Task3 Run times:1
Task3 Run times:2
Task3 Run times:3
Task3 Run times:4Task2 Run times:5
Task2 Run times:6
Task2 Run times:7
Task2 Run times:8Task3 Run times:5
Task3 Run times:6
Task3 Run times:7
Task3 Run times:8Task2 Run times:9
Task2 Run times:10
Task2 Run times:11
Task2 Run times:12
Task2 Run times:13
分析
- 一个时间片运行时间是50ms,而一个任务延时10ms,由于printf也占用时间,所以理论上一个时间片打印4-5次左右。
如果任务的优先级不同如Task2为2 Task3 为3 则会一直在Task3中运行,是抢占式调度,而Task3中使用HAL_Delay延时,也就是一直处于就绪态,从未退出,所以会一直运行
RTOS学习笔记--时间片调度相关推荐
- RTOS学习笔记--RTOS系统介绍
RTOS学习笔记–RTOS介绍 本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号 RTOS特点:RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时 ...
- RTOS学习笔记--FreeRTOS的列表和列表项
RTOS学习笔记–FreeRTOS的列表和列表项 本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号 列表和列表项的简介 列表是 FreeRTOS 中的一个数据结构,概念上 ...
- 正点原子STM32 UCOSiii学习笔记——时间片轮转调度
在学习正点原子视频的时间片轮转调度时,发现一个问题:当设置时间片为2个10ms时串口收到的消息为图1所示,Tsak1输出5次以后(未执行换行)2个时间片用完,Task2开始执行,输出5次后回到Task ...
- [Linux][内核学习笔记]--CFS调度器
文章目录 1. 进程的状态转换 2. 内核调度器的发展 3. 调度策略 4. 与调度相关的系统调用 5. 优先级 6. CFS调度器的实现 6.1 相关结构体 6.1.1 sched_entity 结 ...
- Windows进程与线程学习笔记(七)—— 时间片管理
Windows进程与线程学习笔记(七)-- 时间片管理 要点回顾 基本概念 CPU时间片 分析 KeUpdateRunTime 分析 KiDispatchInterrupt 备用线程 总结 要点回顾 ...
- Linux 学习笔记(八):时间片轮转调度
看这篇文章前可以先了解一下时间片:Linux 学习笔记(七):时间片_Amentos的博客-CSDN博客 一.基本概念 时间片轮转调度算法(Round-Robin,RR)主要用于分时操作系统中的进程调 ...
- FreeRTOS实时操作系统(七)时间片调度及RTOS的滴答定时器
系列文章目录 FreeRTOS实时操作系统(一)RTOS的基本概念 FreeRTOS实时操作系统(二)任务创建与任务删除(HAL库) FreeRTOS实时操作系统(三)任务挂起与恢复 FreeRTOS ...
- 调度框架学习笔记(3)—— 集群调度框架的架构演进过程
本章是 The evolution of cluster scheduler architectures 文章的学习笔记.这篇文章讨论了这些年调度架构是如何发展的以及为什么会这样发展. 首先介绍一下这 ...
- Windows进程与线程学习笔记(四)—— 等待链表调度链表
Windows进程与线程学习笔记(四)-- 等待链表&调度链表 要点回顾 33个链表 等待链表 实验:分析等待链表中的线程所属的进程 第一步:查看所属线程结构体: 第二步:查看所属进程结构体 ...
最新文章
- Influxdb1.2.2安装
- java虚拟机规范这本书怎么样_JVM规范系列开篇:为什么要读JVM规范?
- web前端性能意义、关注重点、测试方案、优化技巧
- [Java] Welcome to Artifactory 使用说明
- MVC教程第四篇:传递表单数据
- Serv-U组建个人FTP服务器, ——完全图解教程:FTP架设、端口映射、动态域名申请...
- 深入浅出Hibernate 笔记一(面向应用的持久层设计)
- 关于“时间序列回归”,这些你必须知道的事!
- Java虚拟机最多支持多少个线程?
- 高斯分布函数c语言编程,c语言 写高斯分布函数
- npm下载安装 nodejs下载安装
- 2020车载凯立德懒人包下载_【汽车导航升级】2020抖音最新流行音乐包 无损 可CD刻录福利分享...
- 3.3 RESET and Initialization Procedure
- echarts实现颜色渐变
- linpack实验:MPI代码调优
- 益智拼图APP隐私政策
- 解释源代码文件、目标代码文件和可执行文件之间的区别
- android bilibili sd卡,移动bilibili缓存视频到SD卡
- 【数据分析】python基础必修3—条件语句/运算符/真假值/循环/算法练习
- 【js】js面试题汇总
热门文章
- 计算机网络实验华中科技大学,华中科技大学计算机网络实验报告.pdf
- 哈夫曼树及哈夫曼编码(考试常考版)
- STM32硬件I2C的一点心得(AT24C32C和AT24C64C)
- 在国企的日子(第四章 团建)
- 在wps中实现二级联动
- SQL Server高级教程
- SQL注入漏洞 详解
- canvas-实现放大镜效果
- LTspice基础教程-006.运行仿真与瞬态分析
- 微信公众号网页授权40029错误,小程序微信支付前后端逻辑? (微信授权支付之 (篇一))