freertos常用任务函数----freertos初学笔记

2023-05-16

vtasksuspend 任务挂起函数,用户可以调用Vyasksuspend()函数将任何状态的任务挂起,被挂起的任务得不到cpu的使用权也不会参加调度,他相对于调度器而言是不可见的,除非解除挂起状态。

vtasksuspendall函数 将所有任务都挂起,也就是挂起任务调度器。

xtaskresumeall恢复所有任务函数,调度器被挂起后可以用此函数恢复,挂起了多少次就要调用多少次xtaskresumeall函数来恢复

vtask resume 任务恢复函数,

Xtaskresumeformisr()用来恢复被挂起的函数,xtaskresumeformisr专门用在中孤单服务中,无论被挂起了多少次,只需要调用一次此函数即可恢复

vtaskdelete任务删除函数,用于和删除一个任务。当一个任务删除另外一个任务时,形参为要删除任务创建时返回的任务句柄,如果删除自身,那么形参为NULL。

vtaskdelay 任务相对延时函数 ,每个任务都必须是死循环,并且每个任务都必须要有阻塞的情况,不然的话低优先级的任务就无法运行了。

vtaskdelayuntil 绝对延时函数,绝对延时函数常用于比较精准的周期运行任务,它以固定的频率定期执行不受外部的影响,任务从上一次运行到下一次运行开始的时候是绝对的,不是相对的。vtaskdelayuntil和vtaskdelay都是实现任务周期性延时的。但是vtaskdelay的延时是相对的,不确定的,他的延时是等vtaskdelay完毕后开始计算的,并且ctaskdelay延时时间到了以后如果有高级任务或者中断正在执行的话,被延时阻塞的任务并不会马上解除阻塞,所以每次执行任务的周期并不确定,而vtaskdelayuntil延时是绝对的,适用于周期性执行的任务。

xqueuecreate()消息队列创建函数,用于创建一个新的队列并返回可用于访问这个队列的队列句柄,队列句柄就是一个指向队列数据结构类型的指针,队列就是一个数据结构,用于任务间的数据的传递,每创建一个任务都需要为其分配RAM,一部分存储队列状态,剩下的作为队列消息的存储区域。

vqueuedelete()消息队列删除函数,队列删除是根据消息队列句柄直接删除的,删除之后这个消息队列的所有信息都会被系统回收清空,并且不能再次使用这个消息队列了,需要注意的是,无法删除没有被创建的消息队列。

xqueuesend是一个宏,展开是调用xqueuegenericsend()这个函数, 该 宏 是 为 了 向 后 兼 容 没 有 包 含 xQueueSendToFront() 和
xQueueSendToBack() 这 两 个 宏 的 FreeRTOS 版 本 。 xQueueSend() 等 同 于xQueueSendToBack()。
xquuesend()用于向队列尾部发送一个队列消息,消息以拷贝的形式入队,而不是引用的形式,这个函数不能再中断服务函数中调用,中断中必须用带中断保护功能的xqueuesendfromisr()来代替。

xQueueSendFromISR()是一个宏,宏展开是调用函数 xQueueGenericSendFromISR()。该宏是 xQueueSend()的中断保护版本,用于在中断服务程序中向队列尾部发送一个队列消息,

xqueuesendtofron()是一个宏,用于向队列队首发送一个消息,消息以拷贝的形式入队,而不是引用,该函数绝对不能在中断服务程序里面被调用,必须要又中断保护功能的函数才行

xQueueSendToFrontFromISR() 是 一 个 宏 , 宏 展 开 是 调 用 函 数xQueueGenericSendFromISR()。该宏是 xQueueSendToFront()的中断保护版本,用于在中断服务程序中向消息队列队首发送一个消息。

xqueuegenericsend ()通用消息队列发送函数,上面的消息发送函数都是xqueuegenericsend()展开的宏定义,真正在起作用的就是xqueuegenericsend函数,根据指定的参数不一样,发送消息的结果就是不一样。

xqueuegenericsenformisr()在中断中发送消息函数,该函数只能用于中断中执行。是不带阻塞机制的。

xqueuereceice是一个宏,宏展开是调用函数xqueuegenricreceive()。xqueue receive()用于从一个队列中接收消息并把消息从队列中删除,接收的消息是以拷贝的形式进行的,所以我们必须提供一个足够空间的缓冲区,该函数不能再中断中调用。

xqueuepeek函数在队列中接收消息但是不会删除消息。

xQueueReceiveFromISR()函数是 xQueueReceive ()的中断版本,用于在中断服务程序中接收
一个队列消息并把消息从队列中删除;

xqueuepeekfromisr是xqueuepeek的带中断版本。这两个函数都只能用于中断,不带阻塞机制的。

xqueuegenericreceive()从队列中读取消息。

消息队列使用注意事项:
1. 使用 xQueueSend()、xQueueSendFromISR()、xQueueReceive()等这些函数之前应先
创建需消息队列,并根据队列句柄进行操作。
2. 队列读取采用的是先进先出(FIFO)模式,会先读取先存储在队列中的数据。当
然也 FreeRTOS 也支持后进先出(LIFO)模式,那么读取的时候就会读取到后进
队列的数据。
3. 在获取队列中的消息时候,我们必须要定义一个存储读取数据的地方,并且该数
据区域大小不小于消息大小,否则,很可能引发地址非法的错误。
4. 无论是发送或者是接收消息都是以拷贝的方式进行,如果消息过于庞大,可以将
消息的地址作为消息进行发送、接收。
5. 队列是具有自己独立权限的内核对象,并不属于任何任务。所有任务都可以向同
一队列写入和读出。一个队列由多任务或中断写入是经常的事,但由多个任务读
出倒是用的比较少。

xsemaphorecreatebinary函数用于创建一个二值信号量。并返回一个句柄,其实二值信号量和互斥量都共同使用一个类型semaphorehandle_t的句柄。

xsemaphorecreatecounting()用于创建一个计数信号量。

vsemaphoredelete()用于删除一个信号量,包括二值信号量,计数信号量,互斥量和递归互斥量。

xsemaphoregive()用于释放信号量的宏,真正实现的工程是调用消息队列通用发送函数。
xsemaphoregivefromisr()用于释放一个信号量,带中断保护,被释放的信号量可以是二进制的信号量和计数信号量。他不能释放互斥量。因为互斥量不可以在中断中使用。

xsemaphoretake用于获取信号量,不带中断保护,获取信号量的对象可以是二值信号量也可以是计数信号量和互斥量,但是递归互斥量并不能使用这个API函数获取。

xsemaphorecreatemutex()用于创建一个互斥量,并返回一个互斥量句柄

xsemaphoretecreaterecursivemutex()用于创建一个递归互斥量,不是递归的互斥量由函数

xsmaphorecreatemutex()或者xsemaphoretemutexstatic()创建,且只能被同一个任务获取一次,如果同一个任务想再次获取则会失败,递归信号量则相反。它可以被同一个任务获取很多次,获取多少次就要释放多少次,递归信号量与互斥量一样,都实现了优先继承机制。

vsemaphoredelete()互斥量删除函数。

xsemaphoretake()互斥量获取函数。

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

freertos常用任务函数----freertos初学笔记 的相关文章

  • 【PX4-AutoPilot教程-3】uORB主题订阅发布机制理解、应用和代码阅读

    uORB主题订阅发布机制 1 PX4 Pixhawk的软件体系结构 PX4 Pixhawk的软件体系结构主要被分为四个层次 xff0c 这可以让我们更好的理解PX4 Pixhawk的软件架构和运作 xff1a 应用程序的API xff1a
  • 2020-11-23

    https blog csdn net guofei fly article details 104136008 utm medium 61 distribute pc relevant none task blog BlogCommend
  • MapReduce原理及简单实现

    MapReduce将数据的处理分成了两个步骤 xff0c Map和Reduce Map将输入的数据集拆分成一批KV对并输出 xff0c 对于每一个 lt k1 v1 gt xff0c Map将输出一批 lt k2 v2 gt xff1b R
  • 深度理解Python迭代器

    我们手动的实现一个for循环 xff1a li1 61 list range 10 iteratorObject 61 iter li1 while 1 try print next iteratorObject except StopIt
  • 关于mysql版本差异导致FIND_IN_SET()查询不到数据的问题

    这次发现的问题 xff0c 是在接手项目的时候 xff0c 和安卓端小伙伴测试时候发现的 xff0c 插入数据之后却查不出来 xff0c 通过排查定位到FIND IN SET 函数 xff0c 也是第一次接触FIND IN SET xff0
  • YOLOv4代码学习笔记一

    YOLOV4代码学习笔记一 YOLOV4简介CSPdarknet py学习 本文是对另一个博主的 睿智的目标检测30 Pytorch搭建YoloV4目标检测平台代码的学习 xff0c 由于我是cv新手 xff0c 很多东西不懂 xff0c
  • 无人机光流模块使用技巧

    无人机光流模块使用技巧 光流模块在无 GPS 环境下 xff0c 课实时检测飞机水平移动距离 xff0c 实现对四轴无人机长时间的稳定悬停 图1显示的是湖南优象LC 302光流模块的功能框图 xff0c 光流摄像头拍摄无人机垂直向下的画面
  • CMMI 2.0 和 1.3

    CMMI2 0与1 3在组织形式区别很大 xff0c 很多PA和之前的不太一样了 xff0c 而且PA在2 0中叫实践域 xff0c 1 3中叫过程域 不过其实核心内容没有大的变化 xff0c 只是相关内容的位置进行了调整 xff0c 部分
  • ROS2的RVIZ2无法启动

    在新安装的 xff32 xff2f xff33 2中启动rviz2 xff0c 启动错误 xff0c 显示 Failed to create an OpenGL context BadValue integer parameter out
  • 【TCP 重传、滑动窗口、流量控制、拥塞控制】

    文章目录 重传机制超时重传快速重传SACK方法Duplicate SACK 滑动窗口流量控制那操作系统的缓冲区 xff0c 是如何影响发送窗口和接收窗口的呢 xff1f 窗口关闭 拥塞控制慢启动拥塞避免拥塞发生快速恢复 重传机制 TCP 实
  • 【TCP四次挥手】

    文章目录 TCP 四次挥手过程是怎样的 xff1f 为什么挥手需要四次 xff1f 第一次挥手丢失了 xff0c 会发生什么 xff1f 第二次挥手丢失了 xff0c 会发生什么 xff1f 第三次挥手丢失了 xff0c 会发生什么 xff
  • FreeRTOS事件组----任务同步

    有时 xff0c 应用程序的设计需要两个或多个任务才能彼此同步 例如 xff0c 考虑一个设计 xff0c 其中任务A接收一个事件 xff0c 然后将事件所需的一些处理提供给其他三个任务 xff1a 任务B xff0c 任务C和任务D 如果
  • Qt中给按钮设置颜色的方法

    Qt中给按钮设置颜色的方法 第一种 CSS风格第二种 使用QPalette类第三种 使用QColor的另一种方法 对于界面编程来说 xff0c 色彩无疑是一个重点关注的对象 xff0c 界面好不好看 xff0c 色彩占据一大半 这里我在学习
  • codeblocks下载安装教程(完整详细)

    最近又将codeblocks下载了一下 xff0c 将完整的过程记录一下 一 下载教程 进入codeblocks官网 xff0c http www codeblocks org 点击downloads 一般都会选择第一个Download t
  • 使用VSCode需要安装的一些插件

    下载安装VSCode 下载安装 xff1a https code visualstudio com Download 通用插件 Auto Close Tag xff1a 匹配标签 xff0c 关闭对应的标签 Auto Rename Tag
  • QNAP之Container Station(docker)配置Redis

    本文目的 xff1a 使QNAP通过内置的docker安装redis 安装篇 首先ContainerStation中直接搜redis xff0c 有一个qnap官方提供的3 07版本的redis xff08 3年前 xff09 命令处请务必
  • QNAP之基于Container Station(docker)创建Ubuntu可视化桌面vnc

    型号 xff1a TS 231P 配置 xff1a ARM Cortex A15 CPU 64 1 70GHz 1G内存 目的 xff1a 为nas配置一个基于docker的vnc桌面 步骤概要 xff1a 1 创建一个ubuntu 2 安
  • Docker之基于docker-compose创建vsftpd容器

    前言 因为本人很菜 xff0c 每次配置vsftpd都头疼的要死 又因为网上vsftpd的教程会版本不一导致配置总是会出错 因此尝试使用docker来解决这个问题 而单纯只是用docker每次启动需要输入长串命令 xff0c 因此再结合do
  • 驻点运维人员被客户投诉要求换人,换还是不换?

    项目背景 xff1a 一位朋友提到了这样的情况 xff1a 项目背景是 xff1a 我的项目已经进入到运维阶段 xff0c 公司安排了一个运维人员现场驻点 到现在为止 xff0c 我这边已经多次接到客户的投诉 xff0c 说运维人员做事没有
  • 前端通过Ajax,向后端发送form表单的JSON数据,并后端接收JSON,使用fastJSON解析的一个完整案例

    前端代码 lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta name 61 34 view

随机推荐

  • Linux下饥荒远程服务器配置教程(包含mod的配置)(19/08/22/更新游戏更新后搜索不到服务器的对策)

    目录 xff1a 前言安装环境库安装steamcmd创建默认文件夹关于mod后记 xff1a 关于游戏更新 keyword 关键词 xff1a 饥荒 服务器 配置 linux ubuntu 参考链接 xff1a https blog csd
  • QNAP之基于ContainerStation(docker)下Aria2的配置方法

    型号 xff1a TS 231P 配置 xff1a ARM Cortex A15 CPU 64 1 70GHz 1G内存 目的 xff1a 为nas配置一个基于docker的aria2服务器 qnap从某个版本开始支持ContainerSt
  • BGP协议

    BGP协议 工作层工作原理BGP简单配置 含密码认证配置个人图解BGP 工作层 BGP是工作在应用层的协议 xff0c 但基于传输层的TCP协议 工作原理 路由协议通常分为内部网关协议 xff08 IGP Interior Gateway
  • Docker配置Ubuntu容器、ssh远程连接该容器

    span class token comment 详细请参考 https juejin cn post 6982419819211522079 span span class token comment 1 拉取 ubuntu 镜像 spa
  • Eth-Trunk链路聚合原理、静态和动态配置

    Eth Trunk原理 静态和动态配置 Eth Trunk链路聚合概述Eth Trunk链路聚合模式静态配置模式LACP动态模式 Eth Trunk链路聚合概述 在组网中经常遇到的问题 xff0c 单条链路的宽带无法满足整个园区的流量需求时
  • FreeRTOS学习笔记

    FreeRTOS学习历程 总结 xff1a 关键词 xff1a 动态创建 静态创建 任务级 中断级 一个任务至少有一个 span class token keyword do span span class token punctuatio
  • idea2020.1 常用设置

    idea2020 1 常用设置 停用自动更新设置版权自动编译设置插件设置字体大小行间距idea卡顿调整修改快捷键自动生成序列化ID自动导入包 停用自动更新 停用自动更新 xff0c 因为我也不知道更新后能不能用 xfffc 设置作者和代码相
  • 微服务的原理以及多线程的使用

    分布式应 用核 心CAP知识 xff1a CAP定理 指的是在一个分布式系统中 xff0c Consistency xff08 一致性 xff09 Availability xff08 可用性 xff09 Partition toleran
  • 【计算机网络】基础概念总结8-网关、广播和公/私IP

    8 网关 广播和私人地址 8 1 网关 比如有 网络A 和 网络B xff1a 网络A的IP地址范围为 34 192 168 1 1 192 168 1 254 34 xff0c 子网掩码为255 255 255 0 网络B的IP地址范围为
  • 系统上线后是运维流程还是开发过程?

    一位朋友提到这样的问题 xff1a 软件系统上线后是运维流程还是开发过程 xff0c 需求变更量较大的情况 俺的简单建议 xff1a 这个不是二选一的问题 xff0c 系统上线后 xff0c 其实维护和开发的工作都会有 你提到 需求变更量较
  • vnc服务器搭建

    1 vnc 服务简介 vnc Server会在服务器端启动一个监听用户要求的端口 xff0c 一般端口号在5901 xff5e 5910之间 xff0c 当客户端启动X server连接到5901后 xff0c vnc Server再将一堆
  • ubuntu18.04安装显卡RTX3090(python3.8+nvidia Drive455.38+cuda11.1+cudnn7+pytorch1.7+torchvision0.8)

    引言 实验室服务器是Ubuntu18 04 xff08 16 04和20 04 xff09 xff0c 刚刚显卡升级到RTX3090 记录一下装机过程 xff0c 每一个过程的小部分也可能单独用到 所以罗列一些用到的网站链接 xff0c 省
  • 7步教你使用Keil使用注释模板,好好注释,从我做起!

    前言 当你看到别人好的注释模板的时候是否还在多文件复制粘贴呢 xff1f 教你一招 把前人好的模板套用起来 好好注释 xff0c 从我做起 xff01 提示 xff1a 本操作在Keil4环境下进行 xff0c Keil5环境同理 一 打开
  • STM32学习——GPIO应用之跑马灯+蜂鸣器实验

    GPIO应用 跑马灯 43 蜂鸣器实验 跑马灯和蜂鸣器的实验都是使用的 GPIO 的通用推挽输出模式 xff0c 这是 GPIO 最简单的一个基本功能 1跑马灯实验 1 1硬件设计 如图所示跑马灯使用的 LED 只有 DS0 xff08 红
  • STM32学习——串口

    STM32学习 串口 USART通用同步异步收发器 xff08 Universal Synchronous Asynchronous Receiver Transmitter xff09 是一串行通信设备 xff0c 可以灵活地与外部设备进
  • core dumped 错误

    Aborted xff08 core dumpde xff09 一般是关于内存异常 xff1a 详细解释 gdb使用 1 往受到系统保护的内存地址写数据 有些内存是内核占用的或者是其他程序正在使用 xff0c 为了保证系统正常工作 xff0
  • 使用OpenCV进行特征(颜色、形状)提取

    图像处理 图像处理所做的只是从图像中提取有用的信息 xff0c 从而减少数据量 xff0c 但保留描述图像特征的像素 下面从图像中提取颜色 形状和纹理特征的方法开始 1 颜色 每次处理图像项目时 xff0c 图像的色彩空间都会成为最先探索的
  • proxifier中文汉化版

    在日常工作中使用到一些网络不稳定的服务时 xff0c 经常会遇到一个很头疼的问题 xff0c 那就是非常慢 xff0c 很是令人抓狂 xff0c 所以小编将介绍一款非常好用的代理客户端proxifier 软件下载点击这里 xff0c 支持s
  • K8S-微服务调用及运行过程

    为什么分析微服务过程调用 在实际的项目中 xff0c 微服务之间涉及到业务代码的部分 xff0c 调用逻辑非常复杂 对于工程师而言 xff0c 熟悉组件之间的调用关系 方便之后的业务模块开发 以及集群部署与自动化编排过程中有非常大的帮助 x
  • freertos常用任务函数----freertos初学笔记

    vtasksuspend 任务挂起函数 xff0c 用户可以调用Vyasksuspend xff08 xff09 函数将任何状态的任务挂起 xff0c 被挂起的任务得不到cpu的使用权也不会参加调度 xff0c 他相对于调度器而言是不可见的