FreeRTOS基础六:中断管理2

本文介绍了在FreeRTOS中如何在中断中使用队列,强调了高效数据传输方案,如使用DMA或内存缓冲区。接着详细阐述了中断嵌套的概念,包括数值优先级、逻辑优先级,并详细讨论了configMAX_SYSCALL_INTERRUPT_PRIORITY等相关配置宏的含义和用法。最后,探讨了CM3/CM4内核中断的中断优先级寄存器、中断分组以及BASEPRI寄存器在中断管理中的作用。
摘要由CSDN通过智能技术生成

在中断中使用队列

FreeRTOS的队列可以方便的实现中断传递数据到任务。但是如果数据到来的频率的非常高,导致中断触发频繁,则这种方式是非常不高效的。正如一些Demo所实现的,在UART中断中接收串口数据,然后放到队列中,然后任务从队列中读数据。使用这种方法只是起到了演示作用,并不具有实战价值。

更高效的方案例如:

  • 使用DMA来实现外设(如UART)和内存缓冲的数据传输,这样数据传输时就没有软件导致的CPU负担,当一块数据传输完成时,使用任务通知来通知任务,使得任务唤醒然后开始处理数据。
  • 如果DMA不可用,则可以使用内存缓冲区来缓存中断单次收到的数据,当一块数据传输完成时,使用任务通知来通知任务,使得任务唤醒然后开始处理数据。
  • 对于只需简单处理的数据,则可以直接在中断中处理,然后将处理的结果通过队列或者任务通知技术发送给任务。

队列相关的API

为了方便演示,首先介绍一下队列相关的内核函数的使用方法。

//作用:在中断函数中向队列的头部放入一个数据,即插入数据到队头
BaseType_t xQueueSendToFrontFromISR( 
    QueueHandle_t xQueue,
    void *pvItemToQueue
    Bas
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值