野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7341|回复: 5

[ucos] uCOSIII时基任务

[复制链接]
发表于 2015-10-17 15:15:50 | 显示全部楼层 |阅读模式
看了好长时间代码也没看明白,定时器中断调用OSTimeTick()函数,可是OSTimeTick()又是如何启动时基任务OS_TickTask()来控制延时时间??请各位大神帮忙
回复

使用道具 举报

 楼主| 发表于 2015-10-19 11:59:27 | 显示全部楼层
有木有哪位大神帮我解答一哈
回复 支持 反对

使用道具 举报

发表于 2015-10-19 14:09:44 | 显示全部楼层
void  OSTimeTick (void)    (os_time.c文件)
函数里边有
   (void)OSTaskSemPost((OS_TCB *)&OSTickTaskTCB,            /* Signal tick task                                       */
                       (OS_OPT  ) OS_OPT_POST_NONE,
                       (OS_ERR *)&err);
就是发送一个任务信号量给OSTickTaskTCB任务
在os_tick.c文件中的
void  OS_TickTaskInit (OS_ERR  *p_err)函数里边有创建一个OSTickTaskTCB任务:
    OSTaskCreate((OS_TCB     *)&OSTickTaskTCB,
                 (CPU_CHAR   *)((void *)"uC/OS-III Tick Task"),
                 (OS_TASK_PTR )OS_TickTask,
                 (void       *)0,
                 (OS_PRIO     )OSCfg_TickTaskPrio,
                 (CPU_STK    *)OSCfg_TickTaskStkBasePtr,
                 (CPU_STK_SIZE)OSCfg_TickTaskStkLimit,
                 (CPU_STK_SIZE)OSCfg_TickTaskStkSize,
                 (OS_MSG_QTY  )0u,
                 (OS_TICK     )0u,
                 (void       *)0,
                 (OS_OPT      )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR | OS_OPT_TASK_NO_TLS),
                 (OS_ERR     *)p_err);
任务的服务函数就是:void  OS_TickTask (void  *p_arg)函数
在该函数内有任务信号量等待函数
(void)OSTaskSemPend((OS_TICK  )0,
                            (OS_OPT   )OS_OPT_PEND_BLOCKING,
                            (CPU_TS  *)0,
                            (OS_ERR  *)&err);                   /* Wait for signal from tick interrupt                  */
这样整个的逻辑就是:
时钟中断循环调用void  OSTimeTick (void)函数发送任务信号量给OSTickTaskTCB任务
void  OS_TickTask (void  *p_arg)函数在接收到任务信号量后就给改变时间标志OSTickCtr++;
然后就是更新延时链表和超时链表里边内容
OS_TickListUpdateDly()和OS_TickListUpdateTimeout()
在两个函数内就就好更新每个延时函数的剩余时间,是否延时完毕等等操作
楼主可以参考Micrium官方书籍《嵌入式实时操作系统uCOS-III》的5.6.2小节内容
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-10-19 18:23:01 | 显示全部楼层
亽亼 发表于 2015-10-19 14:09
void  OSTimeTick (void)    (os_time.c文件)
函数里边有
   (void)OSTaskSemPost((OS_TCB *)&OSTickTask ...

多谢,多谢。写得非常详细,辛苦了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 17:32:10 | 显示全部楼层

1

1

2

2

3

3
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-20 17:34:20 | 显示全部楼层
根据自己理解搞了个流程图,不知道对不对,请各位大神指教
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-4 01:29 , Processed in 0.031321 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表