uC/OS-III之中断管理总结

1.uC/OS-III对从中断发布消息或信号的处理有两种模式:直接发布和延迟发布。
在文件os_cfg.h中,将OS_CFG_ISR_POST_DEFERRED_EN设置成0,使用直接发布模式;设置成1,则使用延迟发布模式。

2.直接发布模式使用关闭中断的方式来保护临界段代码。

3.延时发布模式通过给调度器上锁的方式来保护临界段代码。

4.延时发布模式与直接发布模式相比,主要是减少了关闭中断的时间,因而减少了中断延迟、中断响应和中断恢复的时间,但是因为使用的是给任务调度器上锁的方式保护临界段代码,反而使得任务延迟时间变长了。

5.基于uC/OS-III的系统通常需要底层平台提供一个周期性的定时信号,成为时钟节拍,或系统节拍。
uC/OS-III的时钟节拍的作用是通过时钟节拍对任务进行整数个节拍的延迟,并为等待事件的任务提供超时判断。
时钟节拍中断必须调用OSTimeTick()函数,该函数的代码位于文件os_time.c中,521行 - 565行

void  OSTimeTick (void)
{
    OS_ERR  err;
#if OS_CFG_ISR_POST_DEFERRED_EN > 0u              // 延迟发布模式
    CPU_TS  ts;
#endif

    OSTimeTickHook();                             // 介入函数--该函数允许uC/OS-III移植者在时钟节拍中断到来后进行额外的操作

#if OS_CFG_ISR_POST_DEFERRED_EN > 0u              // 延时发布模式
    ts = OS_TS_GET();                             // 获取时间戳
    OS_IntQPost((OS_OBJ_TYPE) OS_OBJ_TYPE_TICK,   // 将发布函数调用请求和相关参数写入到中断队列中
                (void      *)&OSRdyList[OSPrioCur],
                (void      *) 0,
                (OS_MSG_SIZE) 0u,
                (OS_FLAGS   ) 0u,
                (OS_OPT     ) 0u,
                (CPU_TS     ) ts,
                (OS_ERR    *)&err);

#else                                             // 直接发布模式
   (void)OSTaskSemPost((OS_TCB *)&OSTickTaskTCB,  // 向时钟节拍任务发送信号量
                       (OS_OPT  ) OS_OPT_POST_NONE,
                       (OS_ERR *)&err);

#if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u              // 允许时间片轮转调度
    OS_SchedRoundRobin(&OSRdyList[OSPrioCur]);
#endif

#if OS_CFG_TMR_EN > 0u                            // 允许定时器任务
    OSTmrUpdateCtr--;
    if (OSTmrUpdateCtr == (OS_CTR)0u) {
        OSTmrUpdateCtr = OSTmrUpdateCnt;
        OSTaskSemPost((OS_TCB *)&OSTmrTaskTCB,    // 向定时器任务发送信号
                      (OS_OPT  ) OS_OPT_POST_NONE,
                      (OS_ERR *)&err);
    }
#endif

#endif
}

注:uC/OS-III一定需要时钟节拍,这是一个错误的概念,实际上,一些低功耗应用是不需要时钟节拍的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值