现在的位置: 首页 > 综合 > 正文

ucos ii下的硬中断服务 是否应该通知系统

2019年03月22日 ⁄ 综合 ⁄ 共 753字 ⁄ 字号 评论关闭

请看原文  http://fanwenjie.ok.blog.163.com/blog/static/1246632052011230817542/

文章把任务级任务调度、中断级任务调度说得很明白:一个是延时调度、一个是中断到来调度。

但是文章的结论有问题,就”ucos进入中断时真的需要通知系统吗?“方面。

通知系统:

void  BSP_USART_422_IRQHandler (void)
{
#if (OS_CRITICAL_METHOD == 3)
    OS_CPU_SR       cpu_sr;
#endif
    
    
    OS_ENTER_CRITICAL();        /// Tell uC/OS-II that we are starting an ISR
    OSIntNesting++;
    OS_EXIT_CRITICAL();
    
    ......
    
    OSIntExit();                /// Tell uC/OS-II that we are leaving the ISR
}

那么什么时候中断处理需要通知系统呢?

http://bbs.21ic.com/forum.php?mod=viewthread&tid=558744&pid=4894874&page=1&extra=#pid4894874

OSIntExit()会引发一次任务调度,但是中断里面如果没有PostEvent函数,也就是说中断退出不需要进行任务调度,可以省略掉这个操作。

举例来说吧,有一个task里面有pendevent函数,如pendsem,中断postsem,这时候osintexit进行任务调度,中断退出后这个task会立刻执行。但是你的中断没有任何postevent,搞osintexit任务调度是毫无意义的。

中断退出进行任务调度正是抢占式RTOS的精华所在,如果只在Systick里面进行任务调度那不就成了时间片OS?实时性没有了。

抱歉!评论已关闭.