[RT-thread]快速了解 RT-Thread 动态中断注册和中断抢占

引言

HPMicro 在 RT-Thread BSP v1.11.0 中完成了中断管理机制的架构升级。在保留原有静态声明模式的基础上,新增了兼容 RT-Thread 标准框架的动态注册模式。本次升级旨在通过灵活的配置策略,适配不同应用场景的系统需求。
本文将说明如何配置动态中断注册与中断抢占模式,分析抢占模式的应用场景,并对比两种注册模式的优缺点。

配置说明

中断动态注册

系统默认采用静态声明模式。如需开启动态注册模式,可以通过 Kconfig 工具进行如下配置:
开启动态注册模式:
menuconfig -> Hardware Drivers Config -> HPMicro RTT Interrupt Framework -> Enable this to use rtt interrupt register framework

在开启中断动态注册机制后,系统会在驱动初始化前,完成相关中断处理函数(以 CAN 中断为例)的注册:

注意:开启动态注册后,系统默认仍为非抢占模式,用户可根据需求另行开启抢占功能,具体操作参照下节。

抢占模式

RT-Thread 中断处理默认为非抢占模式,HPMicro 在 RT-Thread BSP v1.5.0 中,创新性的加入了中断抢占的支持;通过配置宏 HPM_USING_VECTOR_PREEMPTED_MODE,用户可以开启中断抢占。
开启抢占模式(Vector Mode/抢占模式):
HPMicro Interrupt Config -> Enable Vector and Preempted Mode (experimental)

中断抢占模式对高实时性系统至关重要,接下来将简要分析该模式的应用场景。

抢占模式的应用场景

在非抢占模式下,所有中断必须按触发顺序排队处理。若高优先级中断(如 ENET 接收)产生时,系统正处于低优先级中断(如 GPTMR 周期中断)的处理过程中,高优先级中断必须等待后者完成后才能响应,这会造成难以接受的延迟。
开启抢占模式后,高优先级中断可打断低优先级中断的执行,从而满足高实时性场景的需求。无论是静态声明还是动态注册模式,均支持开启中断抢占。
静态声明和动态注册在非抢占模式下,处理流程类似;开启抢占后,存在明显差异,接下来会简要介绍两者在抢占模式下的处理差异。

静态声明和动态注册对比

在非抢占模式下,静态声明与动态注册均通过统一入口进行中断分发,因此处理流程基本一致。然而在开启抢占后,静态声明模式下的每个中断函数都会包含独立的上下文保存代码,导致明显的代码冗余。相比之下,动态注册仍能维持统一入口分发机制,从而有效解决了代码冗余问题。
具体差异如下表所示:

静态声明 动态注册
实现机制 利用 RTT_DECLARE_EXT_ISR_M 宏将处理程序直接映射至硬件中断向量表 适配 RT-Thread 标准接口,支持通过 rt_hw_interrupt_install 运行时挂载
核心优点 响应速度快,中断响应延迟较低 固件大小精简:统一入口分发机制,有效避免重复代码导致的冗余
核心缺点 代码较冗余:每个 ISR 均包含独立的上下文保存逻辑,增加固件大小 中断响应多一级软件分发调用,速度略慢于静态模式
适用场景 对实时性要求较高的场景 对固件大小敏感、需兼容标准驱动框架的场景

总结

本次升级引入了兼容 RT-Thread 标准框架的动态中断注册模式。本文说明了动态注册与中断抢占模式的配置方法,分析了抢占模式的应用场景,并对比了静态声明与动态注册的差异。用户可参考本文,结合具体应用场景选择最适宜的中断注册方案。

0
0

订阅

发表回复 0

Your email address will not be published. Required fields are marked *

captcha
Enter the characters shown in the image:
Reload

This CAPTCHA helps ensure that you are human. Please enter the requested characters.