OS_Init

OSInit(&err)中开启的系统任务

将开启两个必要任务和两个可选任务:

OS_IntQTaskInit(&p_err)[OS_CFG_ISR_POST_DEFERRED_EN]

OS_IdleTaskInit(&p_err)

OS_TickTaskInit(&p_err)

OS_StatTaskInit(&p_err)[OS_CFG_STAT_TASK_EN]

OS_IntQTask的小动作

    中断队列任务的作用,发送消息队列;……

任务的由来

  • 任务由OSInit(*p_err) –调用->OS_IntQTaskInit(*p_err)创建。

初始化

  • 初始化一个OS_CFG_INT_Q_SIZE长度的消息队列。
  • 开始OS_IntQTask()任务。

OS_IntQTask任务

  • 如果消息队列里存在消息,则逐条发送完成。发送过程通过调用OS_XXXX_Post()系列函数实现消息发送。
  • 如果消息队列里没有消息,则做一些清除工作,并执行调度器。

OS_IntQTask任务的思考

OS_IdleTask任务

优先级最低的任务(OS_CFG_PRIO_MAX),并且强制要求同级不能有其他的任务存在。

统计系统进入Idle模式的时间计数

协助OS_StatTask任务进行CPU占用率计算

OS_TickTask任务

所包含的任务列表是用来进行延时的,优先级比Idle任务高,默认与Stat任务处于同一任务优先级,OS_CFG_PRIO_MAX - 1u。

a.等待tick 中断释放信号量

b.更新Tick 列表的时间戳

c.回到a继续挂起信号量

OS_StatTask任务

统计CUP的占用率,CPU Idle模式下的计数工作留给OS_IdleTask中完成。优先级,仅比Idle任务高一级(OS_CFG_PRIO_MAX - 1u),默认与Tick任务在同一优先级。

OS_TrmTask任务

一个基于Tick分频得到的定时器任务,默认计数频率10Hz。

a.等待Tmr信号量释放

b.锁定调度器

c.更新定时器状态,如果是周期(OS_OPT_TMR_PERIODIC)的,先将定时器从列表中删除,然后重新插入;如果是单次(OS_OPT_TMR_ONE_SHOT)的,将定时器从列表中删除,并标记为延时完成(OS_TMR_STATE_COMPLETED)的。

d.执行回掉函数

e.解锁调度器,更新任务最长执行时间。

小结

a.在OS_Init中进行了OS全局变量的清零工作

b.创建了5个任务,其中Idle和Tick任务是必选任务,IntQ和Stat任务是可选任务,另外开启一个常用的定时器任务TmrTask。

c.所有任务中IntQ任务独自占有最高优先级0;Idle任务独自占有最低优先级OS_CFG_PRIO_MAX;Stat和Tick任务分享次低优先级OS_CFG_PRIO_MAX-1u;TmrTask任务的默认优先级是OS_CFG_PRIO_MAX-2u

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值