|
|
- 关于“超级好的vxworks入门实验课”中的试验6
作者:troubles0407 时间:2008-9-2 10:39:54
调试中遇到了问题,
试验程序如下:
#include"vxWorks.h"
#include"taskLib.h"
#include"kernelLib.h"
#include"sysLib.h"
#include"logLib.h"
#define ITER1 20
#define ITER2 10
#define PRIORITY 101
#define TIMESLICE sysClkRateGet()/60
#define LONG_TIME (1<<25)
static void taskOne(void)
{
int i,j;
for(i=0;i<ITER1;i++)
{
for(j=0;j<ITER2;j++)
logMsg("\n",taskIdSelf(),0,0,0,0,0);
for(j=0;j<LONG_TIME;j++);
}
}
static void taskTwo(void)
{
int i,j;
for(i=0;i<ITER1;i++)
{
for(j=0;j<ITER2;j++)
logMsg("\n",taskIdSelf(),0,0,0,0,0);
for(j=0;j<LONG_TIME;j++);
}
}
static void taskThree(void)
{
int i,j;
for(i=0;i<ITER1;i++)
{
for(j=0;j<ITER2;j++)
logMsg("\n",taskIdSelf(),0,0,0,0,0);
for(j=0;j<LONG_TIME;j++);
}
}
static void taskFour(void)
{
int i,j;
for(i=0;i<ITER1;i++)
{
for(j=0;j<ITER2;j++)
logMsg("\n",taskIdSelf(),0,0,0,0,0);
for(j=0;j<LONG_TIME;j++);
}
}
void s5_rrsched(void)
{
int taskIdOne,taskIdTwo,taskIdThree,taskIdFour;
/*if(kernelTimeSlice(TIMESLICE)==OK)*/
logMsg("\n\n\n\n\t\t\tTIMESLICE = %d ticks\n\n\n",TIMESLICE,0,0,0,0,0);
taskDelay(sysClkRateGet()*2);
if((taskIdOne=taskSpawn("t1",PRIORITY,0x100,20000,(FUNCPTR)taskOne,0,0,0,0,0,0,0,0,0,0)==ERROR))
logMsg("taskSpawn taskOne failed.\n",0,0,0,0,0,0);
if((taskIdTwo=taskSpawn("t2",PRIORITY,0x100,20000,(FUNCPTR)taskTwo,0,0,0,0,0,0,0,0,0,0)==ERROR))
logMsg("taskSpawn taskTwo failed.\n",0,0,0,0,0,0);
if((taskIdThree=taskSpawn("t3",PRIORITY,0x100,20000,(FUNCPTR)taskThree,0,0,0,0,0,0,0,0,0,0)==ERROR))
logMsg("taskSpawn taskThree failed.\n",0,0,0,0,0,0);
if((taskIdFour=taskSpawn("t4",PRIORITY,0x100,20000,(FUNCPTR)taskFour,0,0,0,0,0,0,0,0,0,0)==ERROR))
logMsg("taskSpawn taskFour failed.\n",0,0,0,0,0,0);
}
问题1:在此种情况下,程序会依次把taskone、tasktwo、taskthree、taskfour依次全部打印完,而如果恢复被注释掉的那段时间片轮转调度之后则会10个10个的依次显示这四个任务的结果,现在的问题是如果我再次将轮转调度那段注释掉,并编译下载,程序仍会按使用了轮转调度的方式来执行,除非我将Vxsim关闭后重新打开,请哪位高手试试你们是不是也是这种情况,如果是的,请问是为什么啊?
问题2:实验中要求其他4个任务的优先级必须比sched任务的优先级(100)低,但是我将这4个任务的优先级都改为80之后并没有发现结果有什么不同,请问试验设计者为什么有这个关于优先级的要求?谢谢!!
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
作者:chenlei188 时间:2008-9-2 14:35:38
1,我没有你那样试过,我每编译一次,都要重新开一次vxsim,没有遇到你说的问题,难道是有保留的缘故,具体我也不清楚。
2,这个比sched要低的原因,主要是怕你创建的任务的优先级要高于sched,把这个主任务给挂起吧,其实这个主任务的优先级是很高的,那个说100我觉得不合适,只要不低于3我试了都是一样的输出。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|