1. 中断管理简介1.1 什么是中断?简介:让 CPU 打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断中断执行机制,可简单概括为三步:中断请求。外设产生中断请求(GPIO 外部中断、定时器中断等)响应中断。CPU停止执行当前程序,转而去执行中断处理程序(ISR)退出中断。执行完毕,返回被打断的程序处,继续往下执行说到中断,那必不可少就提到我们的中断优先级,因为中断它说到底其实就是一个
FreeRTOS 队列FreeRTOS 队列使用模型:最简单、最灵活队列阻塞 文章由 FreeRTOS 系列博客整理而来,仅为学习记录,如有不妥,请告知。FreeRTOS 队列队列是主要的任务间通讯方式。可以在任务与任务间、中断和任务间传送信息。大多数情况下,队列用于具有线程保护的 FIFO(先进先出)缓冲区:新数据放在队列的后面。当然,数据也可以放在队列的前面,在下一篇讲队列 API 函数
文章目录消息队列消息队列结构读队列步骤写队列步骤作用信号量信号量结构获取信号量释放信号量互斥量(锁)互斥量结构获取互斥量释放互斥量递归互斥量(递归锁)获取递归互斥量释放递归互斥量 消息队列消息队列结构由消息队列控制块+消息存储buffer组成,是全局变量,结构如下 消息队列控制块中的链表List_t xTasksWaitingToSend; //记录发送阻塞的TCB List_t xTasks
===================   FreeRTOS 中实现临界区的两种途径  ==========================具体使用时,如果有可能被中断打断,则关闭中断,如果有可能被高优先级的任务打断,则可以关闭任务调度。 1. 关闭中断: 最简单的保护临界段的方法,就是关闭中断,以及关闭任务调度。也就是暂时禁止中断和其他任务执行,等到临界段执行完毕后再恢复。
一、队列简介队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息队列中可以存储有限的、大小固定的数据项目。 任务与任务、任务与中断之间要交流的数据保存在队列中,叫做队列项目。队列所能保存的最大数据项目数量叫做队列的长度,创建队列的时候会指定数据项目的大小和队列的长度。由于队列用来传递消息的,所以也称为消息队列FreeRTOS中的信号量的也是依据队列实现的
FreeRTOS中,中断的优先级和任务的优先级是有区别的。任务的优先级是由用户设置内核管理器管理的软件特性(software feature),与操作系统所在的硬件平台无关中断的优先级是由硬件平台相关的硬件特性(hardware feature),在中断代码运行的时候任务的代码将无法运行。即使是拥有最小优先级的中断也会打断拥有最高优先级的任务。通常需要在中断服务函数(ISR)中调用FreeRTO
一、收发主要逻辑1、接收:利用DMA和空闲中断一次接收一帧的不定长数据,接收到数据后“暂停”(之后分析为何要暂停而不是停止)DMA,快速利用结构体存储接收到数据的地址和长度,再利用队列能够传递结构体的特点,将所收数据的地址和长度入队,然后打开DMA接收。数据处理任务检测队列状态,只要队列中有有效数据就开始数据处理。 2.发送:先将要发送的数据存入循环数组(伪)中,再利用队列将数据的地址和长度入队,
FreeRTOS消息队列 传递结构体指针和结构体异同1 消息队列传递结构体指针和结构体异同2 使用队列传递复合数据类型3 利用队列传递数据的指针(处理速度更快)3.1 指针指向的内存空间所有权必须明确3.2 指针指向的内存空间必须有效传递结构体的指针传递结构体本身4 传递结构体指针和结构体本身的异同5 验证5.1 结构体传值模式5.2 传递结构体指针模式5.3 memcpy 函数5.4 mems
功能及区别列表消息队列(需要传递消息使用) 在任务与任务间、 中断和任务间传递信息,可以数据传输事件标志组(多个事件同步,不需要传递消息使用) 实现任务与任务间、 中断和任务间的同步,无数据传输。可实现一对多、多对多的同步, 可选择是 “ 逻辑或 ” 触发还 是 “ 逻辑与 ”触发。即
目录前言一.消息队列的特点1.队列的基本概念2.队列结构体二.队列API函数源码分析1.队列创建函数 xQueueCreate()2.向队列发送消息(出队)(1).队列入队(任务级)(2).队列锁(3).队列入队(中断级)(4).任务与中断中入队的区别3.从队列读取消息(出队)(1).队列出队 (任务级)(2).队列出队(中断级)三.总结 前言本文将详细全方位的讲解FreeRTOS队列消息,其
目录前言10.1 消息队列概念10.2 消息队列的数据传输机制10.3 消息队列的阻塞访问机制10.4 消息队列使用场景10.5 消息队列控制块10.5.1 队列控制块源码10.5.2 队列控制块成员剖析10.5.3 cRxLock 和 cTxLock10.5.4 队列控制块数据结构图10.6 创建消息队列10.6.1 创建消息队列API说明10.6.2 创建消息队列简要步骤10.6.3 创建消息
首先介绍三个函数:1.消息队列创建函数函 数 原 型: QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize ); 功 能:用于创建一个新的队列。 参 数: uxQueueLength: 队列能够存储的最大消息单元数目,即队列长度。 uxItemSize: 队列消息单元的大小,以
文章目录一、消息队列二、信号量三、互斥量四、事件五、通知 一、消息队列消息队列是一种常用于任务间通信的数据结构, 队列可以在任务与任务间、中断和任务间传递信息。读写队列均支持超时机制。1、创建队列QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength,//队列长度 UBaseType_t uxItemSize );//队列消息
一、基础概念作用:队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息队列中可以存储有限的、大小固定的数据项目。二、运行机制在脑海中想像不同任务之间,其需要交互数据的时候,需要的一种通信机制,这种机制在该操作系统就是“消息队列”其特点是任何建立的任务都可以向队列中发送消息和取信息。1、首先就是创建队列创建消息队列 FreeRTOS 会先给消息队列分配一块
FreeRTOS操作系统学习 文章目录FreeRTOS操作系统学习前言一、队列功能介绍1.数据存储2.多任务访问3.出队阻塞4.入队阻塞二、队列工作过程1.API函数1.队列创建函数2.入队函数2.队列操作实验总结 前言队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息队列中可以存储有限的、大小固定的数据项目。任务与任务、任务与中断之间要交流的数据保存在
转载 2024-04-14 16:23:43
1212阅读
 由于看到的FREERTOS的例程中关于消息队列的代码,大多数都是传递的一个字节的数值;而在实际应用中,需要传递的数据类型可以是浮点数,也可以是数组,也可以是uint16数据,所以上述链接的传递结构体指针的思路很符合我的需求。同时,使用RTOS+消息队列的处理方式,至少有以下两个优点:1、便于开发,因为各个模块之间是通过消息队列进行数据交互,没有直接耦合,无需像裸机编程一样进行全局变量的
FreeRTOS消息队列声明:本人按照正点原子的FreeRTOS例程进行学习的,欢迎各位大佬指责和批评,谢谢!消息队列的定义消息队列其实是两个任务之间的数据传递的过程,在没有操作系统之前,使用的是全局变量;使用FreeRTOS操作系统,就要使用队列”的机制来完成任务与任务之间、任务与中断之间的数据传递。下面是实验举例:Task1任务获取到键值,使用消息队列发送函数;KeyProcess任务中
在任何RTOS中,都具有一个重要的通信机制----消息队列队列是任务间通信的主要形式。它们可用于在任务之间、中断和任务之间发送消息。在大多数情况下,它们被用作线程安全的FIFO(先进先出)缓冲区,新数据被发送到队列的后面,不过数据也可以发送到前面。 消息队列的概念及其作用(以下基础内容转载自安富莱电子)消息队列就是通过RTOS内核提供的服务,任务或中断服务子程序可以将一个消息(注意,F
FreeRTOS消息队列消息队列简介消息队列数据存储消息队列阻塞机制出队阻塞入队阻塞消息队列控制块消息队列操作示图常用消息队列 API 函数xQueueCreate 创建一个新队列vQueueDelete 删除队列xQueueSend 向队列中发送一个消息(从队列尾插入)(任务中使用)xQueueSendFromISR向队列中发送一个消息(从队列尾插入)(中断使用)xQueueSendToFr
消息队列是进程间的一种通信机制,实际项目运用很多。1、什么是消息队列?2、消息队列API函数3、在进程间通信使用消息队列4、在中断使用消息队列1.1、消息队列是什么?      消息队列是realtime os 内核提供的服务,任务之间或者是中断中可以将一个消息放到队列中进行传递,freertos可以通过内核API获取到队列中的数据,freertos传递了实际数据。
  • 1
  • 2
  • 3
  • 4
  • 5