FreeRTOS(二)——队列和中断管理

队列概述

FreeRTOS中所有的通信与同步机制都是基于队列实现的。

队列的特性

  • 数据存储
    FIFO(先进先出)
  • 可被多任务存取
  • 读队列时阻塞
    任务试图读取队列,等待队列中数据有效。当队列被多个任务读取时,只有一个任务被解除阻塞,这个任务就是等待任务中优先级最高的任务,如果优先级相同,则被解除阻塞的是等待时间最久的任务。
  • 写队列时阻塞
    性质同读

当读的优先级高于写优先级,通常队列里只会有一个元素;
当写的优先级高于读优先级,通常队列里都会是满的。

延迟中断处理

  • 采用二值信号量同步
    二值信号量可以再某个特殊的中断发生时,让任务解除阻塞,相当于让任务与中断同步,这样可以让中断事件处理量大的工作在同步任务中完成。中断服务例程(ISR)中只是快速处理少部分工作。如此,中断处理可以说是被“推迟“到一个处理任务中。

clipboard.png

设一个只有一个数据的队列(深度为1),中断里写队列,任务函数里读队列,中断没有发生的时候,任务函数一直是阻塞的,中断发生,任务函数开始处理具体细节内容。

  • 计数信号量
    由于二值信号量只能存储一个中断事件,如果中断过多,会导致中断事件丢失,所以需要用技术信号量代替二值信号量。

计数信号量即深度大于1的队列。

  • 队列
    队列同信号量的区别是,队列可以带数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值