请教各位高手关于VxWorks中的多任务调度问题

chenshq168 2007-03-06 04:31:06
当多任务以抢占式进行调度时,如果高优先级的任务执行完一次后,进行时间延时后任务会进行调度么?就是比如下面程序:
TaskHigh()
{
int i,j,temp=0;

while(1)
{
for(i=0;i<1000;i++)
{
for(j=0;j<100;j++)
{
printf("temp=%d\n",temp);
}
delay();
}
delay();
}
}

TaskLow()
{
int i,j,temp=0;

while(1)
{
for(i=0;i<1000;i++)
{
for(j=0;j<100;j++)
{
printf("temp=%d\n",temp);
}
delay();
}
delay();
}
}

当进行抢占式调度时,把TaskHigh()任务的所有循环打印完后,再去打印TaskLow()任务的循环呢?但是按照我的理解因为进行在最里面循环执行完后,有延时,所以进行了任务调度,会去执行TaskLow()任务,然后等到TaskLow()任务遇到延时,再过来执行TaskHigh()任务.
但是我看到资料上说的是先把TaskHigh()任务的所有循环打印完成,然后再去打印TaskLow()任务的循环.为什么是这样的呢?难道进行抢占式调度,即使是进行延时操作,也不会进行任务调度的么?

各位高手请多多指教了,.谢谢
...全文
711 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
helenhf 2007-03-18
  • 打赏
  • 举报
回复
嘿嘿,俺不是高手,俺是来等着接分滴~~
helenhf 2007-03-16
  • 打赏
  • 举报
回复
任务调度是基于系统原语操作的,比如申请和释放资源等。
如果当前任务t1正占用cpu,执行for(i=0;i<10000;i++); 是不会发生任务调度的。
因为你的for语句中并没有释放资源,不会引起系统资源分配的变化。
chenshq168 2007-03-16
  • 打赏
  • 举报
回复
请教一下,那如果我在任务最后使用for(i=0;i<10000;i++);来代替延时函数taskDelay(ticks),那么系统会不会发生任务调度呢?
按照我的理解应该是不会发生任务调度的,因为在操作系统中只有系统内部函数才能引起任务调度的,用户自己编写的函数是不能引起任务调度的,对么?
但是我看到很多资料,他们在任务后面都是说延时一段时间就发生任务调度,如果按照这样的说法,我的for(i=0;i<10000;i++)语句也是起到一个延时作用的呀,这样说的话是不是也发生任务调度呢?
多谢各位指教了!!!!!!!!!!!!
chenshq168 2007-03-16
  • 打赏
  • 举报
回复
哦,终于明白了VxWorks的任务调度方式了,谢谢楼上的高手指教
helenhf 2007-03-15
  • 打赏
  • 举报
回复
强烈推荐用taskDelay(ticks)
延时状态都调度的!
只要高优先级任务放弃了cpu,并且任务队列中有任务ready在等待cpu资源就会切换。
chenshq168 2007-03-09
  • 打赏
  • 举报
回复
楼上的大哥说得对,我只是举个事例来说明一下,任务的执行情况,难道只有用taskDelay(tick)时才能进行任务调度么?如果用其他的延时函数,是不能对VxWorks的任务进行切换的么?
ningxin 2007-03-07
  • 打赏
  • 举报
回复
你的delay函数,不是vxworks标准函数。如果是vxworks的标准函数taskDelay(tick)形式,则要进行任务调度。

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧