FreeRTOS任务间通信方式——队列

2023-05-16

一、三种任务调度方式

  1. 优先级抢占式调度
    • 每个任务都赋予了一个优先级
    • 每个任务都可以存在于一个或多个状态
    • 在任何时候都只有一个任务可以处于运行状态
    • 调度器总是在所有处于就绪态的任务中选择具有最高优先级的任务来执行
  2. 选择任务优先级
    这种任务调度方式是依据每个任务的运行周期来做决定的,简单来讲,就是任务运行频率越高,优先级越高,受调度运行的次数就越多。但是运行时间不定以及并非所有任务都具有周期性,会让这种方式的全面计算变得复杂。
  3. 协作式调度
    纯粹的协作式调度器只能在运行态任务进入阻塞态或是运行态任务显式调用taskYIELD()时,才会进行上下文切换。任务永远不会被抢占,而具有相同优先级的任务也不会自动共享处理器时间,协作式调度的这种工作方式虽然比较简单,但是可能会导致系统响应不够快

二、队列管理

FreeRTOS中各个单独任务的功能实现很可能需要任务之间相互通信以提供有用的系统功能。而在FreeRTOS中所有的通信和同步机制都是基于队列实现的。

  1. 什么是队列
    队列是数据结构中的一个概念,其最大的特性为先进先出(FIFO:First In First Out)

  2. 如何创建一个队列

    //返回值为NULL表示没有足够的堆空间分配给队列,非NULL表示队列创建成功,此返回值应该保存下来,作为操作此队列的句柄
    xQueueHandle xQueueCreate( unsigned portBASE_TYPE uxQueueLength,//队列深度
    			 unsigned portBASE_TYPE uxItemSize );//数据单元长度,以字节为单位
    
  3. 什么是队列阻塞
    读队列阻塞:读队列阻塞并不是指在读队列时遇到问题,阻塞住了。而是队列任务主动进入阻塞态以等待队列数据有效,一旦队列中数据单元有效,或者即使队列数据无效但等待时间超过100毫秒,此任务将会接触阻塞。
    写队列阻塞:写队列阻塞是当被写队列已满时,任务进入阻塞态以等待队列空间有效的最长时间

  4. 往队列发送和从队列接收时,任务优先级会有怎样的影响
    任务优先级会在阻塞情况下起作用:
    读阻塞情况下,如果有多个任务同时读阻塞,一旦队列数据有效,则最高优先级任务解除阻塞,来读数据;如果所有阻塞的任务优先级相同,则数据有效时,等待时间最长的任务解除阻塞来读数据。在写阻塞情况下,处理流程和读阻塞情况下相同

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

FreeRTOS任务间通信方式——队列 的相关文章

  • 【FreeRtos学习笔记】STM32 CubeMx——Timers(定时器)

    目录 1 软件定时器 2 示例程序 2 1 例程功能 2 2 步骤 2 3 实验结果 2 4 函数讲解 1 软件定时器 定时器是MCU常用的外设 我们在学习各种单片机时必然会学习它的硬件定时器 但是 MCU自带的硬件定时器资源是有限的 而且
  • FreeRTOS简述和移植文档

    FreeRTOS简述和移植文档 文章目录 FreeRTOS简述和移植文档 1 前言 2 FreeRTOS简述 1 概述 2 实现 3 主要特色 4 支持平台 3 移植FreeRTOS 4 最后 1 前言 目前由于IOT的飞速发展 针对单片机
  • 一文教你学会keil软件仿真

    仿真在我们调试代码中是非常重要的 通过仿真 我们可以快速定位到错误代码 或者错误逻辑的地方 这里我就以上一篇博客为例 教大家如何软件仿真 软件仿真不需要单片机 直接通过keil软件进行代码调试 一 打开工具 二 选择软件仿真 三 开始仿真
  • Freertos中vTaskDelay()是怎么用的

    1 常见的使用场景 void vLED Task void pvParameters while 1 Heartbeat LED vTaskDelay 1000 portTICK RATE MS 说明 上面这段代码的意思是 led翻转后经过
  • 基于HAL库的FREERTOS----------一.任务

    FreeROTS 就是一个免费的 RTOS 类系统 这里要注意 RTOS 不是指某一个确定的系统 而是指一类系统 比如 UCOS FreeRTOS RTX RT Thread 等这些都是 RTOS 类操作系统 FreeRTOS 是 RTOS
  • FreeRTOS+CubeMX系列第一篇——初识FreeRTOS

    文章目录 一 关于FreeRTOS 二 FreeRTOS的特点 三 如何在CubeMX上配置FreeRTOS 四 FreeRTOS文档资料 五 同系列博客 一 关于FreeRTOS 1 什么是FreeRTOS FreeRTOS是一个迷你的实
  • FreeRTOS临界区

    FreeRTOS临界区是指那些必须完整运行 不能被打断的代码段 比如有的外设的初始化需要严格的时序 初始化过程中不能被打断 FreeRTOS 在进入临界区代码的时候需要关闭中断 当处理完临界区代码以后再打开中断 FreeRTOS 系统本身就
  • FreeRTOS记录(九、一个裸机工程转FreeRTOS的实例)

    记录一下一个实际项目由裸机程序改成FreeRTOS 以前产品的平台还是C8051单片机上面的程序 硬件平台改成了STM32L051 同时使用STM32CubeMX生成的工程 使用FreeRTOS系统 EEPROM数据存储读取函数修改更新 2
  • 【FreeRTOS(三)】任务状态

    文章目录 任务状态 任务挂起 vTaskSuspend 取消任务挂起 vTaskResume 挂起任务调度器 vTaskSuspendAll 取消挂起任务调度器 xTaskResumeAll 代码示例 任务挂起 取消任务挂起 代码示例 挂起
  • freeRTOS使用uxTaskGetStackHighWaterMark函数查看任务堆栈空间的使用情况

    摘要 每个任务都有自己的堆栈 堆栈的总大小在创建任务的时候就确定了 此函数用于检查任务从创建好到现在的历史剩余最小值 这个值越小说明任务堆栈溢出的可能性就越大 FreeRTOS 把这个历史剩余最小值叫做 高水位线 此函数相对来说会多耗费一点
  • Error: L6218E: Undefined symbol vApplicationGetIdleTaskMemory (referred from tasks.o).

    我用的是F103ZET6的板子 移植成功后 编译出现两个错误是关于stm32f10x it c 里 void SVC Handler void void PendSV Handler void 两个函数的占用问题 随后编译出现以下两个问题
  • 【FreeRTOS】任务通知的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • FreeRTOS,串口中断接收中使用xQueueOverwriteFromISR()函数,程序卡死在configASSERT

    原因 UART的中断优先级设置的太高 高于了configMAX SYSCALL INTERRUPT PRIORITY宏定义的安全中断等级 UART的中断等级小于等于宏定义的优先等级即可
  • FreeRTOS学习(三)开关中断

    声明及感谢 跟随正点原子资料学习 在此作为学习的记录和总结 环境 keil stm32f103 背景知识 Cotex M3的NVIC最多支持240个IRQ 中断请求 1个不可屏蔽 NMI 1个Systick 滴答定时器 Cortex M处理
  • 基于STM32的FreeRTOS学习之中断测试实验(五)

    记录一下 方便以后翻阅 本章内容是接着上一章节进行的实际演练 1 实验目的 FreeRTOS可以屏蔽优先级低于configMAX SYSCALL INTERRUPT PRIORITY的中断 不会屏蔽高于其的中断 本次实验就是验证这个说法 本
  • FreeRTOS学习---“定时器”篇

    总目录 FreeRTOS学习 任务 篇 FreeRTOS学习 消息队列 篇 FreeRTOS学习 信号量 篇 FreeRTOS学习 事件组 篇 FreeRTOS学习 定时器 篇 FreeRTOS提供了一种软件定时器 用来快速实现一些周期性的
  • FreeRTOS轻量级同步--任务通知

    1 简介 在FreeRTOS的配置参数中的configUSE TASK NOTIFICATIONS宏打开 一般RTOS会默认打开 如图1所示 图1 notify宏开关 RTOS在创建任务时 会创建一个32位的通知值ulNotifiedVal
  • 当一个任务写入变量而其他任务读取该变量时,我们是否需要信号量?

    我正在研究 freeRtos 并且我有一个名为 x 的变量 现在 每秒只有一个任务正在写入该变量 而其他任务正在读取该变量值 我需要用互斥锁来保护变量吗 如果变量为 32 位或更小 并且其值是独立的并且不与任何其他变量一起解释 则不需要互斥
  • 小型 ARM 微控制器的 RTOS 内核之间的可量化差异 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有许多不同的 RTOS 可用于微控制器 我专门寻找支持 ARM Cortex M 处理器的 RTOS 另外 我对闭源解决方案不感兴趣 试图从网站
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d

随机推荐

  • MPU6050+HMC5883+BMP180+GPS导航系统设计

    老师有个项目 xff0c 让我搞惯导这一块 虽然最后也没有用上廉价的MPU6050 xff0c 而是用了一两万的Xsens 但是本人还是想写一下MPU6050 xff0c 虽然技术含量不高 xff0c 但是写下来 xff0c 留个纪念吧 首
  • 使用BeanCopier抛出NullPointerException溯源

    问题 使用cglib提供的net sf cglib beans BeanCopier进行对象拷贝时 xff0c 抛出如下异常 xff1a Exception in thread span class token string 34 main
  • 自制Alfred/Wox插件推荐

    最近上手Alfred的使用 xff0c 日常工作中存在很多需要高频执行的连续性动作 xff0c 将这一系列动作封装成Workflow xff0c 通过命令触发 xff0c 对提升效率确有很大帮助 自己封装了一些简单的Workflow xff
  • Python删除某一目录下的空文件(夹)

    Python删除某一目录下的空文件 夹 用途 输入文件夹路径 xff0c 将此文件夹下所有的空文件夹和空文件删除 xff0c 算是文件操作的一个习作吧 我拿它做什么就不广而告之了 代码 span class hljs comment cod
  • Win10下pip的安装

    pip简介 pip 是一个安装和管理 Python 包的工具 xff0c 通过pip我们能够轻松地下载和卸载python的第三方包 原料 64位Windows10 专业版python 2 7 12 下载安装包 进入python官方网站 xf
  • Python爬虫爬取动态页面思路+实例(一)

    简介 有时候 xff0c 我们天真无邪的使用urllib库或Scrapy下载HTML网页时会发现 xff0c 我们要提取的网页元素并不在我们下载到的HTML之中 xff0c 尽管它们在浏览器里看起来唾手可得 这说明我们想要的元素是在我们的某
  • zerorpc-python官方入门

    原文地址 xff1a http www zerorpc io 一个易于使用的 xff0c 直观的 xff0c 跨语言的RPC zerorpc是一个在服务端进程上提供分布式通信的轻量级的 可靠的跨语言的库 它基于ZeroMQ和MessageP
  • Python保存json文件并格式化

    背景 最近自己搞些小东西 xff0c 需要用json文件存储些文件属性什么的 xff0c 但是发现用json包里的json dump 方法存json文件的效果好丑 xff08 其实是没仔细看方法 xff09 于是上网找了一份格式化json文
  • No module named 'django.templates'起因和解决

    当我跟着django官网上的教程写到template模板这一部分的时候 xff0c 出现了上述问题 span class hljs constant No span span class hljs class span class hljs
  • Celery ValueError: not enough values to unpack (expected 3, got 0)的解决方案

    背景 最近因项目需要 xff0c 学习任务队列Celery的用法 xff0c 跟着官网写Demo xff0c 出现如题错误 xff0c 最终在github的Issues里找到解决办法 xff0c 记录如下 场景还原 本地环境如下 xff1a
  • 震惊!Selenium分手PhantomJS

    背景 今天本地调试基于Selenium 43 PhantomJS的动态爬虫程序顺利结束后 xff0c 着手部署到服务器上 xff0c 刚买的热乎的京东云 xff0c 噼里啪啦一顿安装环境 xff0c 最后跑的时候报了这么个错误 xff1a
  • 基于labview的姿态测量系统上位机界面编写

    当时学习VB是为了写个上位机去控制LED亮灭 xff0c 相信大家学习51 stm32都是从流水灯开始的 xff0c 就像那句 hello world 一样经典 后来学习了LABVIEW xff0c 决定用它写个界面 当时主要是想用LABV
  • STM32解析SBUS信号例程详解

    文章目录 1 SBUS信号简介2 STM32F7解析SBUS信号例程 xff08 1 xff09 串口配置 xff08 2 xff09 串口中断接收 xff08 3 xff09 信号解析 1 SBUS信号简介 最近在搞一个项目的通信和控制
  • STM32实现四驱小车(二)通信任务——遥控器SBUS通信

    目录 一 遥控器通信原理简介二 SBUS信号解析1 SBUS信号简介2 STM32F7解析SBUS信号 三 通信任务实现 一 遥控器通信原理简介 要实现一个遥控小车当然要有一个遥控器了 xff0c 目前市面上常用的航模遥控器基本都是2 4G
  • STM32实现四驱小车(四)姿态控制任务——偏航角串级PID控制算法

    目录 一 绪论二 角度环串级PID原理1 PID基本算法2 姿态角串级PID原理 三 如何用STM32实现角度 角速度的串级PID控制1 PID算法的代码实现2 串级PID算法的代码实现 四 UCOS III姿态控制任务的实现 一 绪论 这
  • resource not found: ROS path [0]=/opt/ros/kinetic/share/ros ROS path [1]=/opt/ros/kinetic/sh

    问题 xff1a 1 resource not found ROS path 0 61 opt ros kinetic share ros ROS path 1 61 opt ros kinetic sh 2 Running xacro f
  • C++问题及解决记录

    目录 1 xff0c 无法include问题 2 xff0c c 43 43 多线程如何调试 3 opencv两个mat 相减 xff0c 从数学计算上不应为0 xff0c 但是结果为0 4 代码正确但是还是报错的问题 1 xff0c 无法
  • freertos任务管理

    TODO xff08 未完待续 xff09 核心调度器的调度实现部分介绍完成时间片的处理介绍完成任务切换处理介绍完成空闲任务未完成定时器任务未介绍完成通信方式实现未介绍完成 freertos概述 freertos属于小系统实时操作系统 xf
  • docker build

    docker build命令会根据Dockerfile文件及上下文构建新Docker镜像 构建上下文是指Dockerfile所在的本地路径或一个URL xff08 Git仓库地址 xff09 构建上下文环境会被递归处理 xff0c 所以 x
  • FreeRTOS任务间通信方式——队列

    一 三种任务调度方式 优先级抢占式调度 每个任务都赋予了一个优先级每个任务都可以存在于一个或多个状态在任何时候都只有一个任务可以处于运行状态调度器总是在所有处于就绪态的任务中选择具有最高优先级的任务来执行 选择任务优先级 这种任务调度方式是