freeRTOS---空闲任务与阻塞延时(1)

2023-11-07

在上传这篇文章的时候,同时也上传了代码,欢迎下载!

RTOS中的延时是在需要延时的时间内任务放弃CPU的使用权,超过延时时间后重新获得CPU的使用权。叫做:阻塞延时。

**空闲任务是在启动调度器后创建的,是CPU空闲时候运行的,是优先级最低的。空闲任务主要做一些清理内存的的任务。**空闲任务是不允许阻塞的。
如何实现空闲任务?
1.在main.c定义空闲任务栈。
首先在freeRTOS中定义空闲任务栈最小的任务栈大小(单位是 :字):

#define configMINIMAL_STACK_SIZE             ((unsigned short)  128)  //单位是 字

然后在main.c中获取空闲任务的内存:

// 获取空闲任务的内存
StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];

2.main.c中定义空闲任务的任务控制块。

TCB_t IdleTaskTCB;

Idle 是空闲的意思。

3.在task.c中定义空闲任务函数主体。

#define portTASK_FUNCTION(prvIdleTask,  pvParameters)   void vFunction(void *pvParameters)
static portTASK_FUNCTION(prvIdleTask,  pvParameters)
{
    // 禁止编译的警告
	  (void)pvParameters;
	  for(;;)
	 {
	     // 空闲任务暂时什么什么都不做
	 }
}	

4.在task.c的调度器函数中创建空闲任务。

void vTaskStartScheduler(void)   // 调度器函数
{
	  // 创建空闲任务开始
	  TCB_t *pxIdleTaskTCBBuffer = NULL;            // 用于指向空闲任务控制块
	  StackType_t *pxIdleTaskStackBuffer = NULL;   // 用于空闲任务栈起始地址
	  uint32_t ulIdleTaskStackSize;
	  
	  // 获取空闲任务的内容
	  vApplicationGetIdleTaskMemory(&pxIdleTaskTCBBuffer,  
	                                &pxIdleTaskStackBuffer, 
	                                &ulIdleTaskStackSize  
	                                );
	
	  xIdleTaskHandle = xTaskCreateStatic((TaskFunction_t)prvIdleTask,   //任务入口
	                                      (char *)"IDLE",                //任务名称,字符串形式
																				(uint32_t)ulIdleTaskStackSize, //任务栈大小,单位为字
																				(void *)NULL,                  // 任务形参
																				(StackType_t *)pxIdleTaskStackBuffer, // 任务栈起始地址
																				(TCB_t *)pxIdleTaskTCBBuffer //任务控制块
	                                     );
	  // 将任务添加到就绪列表
		vListInsertEnd(&(pxReadyTasksLists[0]),&(((TCB_t *)pxIdleTaskTCBBuffer)->xStateListItem));
	   // 创建任务函数结束
	 
    // 手动指定第一个运行的任务
	  pxCurrentTCB = &Task1TCB;
	
	  // 启动调度器
	  if(xPortStartScheduler() != pdFALSE)
		{
		    // 调度器启动成功,否则返回,即不会来到这里
		}
}

在main.c中定义:

void vApplicationGetIdleTaskMemory(TCB_t **ppxIdleTaskTCBBuffer,  
	                                StackType_t **ppxIdleTaskStackBuffer, 
	                                uint32_t *pulIdleTaskStackSize  
	                                )
{
    *ppxIdleTaskStackBuffer = &IdleTaskTCB;
	  *ppxIdleTaskStackBuffer = IdleTaskStack;
	  *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}	

在task.c中声明空闲任务的句柄;

static TaskHandle_t xIdleTaskHandle   =    NULL;

并且在task.c中声明:

extern void vApplicationGetIdleTaskMemory(TCB_t **ppxIdleTaskTCBBuffer,  
	                                StackType_t **ppxIdleTaskStackBuffer, 
	                                uint32_t *pulIdleTaskStackSize  
	                                );	                          

在task.c中声明:

#define portTASK_FUNCTION(vFunction,pvParameters) void vFunction(void *pvParameters)

写函数:

//空闲任务就是在这个函数中实现。
static portTASK_FUNCTION(prvIdleTask,  pvParameters)
{
    // 禁止编译的警告
	  (void)pvParameters;
	  for(;;)
	 {
	     // 空闲任务暂时什么什么都不做
	 }
}	

注意声明的位置。我写代码的时候很多次因为声明的位置上不正确而报错。

如果有错误,欢迎批评指正!
欢迎交流学习!

完。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

freeRTOS---空闲任务与阻塞延时(1) 的相关文章

  • 写需求分析必须牢记的5大要点

    需求验证的5大要点 要做好需求验证 必须在思想 方法 语言 人员 内容5个要点上做好相应的工作 否则就会产生很多负面的影响 1 思想 前面已经说过 由于Review被翻译成 评审 导致很多人将其与中国人常说的评审相混淆 其实它们之间是有区别
  • 初学树莓派——(六)树莓派安装OpenCV及USB摄像头配置

    目录 1 安装OpenCV 1 1前言 1 2换源及源内容更新 1 3安装依赖 1 4下载whl包 1 5安装OpenCV 1 6检查安装 2 USB摄像头配置 同时检查OpenCV安装情况 2 1前言 2 2Python调用cv2库来检查
  • GPIO引脚的模式设置:开漏、推挽、拉高、拉低、中断输入、串行通信、模拟输入输出、容错输入、PWM输出。过零检测介绍。

    开漏输出 软件 将GPIO口设置为开漏输出模式 可以实现开漏输出控制方式 输出电平只能被拉低 而不能被拉高 在使用开漏输出时 需要外部接上一个上拉电阻 将输出电平拉高到高电平 开漏输出常用于驱动I2C总线 LED灯等场景中 硬件设置为开漏输
  • firmware-mod-kit工具安装和使用说明

    一 firmware mod kit工具的安装 firmware mod kit工具的功能和binwalk工具的类似 其实firmware mod kit工具在功能上有调用binwalk工具提供的功能以及其他的固件解包工具的整合 下载fir
  • main.c(31): warning: #223-D: function “uart_init“ declared implicitly

    Keil5编程之warning 223 D function xxx declared implicitly 1 函数没有头文件中进行声明 在头文件中添加声明 2 定义错误 字母大小可能不一致 仔细看一下出现问题的函数是否在声明和调用时使用
  • 粤嵌GEC6818开发板-入门感慨篇(续一)

    触摸屏的事件 include
  • verilog奇数分频器的问题讲解(7分频为例)

    先不多哔哔 直接上代码 verilogHDL 代码的后面讲原理 module fenpin3 clk clk7 rst input clk rst 设置rst的目的是当rst 1的时候给cnt0和cnt1赋初值 output clk7 re
  • 嵌入式 在开发板显示bmp图片、jpeg图片

    嵌入式 在开发板显示bmp图片 jpeg图片 一 简述 记 在GEC6818开发板 800W 480H 显示24位的bmp图片 使用开源的jpeg库显示jpeg图片 代码 链接 https pan baidu com s 1G3jzvdnc
  • connect函数的用法

    作者 曾宏安 华清远见嵌入式学院讲师 在网络编程中 connect函数经常用来在套接字上初始化连接 无论是流式套接字还是数据报套接字都可以使用connect函数 但含义却不一样 下面我们分别来讨论一下 一 流式套接字 流式套接字通常使用的是
  • 按键的短按和长按检测

    方法一 常用的加延时函数 在中断服务函数中加一个比如10ms的延时函数 延时时间的长短取决于实际所用的按键特性 只要延时时间比抖动时间略大即可 原理很简单 加了延时就避开了抖动的这段时间 在延时之后判断引脚电平 如果为低电平就表示是按下 v
  • LWIP在STM32上的移植

    本文做记录摘抄 加上自己的体会 文章标题 STM32使用LWIP实现DHCP客户端 http www cnblogs com dengxiaojun p 4379545 html 该文章介绍了几点 LWIP源码的内容 关键点 1 inclu
  • 解决Keil调试模式下无法设置断点的问题

    问题描述 使用Keil打开工程文件 进入调试模式后 只有main c文件里面可以设置断点 其余文件都不可以设置断点 可能的原因及解决方案 原因1 工程路径包含中文 解决方案1 更换为全英文路径 原因2 工程没有全部Rebuild 解决方案2
  • C#写的34401A串口232数据读取程序

    首先呢 请先设置惠普表为Talk only模式 也就是31 还不明白的自己查手册去 另外 各个表设置不一样 比如我这里2块表就不一样 一块是7位数据位 even校验 另一块是8位数据位 none校验 具体的可以看看表里的i o那里的设置 数
  • 物联锁项目失败原因分析

    一 背景 2022年3月份接手IM024物联锁项目救火 此项目主要用于医院共享轮椅 共享病床 此项目是从2021年初开始立项开发 投入了大量的人力物力 但是在2022年3月份时产品工作仍然不稳定 此项目基本上可以判定为一个失败的典型 为了吸
  • 面经——小米面经(2021春招)

    摘自 小米面经 2021春招 感谢小米 感谢雷总 感谢上官可编程 作者 阿波罗啦啦啦啦 发布时间 2021 05 01 11 08 41 网址 https blog csdn net weixin 44933419 article deta
  • FreeRTOS中断管理

    目录 说明 一 中断基础 1 1 中断理解 1 2 中断执行步骤 1 3 中断寄存器选择位 1 4 中断优先级分类 二 中断优先级分组设置 2 1 分类 2 2 特点 三 中断有关寄存器 3 1 SHPR1寄存器 3 2 SHPR2寄存器
  • 3559摄像头

    input aoni Webcam as devices platform soc 12310000 xhci 1 usb1 1 1 1 1 1 0 input input0 yuv转 的代码 https github com 198708
  • Java的引用类型有几种?区别是什么?

    nbsp Java的引用类型有几种 区别是什么 在开始前我有一些资料 是我根据自己从业十年经验 熬夜搞了几个通宵 精心整理了一份 Java的资料从专业入门到高级教程 工具包 点个关注 全部无偿共享给大家 在评论区回复 888 之后私信回复
  • 锂电池管理系统(BMS)

    引言 在现代科技的推动下 锂电池已经成为各种电动设备和能源存储系统的首选能源媒介 然而 锂电池在充电和放电过程中存在一系列潜在的安全隐患 同时其性能和寿命也受到一些限制 为了解决这些问题 锂电池管理系统 BMS 应运而生 BMS不仅仅是一个
  • 锂电池管理系统(BMS)

    引言 在现代科技的推动下 锂电池已经成为各种电动设备和能源存储系统的首选能源媒介 然而 锂电池在充电和放电过程中存在一系列潜在的安全隐患 同时其性能和寿命也受到一些限制 为了解决这些问题 锂电池管理系统 BMS 应运而生 BMS不仅仅是一个

随机推荐

  • BBR算法

    BBR算法 简述 bbr算法为google在2016年提出 用于改善tcp的性能 提升稳定性 降低延迟 更好地应对网络损伤 在整个算法调节周期中 bbr算法都在尽力维持最大bw和最小rtt 对比传统的tcp算法 传统算法不能区分是拥塞导致的
  • Qt命令行的使用

    以前使用命令行指定参数启动Qt程序都是用argc和argv 有时用Build环境设置 现在才知道原来Qt从5 2就有了两个类 QCommandLineParser 和 QCommandLineOption 专门用于命令行启动 它们属于Cor
  • 主机漏洞利用演示MS17-010(永恒之蓝)

    ms17 010危害 对被攻击方的电脑造成蓝屏 申明 本篇文章的用意仅做学习使用 网络搭建环境 软件 Vmware Workstation 17 攻击机 Kali 靶机环境 Windows 7 Nmap软件的基本功能 1 主机发现 Host
  • .NET平台框架解读

    概述 微软在 NET跨平台之路上付出了巨大的艰辛 同时做了海量的工作 首先推出了统一的API标准规范库 NET Standard 并不断补充完善标准库 截止目前 2023 6 30 最新版本为 NET Standard 2 1 2016年发
  • 最详细的Java入门到入土完整学习教程,学Java先收藏了!

    目录 Java是一门广泛应用于软件开发的高级编程语言 它以其跨平台性 面向对象的特性和丰富的生态系统而受到广大开发者的喜爱 本教程将带您从Java的入门阶段一直深入到精通的水平 涵盖了40种常用的Java开发技术栈 并结合中国的应用场景给出
  • yolov5,yolov4,yolov3乱七八糟的

    结构对比 别问这么好看的图哪来的 问就是善假于人 toulai 的 下面简单讲讲图中我认为比较明显的变化 yolov4 backbone 全部用的都是Mish激活函数取代了yolov3的Leakyrelu 在backbone就开始使用con
  • 【PCL】的五大依赖库及作用

    安装点云PCL Point Cloud Library 库时 需要额外安装5个依赖库 它们有什么作用呢 如下 Boost 用于共享指针和多线程 Eigen 一个标准的C 模板库用于线性代数 矩阵 向量等计算 FLANN Fast Appro
  • SpringBoot集成Spring Security

    1 Spring Security介绍 Spring security 是一个强大的和高度可定制的身份验证和访问控制框架 它是确保基于Spring的应用程序的标准 来自官方参考手册 Spring security 和 shiro 一样 具有
  • 模型训练到一个新batch时会被killed【原因以及解决方法】

    模型训练到一个新batch时会被killed 原因以及解决方法 1 减小batchsize 2 减小num workers 在Dataloader函数中
  • 【区块链】周鸿祎:写区块链最好的一篇文章;曾鸣:大部分关于区块链未来伟大前景的讨论还只是猜想而已

    区块链就是未来 也是一种回到互联网本来意义的方式 文 机器之能 注 奇虎360创始人周鸿祎说 这是了解区块链最深入浅出的一篇文章 以下正文 这组词序并没有任何意义 真正让它们有价值的地方在于 这个词序是由一个被称为 MetaMask 的软件
  • 类对象的私有数据是无法被直接访问的,但是为什么在复制构造函数中,可以直接通过引用访问被复制对象的私有数据?

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Sma
  • csdn获取自己所有博客的地址,包含分页

    获取自己的所有博客地址 一 步骤 1 先获取首页看到的部分 2 正则截取每月发表的博客数 总和即是所有的博客数 3 分页请求获取每一页的博客 4 正则截取获得每篇博客的地址 二 代码 import re import math import
  • 感应(异步)电机无速度传感器技术—TI例程解析

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制电流环PI控制参数设计 感应 异步 电机磁场定向控制速度环PI控制参数设计 感应 异步 电机无速度传感器技术 电压模型法 目录 电
  • Python实现简单猜数字游戏,输入不是整数时,给出提示

    猜数字游戏 要求 1 使用random 函数产生一个预设整数 让用户通过键盘输入所猜的数 如果小于预设的数 显示 遗憾 太小了 如果大于预设的数 显示 遗憾 太大了 如此循环 至猜中 提示 恭喜 预测N次 你猜中了 2 当用户输入的不是整数
  • thinkPHP_V5漏洞

    php rce攻防世界 百度thinkphpv5 查询到其存在过漏洞 在网页中随便注入 可观察到其版本为V5 0 20 再上旬该版本漏洞 描述为 只要在url后添加 s index think app invokefunction func
  • 全栈之前端

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 花开堪折直须折 莫待无花空折枝 作者主页 https www weiyigeek top 博客 https b
  • (董付国)Python 学习笔记---Python序列(4)

    字典应用案例 已有大量用户对若干电影的打分数据 现有某用户 也看过一些电影并进行过评分 要求根据已有打分数据为该用户进行推荐 1 代码采用基于用户的过滤协同算法 也就是根据用户喜好来确定与当前用户最相似的用户 然后再根据最相似用户的喜好为当
  • 数据分析02——numpy模块的在jupyter中的使用

    0 numpy 在计算机中会把数学当中的矩阵叫做数组 在很多应用中的表格也就是通过矩阵表示的 所以numpy广泛用于机器学习 数据分析 和图像处理领域 1 numpy常用方法和函数 前言 在使用numpy创建数组之前必须先导入模块 impo
  • php升级

    1 要使用lumen的单元测试 https lumen laravel com docs 5 2 testing 使用单元测试 cd 项目目录 phpunit tests 里面需要使用phpunit https phpunit de man
  • freeRTOS---空闲任务与阻塞延时(1)

    在上传这篇文章的时候 同时也上传了代码 欢迎下载 RTOS中的延时是在需要延时的时间内任务放弃CPU的使用权 超过延时时间后重新获得CPU的使用权 叫做 阻塞延时 空闲任务是在启动调度器后创建的 是CPU空闲时候运行的 是优先级最低的 空闲