导 航┆主 站┆文 章┆资 料┆下 载┆美 食┆读 书┆笑 话┆博 客┆论 坛
>> Tony嵌入式开发论坛静态版首页
查看完全版本:Tony嵌入式开发论坛

 

    关于“超级好的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我试了都是一样的输出。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------



查看完全版本:Tony嵌入式开发论坛
Copyright 2006-2008 Cevx.Com Cevx.Net 制作 版权所有
网友发帖仅代表个人观点,与本论坛立场无关