码迷,mamicode.com
首页 > 其他好文 > 详细

CMSIS-RTOS 中断处理Interrupt Handling

时间:2018-08-28 14:15:37      阅读:589      评论:0      收藏:0      [点我收藏+]

标签:信号   分享   cpp   最好   c中   ...   ever   and   sof   

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

标签:信号   分享   cpp   最好   c中   ...   ever   and   sof   

原文地址:https://www.cnblogs.com/zzdbullet/p/9547503.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!