打印
[uCOS/RTOS]

uc/osIII 中关于软件定时器使用的问题,有一句代码没懂

[复制链接]
1901|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a5086397|  楼主 | 2018-4-26 18:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
OSTmrCreate ((OS_TMR              *)&my_tmr,            
               (CPU_CHAR            *)"MySoftTimer",     
               (OS_TICK              )10,               
               (OS_TICK              )10,               
               (OS_OPT               )OS_OPT_TMR_PERIODIC,
               (OS_TMR_CALLBACK_PTR  )TmrCallback,        
               (void                *)"Timer Over!",     
               (OS_ERR              *)err);               
                                                                                                          
  OSTmrStart ((OS_TMR   *)&my_tmr,
              (OS_ERR   *)err);
                                         
        ts_start = OS_TS_GET();   
                                                         
        while (DEF_TRUE) {                           

                OSTimeDly ( 1000, OS_OPT_TIME_DLY, & err ); // 这里必须加一个延时函数,否则程序跑不起来,正在学习ucos, 请大神们指导下,非常感谢

        }
       
}

相关帖子

沙发
a5086397|  楼主 | 2018-4-26 18:36 | 只看该作者
while (DEF_TRUE) {                           

                OSTimeDly ( 1000, OS_OPT_TIME_DLY, & err ); // 这里必须加一个延时函数,否则程序跑不起来,正在学习ucos, 请大神们指导下,非常感谢

        }
循环体内必须加上延时才可以,请问有知道的吗?

使用特权

评论回复
板凳
new21jackie| | 2018-4-26 20:09 | 只看该作者
不加delay,系统就不会调度,那你这个程序就一直在while里

使用特权

评论回复
地板
a5086397|  楼主 | 2018-4-27 10:27 | 只看该作者
new21jackie 发表于 2018-4-26 20:09
不加delay,系统就不会调度,那你这个程序就一直在while里

首先感谢您的回答
那个while上面的软件定时器定时1秒,时间到了应该就会去调用回调函数吧?
我找了下文档,加延时确实是会触发调度,但是回调函数不是任务啊,调度还影响任务调用函数吗?

使用特权

评论回复
5
a5086397|  楼主 | 2018-4-27 10:34 | 只看该作者
new21jackie 发表于 2018-4-26 20:09
不加delay,系统就不会调度,那你这个程序就一直在while里

我把while里面的延时去掉了,改成了OS_Sched0(), 程序就正常了,那就是调度的问题,但是这个不算任务间的切换吧,为什么还是要用调度啊?

使用特权

评论回复
6
new21jackie| | 2018-4-27 12:16 | 只看该作者
所有的函数都是在一个上下文里调用的,要么是中断,要么是task,先找本操作系统的书看看吧,这些都是通用的概念,和ucos没啥关系。

使用特权

评论回复
7
菜鸟同学| | 2018-4-29 12:14 | 只看该作者
操作系统的各个任务都是需要释放的,不然会一直占用CPU,释放过后其他程序才能执行,

使用特权

评论回复
8
ayb_ice| | 2018-5-2 11:13 | 只看该作者
你一直霸占着CPU,如果优先级又高,比他低的任务只能无法运行,这是基本常识,对于纯抢先调度的内核更是如此

使用特权

评论回复
9
ETjason| | 2018-5-13 16:22 | 只看该作者
任务切换要事件触发的,否则不调度

使用特权

评论回复
来自android
10
pmw_56| | 2018-5-14 11:49 | 只看该作者
new21jackie 发表于 2018-4-26 20:09
不加delay,系统就不会调度,那你这个程序就一直在while里

应该还是有调度吧 ?每次的tick中断,调度有两种,任务调度和中断调度。只是这时如果任务的优先级高的话,刚刚释放CPU的控制权后,其他的任务开始执行完,释放后CPU,又继续执行这个任务 ,看起来像死机一样。

使用特权

评论回复
11
new21jackie| | 2018-5-28 20:01 | 只看该作者
pmw_56 发表于 2018-5-14 11:49
应该还是有调度吧 ?每次的tick中断,调度有两种,任务调度和中断调度。只是这时如果任务的优先级高的话 ...

中断返回的时候,可以触发任务调度,嵌入式的rtos的调度和linux的调度也是不一样的,基于时间片跟基于优先级的调度策略也不一样。在楼主的这个问题里,新创建的任务始终不会被调度到

使用特权

评论回复
评论
w451198326 2018-6-4 16:07 回复TA
你们在这里套着这个把楼主搞蒙了 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

15

帖子

0

粉丝