硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3574|回复: 1
收起左侧

[FreeRTOS] vTaskDelay(100),100个时间片的Delay是谁控制的?

[复制链接]

65

主题

432

回帖

632

积分

金牌会员

积分
632
发表于 2017-2-6 00:01:17 | 显示全部楼层 |阅读模式
/*任务T1*/
.....................//代码A
vTaskDelay(100);  //位置X

.....................//代码B


上面,执行代码A后,系统延时100个时间片,即该任务挂起100个时间片的长度
这其间,首先执行一次任务切换
然后延时100个时间片,这100个时间片,应该是由KERNAL来监督执行,并不断的判断100个时间片是否到了。。。那么,这个行为是不是需要KERNAL不断
付出精力来监督执行情况,或者说这里就像是用状态机编程一样,是不是KERNAL一直在查询100个时间片还剩多少个了?
另一个问题:在位置X处,用vTaskDelay(0)和vTaskDelay(100)的效果是否一样?
如果我猜的话,用vTaskDelay(0)的话,执行一次任务调度后,任务T1会马上进入就绪态,等待进一步的调度;用vTaskDelay(100)的话,执行一次任务调度后
还要再等100个时间片后任务T1才会进入就绪态,等待进一步的任务调度
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2017-2-6 09:59:25 | 显示全部楼层
1. 一般RTOS的处理方式都是在系统时钟节拍中断里面完成任务延迟列表的处理。
2. vTaskDelay(0)等同于taskYIELD(),强制执行一次任务切换,主要是当前执行的任务有同优先级任务的话,会切换到下一个同优先级任务,如果没有的话,强制执行后,还是回来继续执行自己。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 17:46 , Processed in 0.176271 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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