正点原子STM32 UCOSiii学习笔记——时间片轮转调度
在学习正点原子视频的时间片轮转调度时,发现一个问题:当设置时间片为2个10ms时串口收到的消息为图1所示,Tsak1输出5次以后(未执行换行)2个时间片用完,Task2开始执行,输出5次后回到Task1继续执行输出换行,输出5次后,Task2开始执行,开始循环。
但是任务1与任务2中都有一个任务调度函数,并且延迟的时间是1S,应该在Task1执行输出换行后发生调度执行任务2输出5次Task2:568789才对啊
//task1任务函数
void task1_task(void *p_arg)
{u8 i,task1_num=0;OS_ERR err;p_arg = p_arg;POINT_COLOR = RED;LCD_ShowString(30,130,110,16,16,"Task1 Run:000");POINT_COLOR = BLUE;while(1){task1_num++; //任务1执行次数加1 注意task1_num1加到255的时候会清零LCD_ShowxNum(110,130,task1_num,3,16,0x80); //显示任务执行次数for(i=0;i<5;i++) printf("Task1:01234\r\n");LED0 = ~LED0;OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1S}
}//task2任务函数
void task2_task(void *p_arg)
{u8 i,task2_num=0;OS_ERR err;p_arg = p_arg;POINT_COLOR = RED;LCD_ShowString(30,150,110,16,16,"Task2 Run:000");POINT_COLOR = BLUE;while(1){task2_num++; //任务2执行次数加1 注意task1_num1加到255的时候会清零LCD_ShowxNum(110,150,task2_num,3,16,0x80); //显示任务执行次数for(i=0;i<5;i++) printf("Task2:56789\r\n");LED1 = ~LED1;OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1S}
}
于是对代码做了多次修改,主要是添加了一个TEST函数优先级为4,Task1,Task2分别为5,并不时对任务调度函数做了屏蔽,使串口得到多种输出信息。修改的代码如下,注意将Task1,Task2循环的次数改为了4次。
//task1任务函数
void task1_task(void *p_arg)
{u8 i,task1_num=0;OS_ERR err;p_arg = p_arg;while(1){for(i=0;i<4;i++) printf("Task1:01234\r\n");OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1S}
}
//测试任务函数
void test_task(void *p_arg)
{u8 i,task1_num=0;OS_ERR err;p_arg = p_arg;while(1){for(i=0;i<5;i++) printf("TEST\r\n");OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1S}
}
///task2任务函数
void task2_task(void *p_arg)
{u8 i,task2_num=0;OS_ERR err;p_arg = p_arg;while(1){for(i=0;i<4;i++) printf("Task2:56789\r\n");OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1S}
}
得到结论,时间片轮转调度并不会发生调度点(当使用OS_SchedRoundRobin()函数放弃剩下的时间片时才会产生调度点)。添加TEST函数,Task1,Task2屏蔽OSTimeDlyHMSM()函数,除了开始会输出4次TEST随后在4次01234与4次56789之间来回输出;添加TEST函数,Task1不屏蔽OSTimeDlyHMSM()函数,Task2屏蔽OSTimeDlyHMSM()函数,开始会输出5次TEST,然后是4次01234,然后一直是56789。添加TEST函数,Task1,Task2都不屏蔽OSTimeDlyHMSM()函数,会输出4次TEST,4次01234,4次56789,循环。这都是在时间片长度为3的情况下(即时间足够完成Task1、Task2)
然后改为时间片长度2,并分别在Task1,Task2输出完4次后添加一条
printf("Task1任务切换\r\n");
和
printf("Task2任务切换\r\n");
语句
添加TEST函数,Task1,Task2都不屏蔽OSTimeDlyHMSM()函数,得到图2的串口信息。
画图解释图2
再画图解释图1
其它的都可以用类似的过程来解释
以上均为自己根据实验所理解的关于时间片轮转调度器,希望大家一起讨论,指正。
正点原子STM32 UCOSiii学习笔记——时间片轮转调度相关推荐
- 正点原子STM32——LCD学习笔记(2)
一:代码设计 lcd.h #include "stdlib.h" //LCD重要参数集 typedef struct { u16 width; //LCD 宽度u16 height ...
- 正点原子探索者板学习笔记——最开始的各种奇怪的bug
安装MDK5(514版)以及1.0.8支持包后出现:"One or more Device Family Pack Devices are not present" 用推荐的&qu ...
- 正点原子USMART调试学习笔记(二)
软件设计 keilkill.bat,是一个批处理文件,双击,可以删除 MDK 编译过程中产生的中间文件, 从而大大减少整个工程所占用的空间,节省硬盘空间,方便传输. 由于 USMART 默认提供了 S ...
- RTOS学习笔记--时间片调度
RTOS学习笔记–时间片调度 本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号 介绍:在RTOS中,除了按优先级调度之外,还可以按照时间片调度,也就是给每个任务分配一个时 ...
- 【正点原子STM32连载】第五十七章 USB读卡器(Slave)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 【正点原子STM32连载】 第六十二章 UCOSII实验2-信号量和邮箱 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 【正点原子STM32连载】第四章 STM32初体验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 正点原子STM32(基于HAL库)3
目录 高级定时器实验 高级定时器简介 高级定时器输出指定个数PWM 实验 高级定时器输出指定个数PWM原理 TIM1/TIM8 寄存器 硬件设计 课堂源码(输出指定个数PWM灯就闪几次) 程序设计 下 ...
- 【正点原子STM32连载】第四十六章 FATFS实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
最新文章
- F5刷新以及计算几秒钟的代码
- leetcode005 longest_palidrome
- MPB:宁大张德民组-对虾养殖系统微生物组样品的采集与制备
- 使用PHP Excel类读取和生成excel文件
- scala教程之:可见性规则
- scrapy 让指定的spider执行指定的pipeline
- c语言构造数据类型有,《c语言程序设计基础7构造数据类型.ppt
- 计算机直线的绘制实验报告,dda画直线实验报告
- C++动态绑定和静态绑定
- Android蓝牙A2dp profile的使用
- angularjs内置63个指令
- linux常见权限相关错误及解决
- BarTender数据批量打印软件的入门操作
- SQL注入之MYSQL注入
- i7 10700和10700f 10700k这三个CPU有什么区别
- Webots+ROS学习记录(4)——六轮全地形移动机器人
- 各种输入方法总结(C++)
- 针对常见的四种短路故障(单相接地短路,两相相间短路,两相接地短路,三相短路),可采取三种方法进行计算
- 需求背后程序员的辛酸—(由APP主题颜色随手机壳颜色变化需求带来的思考)
- c语言编写录音机思路,python实现网页录音效果