CMSIS-RTOS 中断处理Interrupt Handling

Posted zzdbullet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMSIS-RTOS 中断处理Interrupt Handling相关的知识,希望对你有一定的参考价值。

RTOS中断处理Interrupt Handling

在RTOS中使用信号来触发线程间的行为是比较简单和高效的,而对于Cortex-M微控制器来讲,从中断源获取信号来触发线程同样是一种重要的方式。虽然在中断服务程序ISR中运行一段代码也可以,但在RTOS系统中,在中断运行的时间越短越好,因为太长的时间会延长定时器的节拍,并破坏RTOS内核。系统节拍运行的优先级在NVIC中是最低的,因此任何中断服务程序都会打断它。

技术分享图片

在RTOS中最好把中断服务代码设计成一个线程,并分配给它一个比较高的优先级。中断服务线程里的第一行代码应该是等待一个信号标志,当中断到来时,中断处理程序Handler唯一的任务就是设置信号标志,然后就结束运行。中断服务线程为中断事件提供服务,并在服务完成后重新进入循环等待信号标志的再次到来。

技术分享图片

在RTOS里,中断服务代码作为线程运行,当中断到来时,中断处理程序Handler给中断服务线程发信号。然后交给内核根据线程的优先级进行调度。

void Thread3(void)
{
    while(1)
    {
        osSignalWait(isrSignal, waitForever);//等待ISR触发一个事件
        ...//处理中断
    }     
}

 

实际的中断程序只包含一点点代码:

void IRQ_Handler(void)
{
    osSignalSet(thread3, isrSignal);//给线程3发信号
}

以上是关于CMSIS-RTOS 中断处理Interrupt Handling的主要内容,如果未能解决你的问题,请参考以下文章

异常和中断处理流程: Exception- or Interrupt-Handler Procedures

多线程之interrupt

interrupt interrupted isInterrupted 区别

interrupt ,interrupted 和 isInterrupted

多线程-interrupt(),isInterrupted(),interrupted()(转)

C语言中的interrupt是怎么回事