美文网首页
UCOSIII_中断和时间管理

UCOSIII_中断和时间管理

作者: 飞向深空 | 来源:发表于2020-03-09 15:43 被阅读0次

    UCOSIII支持中断嵌套,高优先级中断可以打断低优先级中断,在UCOSIII中使用OSIntNestingCtr来记录中断嵌套次数,最大支持250级嵌套,没进一个中盾嵌套OSIntNestingCtr就加1,反之则减1

    进入中断函数:OSIntEnter(),仅进行OSIntNestingCtr加1操作
    退出中断函数:OSIntExit()

    void XXX_Handler(void)
    {
      OSIntEnter(); //标记进入中断服务程序,记录中断嵌套次数
          //中间中断服务程序自己写
      OSIntExit(); //触发中断任务切换
    }
    

    临界段代码也叫临界区,这部分代码不能被系统打断。
    进入临界区:OS_CRITICAL_ENTER()
    退出临界区:OS_CRITICAL_EXIT()是退出还进行任务调度,OS_CRITICAL_EXIT_NO_SCHED()退出不进行任务调度


    UCOSIII对中断发布消息或者信号的处理有两种模式:直接发布和延迟发布。宏OS_CFG_ISR_POST_DEFERRED_EN来选择,置0使用直接发布,置1使用延迟发布。
    直接发布模式下,UCOSIII通过关中断保护临界区代码,延迟模式下通过锁定任务调度
    延迟模式的速度高于直接模式,两者仅是模式不同,代码无需更改。


    • 延时函数:OSTimeDly(OS_TICK dly, OS_OPT opt, OS_ERR *p_err)
      dly:延迟时间节拍数
      opt:OS_OPT_TIME_DLY 相对模式
      OS_OPT_TIME_TIMEOUT 和opt:OS_OPT_TIME_DLY 一样
      OS_OPT_TIME_MATCH 绝对模式
      OS_OPT_TIME_PERIODIC 周期模式
      相对模式在系统负担重时可能会延迟多个节拍,周期模式下任务可能会被推迟执行。推荐使用周期模式
      绝对模式可以指定上电后指定的时间执行具体动作,比如,上电N秒关闭某个外设

    • 延时函数:OSTimeDlyHMSM(CPU_INT16U hours, //延时小时数
      CPU_INT16U minutes, //延时分钟数
      CPU_INT16U seconds, //延时的秒数
      CPU_INT32U milli, //需要延时的毫秒数
      OS_OPT opt, //选项
      OS_ERR *p_err)
      hours,minutes,seconds,milli:当OS_CFG_TICK_RATE_HZ为200,最小延时为5ms
      opt:比OSTimeDly()多了两个,OS_OPT_TIME_HMSM_STRICT和OS_OPT_TIME_HMSM_NON_STRICT.
      OS_OPT_TIME_HMSM_STRICT模式下,hours(0-99),minutes(0-59),seconds(0-59),milli(0-999)
      OS_OPT_TIME_HMSM_NON_STRICT模式下,hours(0-999),minutes(0-9999),seconds(0-65535),milli(0-4294967259)

    • 退出延时函数:OSTimeDlyResume(OS_TCB *p_tcb, OS_ERR *p_err)
      用来使错误延时的任务恢复运行

    OSTimeGet(),获取当前时钟节拍技术器的值
    OSTimeSet(),设置当前时钟节拍计数器的值,最好别使用

    相关文章

      网友评论

          本文标题:UCOSIII_中断和时间管理

          本文链接:https://www.haomeiwen.com/subject/anijdhtx.html