ucosIII任务管理(三)

系统内部任务

系统有5个内部任务,空闲任务、时钟节拍任务、统计任务、定时任务、中断服务管理任务,前两个任务是初始化系统时必须创建的,后三个根据需求创建。

  • 空闲线程:优先级是最低的,只有当系统内没有就绪线程时,才运行空闲线程。空闲线程也是一个无限循环的,当系统无就绪线程时就会一直执行空闲线程,直到有就绪线程,才执行就绪线程。空闲线程并不是什么也不做,空闲线程有两个计数器不断递增,OSIdleTaskCtr和OSSartTaskCtr,都是用来计算CPU的利用率,后者与统计任务有关。
  • 时钟节拍线程:优先级比用户最重要线程优先级略高一点点,该线程用来跟踪延时线程和线程等待超时。OS_TickTask()是一个周期任务,等待时钟节拍中断服务函数发送信号
    在这里插入图片描述

为了产生时钟节拍,要配置硬件定时器使其产生10-1000HZ的频率之间的中断;实际上节拍中断并非由定时器产生,而是由其他周期性时钟源产生。
当允许中断后,当时钟节拍中断到来之后,就会执行该中断函数,该中断函数调用了OS_TimeTick(),完成了UCOSIII中大部分时钟节拍处理工作
OS_TimeTick()函数会调用UCOSIII提供的服务函数给时钟节拍线程发送信号,使时钟节拍线程进入就绪态
时钟节拍线程会让那些延时一结束等待已超时的任务进入就绪态
时钟节拍列表:
在这里插入图片描述
该表由一个数据列表组成和一个计数器构成。OSCfg_TickWheel[]数据包含表项数目,表项数目,不要与时钟节拍频率成倍数关系,最好使用素数,这样是为了让每个表项等待任务数目分布任务。当时钟节拍任务接收到时钟节拍中断函数发送过来的信号量时,OSTickCtr会加1
每个表项包括三个成员:该表项等待的最大任务数、该表项的任务数目、一个指针变量
当某线程调用OSTimeDly??()或者使用非零超时值调用OS???Pend()函数时,线程会被自动加入时钟节拍列表中

  • 统计任务:计算CPU的利用率,如果要使用统计任务,那必须在main函数创建第一个也是唯一一个任务中调用OSStatTaskCPUUsageInit()函数。
  • 定时任务:一个向下计数器,计数值为0时就会执行一个操作。该操作由用户通过回调函数设定。定时任务和时钟节拍任务共用一个中断服务函数,进入中断函数后,会给定时器任务发送一个信号量
  • 中断服务管理任务:优先级永远为0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值