目录

时间片调度简介

时间片调度实验


时间片调度简介

同等优先级任务轮流地享有相同的CPU时间(可设置),叫时间片,在FreeRTOS中,一个时间片就等于SysTick中断周期

运行条件:

1.创建三个任务: Task1、Task2、Task3

2.Task1、Task2、Task3的优先级均为1;即3个任务同等优先级

运行过程如下:

1.首先Task1运行完一个时间片后,切换至Task2运行

2.Task2运行完一个时间片后,切换至Task3运行

3.Task3运行过程中(还不到一个时间片),Task3阻塞了(系统延时或等待信号量等),此时直接切换到下一个任务Task1

4.Task1运行完一个时间片后,切换至Task2运行

总结:

1.同等优先级任务,轮流执行。时间片流转

2.一个时间片大小,取决为滴答定时器中断频率

3.注意没有用完的时间片不会再使用,下次任务Task3得到执行还是按照一个时间片的时钟节拍运行

时间片调度实验

实验设计:将设计三个任务:start_task、task1、task2,其中task1和task2优先级相同均为2。为了使现象明显,将滴答定时器的中断频率设置为50ms中断一次,即一个时间片50ms

三个任务的功能如下:

start_task:用来创建其他的2个任务

Task1:通过串口打印task1的运行次数

task2:通过串口打印task2的运行次数

注意:使用时间片调度宏#define configUSE_PREEMPTION configUSE_TIME_SLICING置1

/********************************************************************************* @file           : user_mian.h* @brief          : V1.00******************************************************************************* @attention********************************************************************************//* Include 包含---------------------------------------------------------------*/
#include "stm32f10x.h"
#include <stdbool.h>
#include "user_gpio.h"
#include "user_delay.h"
#include "user_rcc_config.h"
#include "user_uart.h"
#include "FreeRTOS.h"
#include "task.h"/* Typedef 类型----------------------------------------------------------------*/
/* Define  定义----------------------------------------------------------------*/
/* Macro   宏------------------------------------------------------------------*/
/* Variables 变量--------------------------------------------------------------*/
/* Constants 常量--------------------------------------------------------------*/
/* Function  函数--------------------------------------------------------------*///任务优先级
#define START_TASK_PRIO     1
//任务堆栈大小
#define START_STK_SIZE      128
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);//任务优先级
#define TASK1_PRIO      2
//任务堆栈大小
#define TSTK1_SIZE      50
//任务句柄
TaskHandle_t Task1_Handler;
//任务函数
void task1(void *pvParameters);//任务优先级
#define TASK2_PRIO      2
//任务堆栈大小
#define TSTK2_SIZE      50
//任务句柄
TaskHandle_t Task2_Handler;
//任务函数
void task2(void *pvParameters);int main(void){  /*配置系统中断分组为4位抢占*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);/*延时函数初始化*/delay_init();/*RCC配置*/Rcc_config();/*GPIO初始化*/ Gpio_Init();/*USART1初始化*/Uart1_Init(9600);/*创建开始任务*/xTaskCreate((TaskFunction_t )start_task,            //任务函数(const char*    )"start_task",          //任务名称(uint16_t       )START_STK_SIZE,        //任务堆栈大小(void*          )NULL,                  //传递给任务函数的参数(UBaseType_t    )START_TASK_PRIO,       //任务优先级(TaskHandle_t*  )&StartTask_Handler);   //任务句柄              vTaskStartScheduler();          //开启任务调度}/*!\brief       开始任务函数\param[in]    传递形参,创建任务时用户自己传入\param[out]  none\retval     none
*/
void start_task(void *pvParameters)
{taskENTER_CRITICAL();           //进入临界区//创建任务1xTaskCreate((TaskFunction_t )task1,      (const char*    )"task1",     (uint16_t       )TSTK1_SIZE, (void*          )NULL,             (UBaseType_t    )TASK1_PRIO,    (TaskHandle_t*  )&Task1_Handler);   //创建任务2xTaskCreate((TaskFunction_t )task2,     (const char*    )"task2",   (uint16_t       )TSTK2_SIZE, (void*          )NULL,(UBaseType_t    )TASK2_PRIO,(TaskHandle_t*  )&Task2_Handler);         vTaskDelete(StartTask_Handler); //删除开始任务taskEXIT_CRITICAL();            //退出临界区
}/*!\brief      task1任务函数\param[in] 传递形参,创建任务时用户自己传入\param[out]  none\retval     none
*/
void task1(void *pvParameters)
{uint32_t task1_num = 0;while(1){/*进入临界去*/taskENTER_CRITICAL();     /*串口打印*/printf("task1次数:%d\r\n",++task1_num);   /*退出临界区*/taskEXIT_CRITICAL();    /*延时10毫秒不会触发任务调,一个时间片正常是运行2~5次*/delay_xms(10);}
} /*!\brief     task2任务函数\param[in] 传递形参,创建任务时用户自己传入\param[out]  none\retval     none
*/
void task2(void *pvParameters)
{uint32_t task2_num = 0;while(1){/*进入临界去*/taskENTER_CRITICAL();     /*串口打印*/printf("task2次数:%d\r\n",++task2_num);  /*退出临界区*/taskEXIT_CRITICAL(); /*延时10毫秒不会触发任务调度,一个时间片正常是运行2~5次*/     delay_xms(10);}
}/************************************************************** END OF FILE ****/

11_FreeRTOS时间片调度实验相关推荐

  1. 【09】FreeRTOS的时间片调度

    目录 1.时间片调度简介 2.时间片调度实验 2.1删除不相关程序 2.2使能两个宏 2.3修改滴答定时器中断频率 2.4完成程序内容 1.时间片调度简介   同等优先级任务轮流地享有相同的 CPU ...

  2. FreeRTOS实时操作系统(七)时间片调度及RTOS的滴答定时器

    系列文章目录 FreeRTOS实时操作系统(一)RTOS的基本概念 FreeRTOS实时操作系统(二)任务创建与任务删除(HAL库) FreeRTOS实时操作系统(三)任务挂起与恢复 FreeRTOS ...

  3. RTOS学习笔记--时间片调度

    RTOS学习笔记–时间片调度 本文基于正点原子RTOS开发指南,笔记自用,获取详细信息请关注正点原子官方账号 介绍:在RTOS中,除了按优先级调度之外,还可以按照时间片调度,也就是给每个任务分配一个时 ...

  4. linux处理机调度实验报告,处理机调度试验

    <处理机调度试验>由会员分享,可在线阅读,更多相关<处理机调度试验(19页珍藏版)>请在人人文库网上搜索. 1.实验报告的基本内容及要求1实验预习在实验前每位同学都需要对本次实 ...

  5. 处理机调度实验c语言,操作系统实验处理机调度C语言实现

    操作系统实验处理机调度C语言实现 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...

  6. c语言处理机调度实验报告,操作系统实验处理机调度C语言实现.docx

    操作系统实验处理机调度C语言实现.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. ...

  7. linux处理机调度实验报告,模拟Linux操作系统下处理机调度实验报告

    在采用多道系统的设计程序中,往往有若干进程同时处于就绪状态.当就绪状态进程数大于处理机数时,就必须按照某种策略来决定哪些进程优先占用处理机.本实验模拟在单处理机情况下处理机调度 处理机调度 一.实验目 ...

  8. 磁盘移臂调度实验_10 Swarm 的安装和基本的服务编排调度

    Swarm 的安装和基本的服务编排调度 前提条件: 准备好三台测试用机器: Ubuntu 18.04/ 1 CPU/ 2GB 内存/ 30GB磁盘 并且安装好Docker 安装Swarm 在maste ...

  9. 处理机调度实验总结_计算机系统结构总结

    系统结构总论 总目标:快 总原理:加快经常性事件 量化原理:Amdahl定理 Amdahl定理指出加快某部件执行速度所能获得的系统性能加速比,受限于该部件的执行时间占系统总时间的百分比. 加速比 = ...

最新文章

  1. 基于模糊聚类的色彩迁移算法
  2. 全网最详细的大数据集群环境下如何正确安装并配置多个不同版本的Cloudera Hue(图文详解)...
  3. 面对 20 亿行代码,Google 如何管理?
  4. 惊呆了,JDK中这些常用方法也有Bug?
  5. 在java中删除某个文件
  6. miniob :相关环境配置
  7. mybatis $和#源代码分析
  8. 地图统计_博客 城市访问量统计并且通过Echarts+百度地图展示
  9. LFM算法——推荐系统
  10. Redkale 让你重新认识Java
  11. 小明买了一箱鸡蛋,假设有n个,可以一天吃1个,也可以一天吃2个,请问有多 少种方法可以吃完?...
  12. docker CI部署样例
  13. xshell官方个人免费版申请下载使用
  14. 杨帅浙江大学计算机,诚邀校友见证杭州校友会注册成立(非活动帖)
  15. 三星设备如何打开开发者模式、如何下载安装play store以便进行正常的Android开发中的google购买测试
  16. 11 空间平面方程 : 参数方程、向量式方程、行列式方程、三点式方程、点法式方程、一般方程
  17. C# CSharp计算标准偏差 重复精度 和Excel中的STDEV函数相同
  18. 鼠标移入或悬浮禁用图标,点击事件不生效
  19. Reading Comprehension必读paper汇总
  20. linux界面任务栏平铺,可能是linux 4.9.8的问题-安装15.4后桌面没有任务栏

热门文章

  1. Windows 下无痛安装 TensorFlow (GPU版)
  2. 看过无数总结,经历无数实践,这才是顶级IT公司的架构设计
  3. NumPy的数组对象:ndarray
  4. MATLAB【数字图像处理】 实验五:形态学图像处理
  5. Opencv实践应用之答题卡处理
  6. 如何合并svn分支到主干上
  7. java 线程锁Lock
  8. java 判断是否为男女_java:生成中文姓名(区分男女)
  9. 一幅长文细学GaussDB(一)——数据库介绍
  10. 事件监听机制(一)Java事件监听