FreeRTOS笔记(十)队列和通信

上一文链接:FreeRTOS笔记(九)任务相关的过渡


  在第一篇概念的思维导图中,任务的下一个概念就是队列,一个实际的FreeRTOS系统肯定会有多个任务,这些任务经常需要协同运作,因此必然需要通信,不止任务和任务之间,任务和中断之间也需要通信。对于通信,需要了解通信介质、通信方式和通信操作。

01 - 通信介质

  FreeRTOS的通信介质是队列,队列是一个先进先出的数据结构,一个相似的数据结构是栈(先进后出),FreeRTOS的队列包含2个信息,1是队列结构体,用于操作队列的句柄,2是实际储存区,消息真正存放的区域。队列的先进先出特性非常适用于处理”等待“类的事件。

  创建队列一般都会规定一个长度length以及元素的大小size,而length×size就代表队列的总容量,FreeRTOS提供创建队列的API如下

API功能
xQueueCreate()动态创建,内存由编辑器负责分配
xQueueCreateStatic()静态创建,需要程序员提供结构体和实际储存区的地址

02 - 通信方式

  通过对队列规定不同的约束条件,就可以产生不同的通信方式,FreeRTOS的通信方式有普通队列、信号、信号量、互斥量和共享内存,它们的区别如下

通信方式长度约束作用
普通队列>0阻塞读写用于任务之间传递数据
信号1一方只需要P申请,另一方只需要V添加用于锁存1个中断代表资源的到达 / 用于任务的异步通知
信号量>1一方只需要P申请,另一方只需要V添加用于锁存若干个中断以免中断丢失 / 用于同步代表资源的数量
互斥量1P申请的一方必须自己进行V添加用于互斥访问机制
共享内存>0阻塞读写用于大块数据的高效传输

  在普通任务之间的数据传输使用普通队列/共享内存即可,而任务之间的工作需要实现同步和异步的时候,就需要信号、信号量和互斥量的配合,这些通信方式更多地在中断和资源管理中使用。

03 - 通信操作

  FreeRTOS提供一系列操作队列的API,常用如下

API功能
xQueueCreate()动态创建队列
vQueueDelete()删除队列
pcQueueGetName()得到队列名称
xQueueOverwrite()写数据
xQueuePeek()读数据,但不出队
xQueueReceive()读数据,并出队

  另外在中断里面操作队列,需要用特定的中断安全API,这些API一般在原来的API上加上后缀FromISR

04 - 总结

  • FreeRTOS所有的通信方式都基于队列
  • 队列包含队列结构体和实际储存区
  • 通过约束队列,可以实现信号、信号量、互斥量等
  • 在队列的操作中,任务和中断需要调用不同的API
FreeRTOS是一个开源的实时操作系统(RTOS),专门用于嵌入式系统。它提供了一套可移植的API,使开发者能够轻松地编写多任务应用程序。 以下是一些关于FreeRTOS笔记: 1. 任务(Tasks):FreeRTOS使用任务实现并行执行。每个任务都有自己的独立堆栈空间和优先级。任务可以创建、删除和挂起。 2. 调度器(Scheduler):FreeRTOS的调度器负责决定哪个任务应该在给定时间运行。它使用优先级调度算法,并且可以配置为使用抢占式或协作式调度。 3. 信号量(Semaphores):信号量是一种用于同步和通信的对象。它可以用于任务之间的互斥访问共享资源或任务之间的通信。 4. 队列(Queues):队列提供了一种任务之间传递数据的方式。任务可以将数据发送到队列,另一个任务可以从队列中接收数据。 5. 事件标志组(Event Flags):事件标志组用于任务之间的同步和通信。一个任务可以等待一组特定的事件标志发生,另一个任务可以设置或清除这些事件标志。 6. 定时器(Timers):FreeRTOS提供了软件定时器,可以在指定时间间隔内运行回调函数。 7. 内存管理(Memory Management):FreeRTOS提供了内存管理功能,可以动态分配和释放内存。 8. 中断(Interrupts):FreeRTOS可以与硬件中断一起使用,以实现任务的抢占式调度。 这些只是FreeRTOS的一些基本概念和功能,它还有很多其他特性和组件。如果你对某个特定方面有更多的兴趣,请告诉我,我会提供更详细的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值