首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任务调度

任务调度
EN

Stack Overflow用户
提问于 2013-01-29 09:54:02
回答 1查看 4.6K关注 0票数 0

我的系统由七项任务组成。为了检查我的系统,我创建了一些演示RTP,如下所示:

代码语言:javascript
复制
    int main()
    {
        taskSpawn("/task1" , 107 , VX_NO_STACK_FILL , 2000 , (FUNCPTR)task1, 0,0,0,0,0,0,0,0,0,0);
        taskSpawn("/task2" , 106 , VX_NO_STACK_FILL , 2000 , (FUNCPTR)task2, 0,0,0,0,0,0,0,0,0,0);
        taskSpawn("/task3" , 105 , VX_NO_STACK_FILL , 2000 , (FUNCPTR)task3, 0,0,0,0,0,0,0,0,0,0);
        taskSpawn("/task4" , 104 , VX_NO_STACK_FILL , 2000 , (FUNCPTR)task4, 0,0,0,0,0,0,0,0,0,0);
        taskSpawn("/task5" , 105 , VX_NO_STACK_FILL , 2000 , (FUNCPTR)task5, 0,0,0,0,0,0,0,0,0,0);
        taskSpawn("/task6" , 106 , VX_NO_STACK_FILL , 2000 , (FUNCPTR)task6, 0,0,0,0,0,0,0,0,0,0);
        taskSpawn("/task7" , 101 , VX_NO_STACK_FILL , 2000 , (FUNCPTR)task7, 0,0,0,0,0,0,0,0,0,0);

        taskExit(OK);
    }

void task1() { taskDelay(7); }
void task2() { taskDelay(13); }
void task3() { taskDelay(313); }
void task4() { taskDelay(19); }
void task5() { taskDelay(188); }
void task6() { taskDelay(10); }
void task7() { taskDelay(10); }

我运行了RTP并连接了性能分析器。性能分析器给出了每个任务的CPU使用情况。我要检查的是每个任务是否按时执行,例如,我希望确保task1每7*16 = 112毫秒执行一次(我的系统时钟速率为60 my,这意味着每16毫秒调用一次调度器)。

问题:1.剖析器中是否有任何方法可以使shure发生这种情况。2.如果不是,如何检查这一点?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-01-30 18:06:40

我从来没有使用过分析器,所以我对它一无所知,但是我以前在vxworks中做过您想做的事情。我就是这样做的:

1)生成优先级= 255 (或低于任何实时任务)的任务,该任务消耗100% CPU,如下所示:

代码语言:javascript
复制
void lowPriTask()
{
    volatile int forever = 1;
    while (forever) {}
}

2)用taskSwitchHookAdd()安装一个任务开关挂钩,您的开关挂钩回调应该跟踪(在内存中)旧的taskId和新的taskId,而tickGet()基本上只是在内存中编译这个信息的列表。

3)然后,当您运行任务一段时间后,将内存转储到一个文件中,并想出一些很酷的方法来检查它/可视化它,也许可以借助excel之类的工具。

这个lowPri任务的原因是,在vxworks中,只有在发生任务切换时才调用taskSwitchHook (显然),微妙的细节是,如果系统处于空闲状态,则不会发生任务切换。因此,如果您正在跟踪任务切换的时间,并且系统处于空闲状态,那么您将有一些任务似乎占用了大量的CPU时间,而实际上系统是空闲的。就像这样:

  • taskSwitch_In
  • taskRuns
  • 任务已经完成,但没有其他任务准备好,所以系统会被闲置.
  • 一些滴答声过后任务就准备好了..。
  • taskSwitch_Out

因此,如果您的低优先级任务消耗了100%的空闲时间,那么在完成任何(更高优先级)任务之后,总是会立即强制任务切换。所以你总能看到这样的模式:

  • taskSwitch_In
  • taskRuns
  • taskSwitch_Out (在没有其他任务准备就绪的情况下转到lowPriTask )

除此之外,它还根据这个低优先级任务运行的时间,准确地估计了空闲时间。

它是粗糙的,但它是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14580037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档