完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
|
|
|
|
|
|
|
|
|
|
有什么问题?
|
|
|
|
|
|
原子哥,问你个问题,举个例子,现在有A任务和B任务,A任务进入延时后就释放了cpu,接下来就该执行B任务了,我想问的就是A的这个延时函数是要在B任务执行到延时函数释放cpu后才执行,还是在B任务执行的时候A的延时函数也在同时执行?如果是同时执行的话,那么是不是说当A、B任务同时挂起的时候延时函数还是可以执行的?
|
|
|
|
|
|
这就看你的设置了
如果A优先级高于B。 那么A可以打断B的执行,在A延时到了以后,可以打断B的运行,继续A任务。 如果A低于B,那么A就是被打断的命运了。。。只要B不主动释放CPU,A就别想跑。。。 |
|
|
|
|
|
就是这么理解了。
|
|
|
|
|
|
在节拍到来时会减一。
while (ptcb->OSTCBPrio != OS_TASK_IDLE_PRIO) { /* Go through all TCBs in TCB list */ OS_ENTER_CRITICAL(); if (ptcb->OSTCBDly != 0u) { /* No, Delayed or waiting for event with TO */ ptcb->OSTCBDly--; /* Decrement nbr of ticks to end of delay */ if (ptcb->OSTCBDly == 0u) { /* Check for timeout */ if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) { ptcb->OSTCBStat &= (INT8U)~(INT8U)OS_STAT_PEND_ANY; /* Yes, Clear status flag */ ptcb->OSTCBStatPend = OS_STAT_PEND_TO; /* Indicate END timeout */ } else { ptcb->OSTCBStatPend = OS_STAT_PEND_OK; } if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* Is task suspended? */ OSRdyGrp |= ptcb->OSTCBBitY; /* No, Make ready */ OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; } } } 这是时钟节拍对延时部分的处理 |
|
|
|
|
|
原子哥,我想问2个问题:
1.为什么A和B都释放了cpu,但是延时函数还能执行?是不是像9楼说的那样,是时钟节拍对延时部分的处理,而时钟节拍一般是不能被打断的?如果这样的话,岂不是这样,假如一种情况是,A优先级比B高,A在运行,而B释放了cpu,此时是不是B的延时函数还是能够执行的,只是该B函数的延时执行完后不能再往下执行,直到高优先级的A释放了cpu后B才能往下执行?总之延时函数是不会停止的,因为它是时钟节拍作用的? 2.我又看了一下对SysTick的讲解部分,书上说只要不把状态寄存器中的使能位清除,就永不停息——它说的永不停息除了清除相应的使能位外,还有没有什么特殊情况可以打破它?例如进入待机、睡眠或者中断什么的? |
|
|
|
|
|
1,延时就是在:CPU跑空闲任务(最低优先级)。B如果延时时间到,且A没有释放CPU,那么是不会运行的。所谓延时函数运行,就是在跑空闲任务...
2,待机模式当然就不跑了。。。中断的时候还是在跑的 |
|
|
|
|
|
|
|
|
|
|
|
这个我能理解,我就是不理解,比方说,B释放了内存,但是B的延时函数还没执行完,而A还在运行,这时B的延时函数会不会跑?是要等到A释放cpu后B的延时函数才能继续跑吗?
|
|
|
|
|
|
|
|
|
|
|
|
好的,我理解了。谢谢!
|
|
|
|
|
|
假如一个任务延时3S,但是他延时到2S的时候被挂起了,那等到他被恢复运行的时候,还继续延时刚刚挂起前那剩余的1S时间吗?还是从头运行这个任务?读任哲的书遇到这个问题,感觉恢复了还继续延时那剩余的1S,但是任务控制块里面的成员OSTCBDly和这个延时又有什么关系
|
|
|
|
|
|
|
|
|
|
|
|
原来延时也是一种挂
|
|
|
|
|
|
遇到和楼主一样的疑惑,楼主理解了吗?讲解讲解啊
|
|
|
|
|
|
也就是一个任务(1)在延时,在另外一个任务(2)里面再调用OSTaskSuspend(prio);挂起那个正在延时的任务(1),这个时候那个被挂起的任务(1)的延时剩余时间还继续减吗? 我也遇到这个困惑,好像就算被Suspend了,延时的剩余时间也是在减的,求原子哥给个肯定答案
|
|
|
|
|
|
我也没试过,你测试下吧。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1018 浏览 1 评论
1849 浏览 0 评论
1830 浏览 1 评论
3254 浏览 5 评论
3581 浏览 9 评论
1021浏览 1评论
1850浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1360浏览 1评论
1852浏览 0评论
1178浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 00:32 , Processed in 1.159311 second(s), Total 110, Slave 90 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4240