目录
1 中断管理
在RTOS中,需要应对各类事件。这些事件很多时候是通过硬件中断产生,怎么处理中断呢? 假设当前系统正在运行Task1时,用户按下了按键,触发了按键中断。这个中断的处理流程如下:
- CPU跳到固定地址去执行代码,这个固定地址通常被称为中断向量,这个跳转时硬件实现的
- 执行代码做什么?
- 保存现场:Task1被打断,需要先保存Task1的运行环境,比如各类寄存器的值
- 分辨中断、调用处理函数(这个函数就被称为ISR,interrupt service routine)
- 恢复现场:继续运行Task1,或者运行其他优先级更高的任务
如果这个硬件中断的处理,就是非常耗费时间呢?对于这类中断的处理就要分为2部分:
- ISR:尽快做些清理、记录工作,然后触发某个任务
- 任务:更复杂的事情放在任务中处理 ,所以:需要ISR和任务之间进行通信
前面讲解过的队列、信号量、互斥量、事件组、任务通知等等方法,都可用于中断与任务间的通讯,下面的例程使用信号量实现了中断和任务间的通讯。
2 示例程序
2.1 例程功能
开启串口DMA中断,串口接收到数据后,触发中断,在中断回调函数中释放二值信号量,打印任务获得二值信号量并通过串口打印字符串“接收到数据了”。
2.2 步骤
打开串口中断并开启DMA通道接收数据
<
文章介绍了在实时操作系统(RTOS)中如何管理和处理中断,特别是当中断处理需要耗时的情况下,如何通过中断服务例程(ISR)和任务之间的通信来优化。文中提供了一个使用FreeRTOS和二值信号量实现的中断与任务通信的示例,该示例在串口接收到数据后触发中断,通过释放信号量来通知任务进行后续处理。
最低0.47元/天 解锁文章
288

被折叠的 条评论
为什么被折叠?



