UCOSIII_中断和时间管理

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(),设置当前时钟节拍计数器的值,最好别使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值