FreeRTOS(7):时间片管理函数
实验现象使用串口助手在串口助手下实现如下图所示笔者的延时函数好像有一点问题现象应该是task1打印4次后切换到task2打印4次如此循环但是笔者task1和2的打印次数都不对但也算勉强体现出了想要结果若有解决方法可以在评论区写出或者私信笔者。创建工程选择上一个实验的Freertos_列表项的插入与删除复制粘贴重命名为Freertos_时间片调度实验打开别的江协科技的项目选择System文件复制其中的Delay.c和Delay.h文件粘贴到Freertos_时间片调度实验的Hardware文件夹中。编写代码进入keil按照下图顺序添加Delay.c和Delay.h文件添加完成后进入Delay.c文件因为江协科技的Delay函数使用了滴答计时器来实现延时与FreeRTOS的冲突了所以我们要更改一下笔者使用的是TIM4定时器如果有别的可以实现该实验功能的方法可以在评论区或者私信笔者下方是我的delay函数的代码#include stm32f10x.h #define TIM_DELAY TIM4 #define TIM_DELAY_CLK 72000000 /* 72MHz */ static uint8_t tim_delay_initialized 0; static void TIM_Delay_Init(void) { if (tim_delay_initialized) return; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); TIM_TimeBaseInitTypeDef TIM_InitStruct; TIM_InitStruct.TIM_Prescaler (TIM_DELAY_CLK / 1000000) - 1; // 1 MHz TIM_InitStruct.TIM_Period 0xFFFF; TIM_InitStruct.TIM_ClockDivision TIM_CKD_DIV1; TIM_InitStruct.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM_DELAY, TIM_InitStruct); TIM_Cmd(TIM_DELAY, ENABLE); tim_delay_initialized 1; } void Delay_us(uint32_t xus) { if (xus 0) return; TIM_Delay_Init(); TIM_SetCounter(TIM_DELAY, 0); while (TIM_GetCounter(TIM_DELAY) xus); } void Delay_ms(uint32_t xms) { while (xms--) { Delay_us(1000); } } void Delay_s(uint32_t xs) { while (xs--) { Delay_ms(1000); } }然后需要将Timer.c 中的中断函数中的内容和函数头上队列句柄删除如不删除会发生报错删除内容如下图所示随后我们要去到FreeRTOSConfig.h文件中将下图所示的宏定义改为20hz既一个时间片的时间为50ms接下来就是修改FreeRTOS_Task函数中的内容首先删除上一个实验与这个实验无关的内容如列表参数task1函数内的内容task2函数内的内容等下方是修改后的FreeRTOS_Task的代码#include stm32f10x.h #include FreeRTOS.h #include task.h #include queue.h #include led.h #include key.h #include serial.h #include timer.h #include delay.h /* 任务参数 */ #define START_TASK_SIZE 128 #define START_TASK_PRIO 1 #define TASK1_SIZE 256 #define TASK1_PRIO 3 #define TASK2_SIZE 256 #define TASK2_PRIO 3 /* 任务句柄 */ TaskHandle_t start_task_handle; TaskHandle_t task1_handle; TaskHandle_t task2_handle; void Start_task(void *pvParameters); void task_1(void *pvParameters); void task_2(void *pvParameters); void FreeRTOS_Task(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); Key_Init(); LED_Init(); Serial_Init(); xTaskCreate((TaskFunction_t)Start_task, Start_task, START_TASK_SIZE, NULL, START_TASK_PRIO, start_task_handle); vTaskStartScheduler(); } void Start_task(void *pvParameters) { taskENTER_CRITICAL(); xTaskCreate((TaskFunction_t)task_1, task_1, TASK1_SIZE, NULL, TASK1_PRIO, task1_handle); xTaskCreate((TaskFunction_t)task_2, task_2, TASK2_SIZE, NULL, TASK2_PRIO, task2_handle); taskEXIT_CRITICAL(); vTaskDelete(NULL); } /* * task_1 在一个时间片内每隔 10ms 打印一次计数连续运行直至被切换 */ void task_1(void *pvParameters) { uint32_t Task1_Num 0; while (1) { taskENTER_CRITICAL(); Task1_Num; Serial_Sendstring(Task1_Num ); Serial_SendNum(Task1_Num, 5); Serial_Sendstring(\r\n); taskEXIT_CRITICAL(); Delay_ms(10); /* 轮询忙等 10ms不释放 CPU */ } } /* * task_2 在一个时间片内每隔 10ms 打印一次计数连续运行直至被切换 */ void task_2(void *pvParameters) { uint32_t Task2_Num 0; while (1) { taskENTER_CRITICAL(); Task2_Num; Serial_Sendstring(Task2_Num ); Serial_SendNum(Task2_Num, 5); Serial_Sendstring(\r\n); taskEXIT_CRITICAL(); Delay_ms(10); /* 轮询忙等 10ms不释放 CPU */ } }随后运行下载代码后就能在串口助手里看见现象了再说一次笔者的延时函数好像有一点问题现象有误若有解决方法可以私信或者在评论区内指出。

相关新闻

NBTExplorer终极指南:3步轻松掌握《我的世界》数据编辑神器

NBTExplorer终极指南:3步轻松掌握《我的世界》数据编辑神器

NBTExplorer终极指南:3步轻松掌握《我的世界》数据编辑神器 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经因为《我的世界》存档损坏而束手…

2026/8/1 21:01:06阅读更多 →
西门子200smart模拟量滤波防抖PLC程序132(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

西门子200smart模拟量滤波防抖PLC程序132(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

西门子200smart模拟量滤波防抖PLC程序132(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 能实现电流电压和热电阻模拟量信号的采集,有滤波,有高位和低位报警, 采用for循环指令和间接寻址,让程序简…

2026/8/1 21:01:06阅读更多 →
如何快速提升游戏效率:智能辅助工具的完整指南

如何快速提升游戏效率:智能辅助工具的完整指南

如何快速提升游戏效率:智能辅助工具的完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 英雄联盟Akari助手是一款基于LCU AP…

2026/8/1 20:59:06阅读更多 →
直播技术架构全解析:从音视频处理到高并发分发实战

直播技术架构全解析:从音视频处理到高并发分发实战

1. 项目概述:从“风口”到“基建”,直播行业的价值重塑 最近几年,直播这个词,已经从一种娱乐消遣,彻底演变成了一个庞大的产业基础设施。无论是半夜刷到的带货直播间,还是公司内部的技术分享会,…

2026/8/2 3:11:50阅读更多 →
C#入门第一步:从零搭建环境到运行Hello World程序

C#入门第一步:从零搭建环境到运行Hello World程序

这次我们来看一个面向C#初学者的入门课程章节,主题是“编写第一个C#程序”。对于刚接触编程的新手来说,第一步往往是最关键也最容易卡住的。这个任务的核心不是理解复杂的面向对象理论,而是能不能在本地环境里成功搭建、配置、编译并运行一个…

2026/8/2 3:11:50阅读更多 →
游戏自动化工具部署与测试指南:以《植物大战僵尸》辅助为例

游戏自动化工具部署与测试指南:以《植物大战僵尸》辅助为例

这次我们来看一个名为“PE 河洛十炮 ch5u”的项目。从名称上看,这很可能是一个与《植物大战僵尸》游戏相关的自定义阵型或修改器,具体指向“PE”(泳池无尽)场景下的“河洛十炮”阵型,而“ch5u”可能代表某个特定的挑战…

2026/8/2 3:11:50阅读更多 →
Unity C# 枚举遍历性能优化:三种高效技巧与实战对比

Unity C# 枚举遍历性能优化:三种高效技巧与实战对比

1. 项目概述:为什么枚举遍历值得深究?在Unity开发中,枚举(Enum)是我们再熟悉不过的数据类型了。从定义角色状态、武器类型,到配置UI面板、游戏难度,枚举以其清晰的语义和类型安全的特点&#xf…

2026/8/2 3:11:50阅读更多 →
reComputer R1100边缘AI设备从开箱到部署YOLOv8全流程指南

reComputer R1100边缘AI设备从开箱到部署YOLOv8全流程指南

1. 从开箱到点亮:reComputer R1100 初印象与核心定位 最近拿到了一台 reComputer R1100,这是一款基于 NVIDIA Jetson Orin NX 16GB 模组的边缘 AI 计算设备。对于很多刚接触 Jetson 生态或者从其他嵌入式平台转过来的开发者来说,拿到这样一台…

2026/8/2 3:11:49阅读更多 →
混合量子-经典计算:破解大分子几何优化难题的DMET-VQE框架

混合量子-经典计算:破解大分子几何优化难题的DMET-VQE框架

1. 项目概述:当量子计算遇上分子几何优化最近在JCTC上看到一篇关于利用混合量子-经典计算进行大规模分子几何结构优化的文章,这让我这个在计算化学和量子计算交叉领域摸爬滚打了多年的从业者,感到非常兴奋。简单来说,这个方向的核…

2026/8/2 3:09:49阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/2 1:29:34阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/2 2:32:55阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/2 2:09:20阅读更多 →