【FreeRtos教程十】STM32 CubeMx——Interrupt Management(中断管理)

文章介绍了在实时操作系统(RTOS)中如何管理和处理中断,特别是当中断处理需要耗时的情况下,如何通过中断服务例程(ISR)和任务之间的通信来优化。文中提供了一个使用FreeRTOS和二值信号量实现的中断与任务通信的示例,该示例在串口接收到数据后触发中断,通过释放信号量来通知任务进行后续处理。

目录

1 中断管理

2 示例程序

2.1 例程功能

2.2 步骤

2.3 实验结果

2.4 程序源码


1 中断管理

在RTOS中,需要应对各类事件。这些事件很多时候是通过硬件中断产生,怎么处理中断呢? 假设当前系统正在运行Task1时,用户按下了按键,触发了按键中断。这个中断的处理流程如下:

  • CPU跳到固定地址去执行代码,这个固定地址通常被称为中断向量,这个跳转时硬件实现的
  • 执行代码做什么?
    • 保存现场:Task1被打断,需要先保存Task1的运行环境,比如各类寄存器的值
    • 分辨中断、调用处理函数(这个函数就被称为ISR,interrupt service routine)
    • 恢复现场:继续运行Task1,或者运行其他优先级更高的任务

        如果这个硬件中断的处理,就是非常耗费时间呢?对于这类中断的处理就要分为2部分:

  • ISR:尽快做些清理、记录工作,然后触发某个任务
  • 任务:更复杂的事情放在任务中处理 ,所以:需要ISR和任务之间进行通信

前面讲解过的队列、信号量、互斥量、事件组、任务通知等等方法,都可用于中断与任务间的通讯,下面的例程使用信号量实现了中断和任务间的通讯。

2 示例程序

2.1 例程功能

开启串口DMA中断,串口接收到数据后,触发中断,在中断回调函数中释放二值信号量,打印任务获得二值信号量并通过串口打印字符串“接收到数据了”。

2.2 步骤

 打开串口中断并开启DMA通道接收数据

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值