完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
在初始化时,必须至少创建2个系统任务(OS_IdleTask()和OS_TickTask(),其他三个系统任务OS_StatTask(),OS_TmrTaks(), OS_IntQTask() 则根据需要选择创建。
这些可选择的任务在编译时由OS_CFG.H中的配置决定 。如下图所示。 ①空闲闲任务 OS_IdleTask() OS_IdleTask()是uC/OS-III最先创建的任务。它的优先级通常是OS_CFG _PRIO_MAX-1为了安全,它应该独占这个优先级。在其他任务创建的时候, OSTaskCreate()会确保他们不会跟空闲任务有相同的优先级。 μC/OS-III在当所有的其他任务未就绪时,就会运行空闲任务。对于绝大多数的处理器来说,当没有事情可做时,处理器任然需要执行指令。所以当uC/OS-III判断没有比空闲任务更高优先级的任务时,就会执行空闲任务,使得CPU有一个立足之地。空闲任务主要代码如下 空闲任务的每次循环,都会调用OSIdleTaskHook()函数,这个函数提供给用户扩展应用。通过移植函数进OSIdleTaskHook(),可以使空闲任务在空闲时执行一些额外的工作。OSIdleTaskHook()代码如下 ②时钟节拍任务 几乎所有的实时系统(RTOS)都需要有一个能提供周期性时间的时间源,叫做时钟节拍(clock tick)或系统节拍(system tick),用来跟踪任务延时和任务等待超时。 uC/OS-III的时基周期处理程序封装在OS_TICK.C文件中。 ③统计任务 统计任务是一个系统任务,可以再系统运行时做一些统计工作,例如统计总的CPU使用率以及各任务的堆栈使用量。 在os_cfg.h文件中的配置常量OS_CFG_STAT_TASK_EN控制。配置为1时,就表示允许使用统计任务。 此外,可以通过配置常量OS_CFG_STAT_TASK_PRIO设定优先级。 如果需要使用统计任务,需要在main函数创建的第一个也是唯一一个应用应用任务中调用OSStatTaskCPUUsageInit()函数。程序代码如下所示。 实际的CPU利用率公式计算如下: 由于OSStartTask还会通过调用OSTaskSart()来计算所有已创建任务的堆栈使用量,并会将函数的返还结果分别存入各个任务的OS_TCB的StkFree和StkUsed成员中。 ④定时任务 μC/OS-III提供定时器服务,且定时任务是可选的。 有关定时器的启动,在os_cfg.h文件中的配置常量OS_CFG_TMR_EN控制。配置为1时,在编译的代码中就会包括定时任务的代码。 所谓定时器,本质上是一个递减的计数器,当计数器减为0时,就可以执行一个操作,该操作由回调函数实现。回调函数可由我们自己定义和编写。 OS_TmrTask是一个周期运行的任务,它和时钟节拍任务使用了相同的中断源,一本定时器的更新频率一般要慢一些。也就是说,如果时钟加派频率是200HZ,如果想实现的定时频率是10HZ,那么每20个时钟节拍中断,定时器就会收到一个信号量。如图所示 ⑤中断服务管理任务 在os_cfg.h文件中的配置常量OS_CFG_ISR_POST_DEFERRED_EN设置为1,μC/OS-III就会创建一个OS_InitQTask()的任务,该任务负责“延迟”在ISR中调用的系统POST服务函数的行为。 |
|
|
|
只有小组成员才能发言,加入小组>>
937 浏览 1 评论
1092 浏览 1 评论
12507 浏览 0 评论
5923 浏览 3 评论
17719 浏览 6 评论
1022浏览 1评论
1013浏览 1评论
939浏览 1评论
4732浏览 1评论
1093浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 10:07 , Processed in 0.882321 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号