VxWorks for ARM 任务调度问题

trium_KW 2016-03-27 06:17:44
最近遇上个比较奇怪的问题,大家帮忙看下:

VxWorks的taskLib.h中不是有一个taskDelay(int tid); 函数吗,网上关于这个函数的用法有很多教程,我不是不会用,只是用起来的效果与预期的不同。网上有说法称taskDelay函数会将当前任务从运行态撤下,转到就绪队列的最末端,到了想要延迟的时间片后再转到运行态。大家知道VxWorks默认抢占式调度,usrAppInit(用户程序入口)的优先级是最高的0,所以应该不会被其它任务抢占。

我的VxWorks的运行环境是三星的S3c2410BP,ARM9内核。

我在usrAppInit.c中这么写的:

#include <stdio.h>
#include "taskLib.h"
#include "sysLib.h"

void usrAppInit (void)
{
#ifdef USER_APPL_INIT
USER_APPL_INIT; /* for backwards compatibility */
#endif

/* add application specific code here */
printf("Hello world\n");
taskDelay(1);
printf("Hello world again\n");
}


结果程序运行出来就打出"Hello world",然后就貌似退出了(转到了Tornado Shell)。我调用Shell命令i查看当前的所有任务,如下展示出任务列表的前三行:

其中第一行的tRootTask是usrAppInit所在的任务。

我比较不解的是:
1. tRootTask那行的ERRNO为什么不是零?以及
2. tRootTask的状态为什么是DELAY而不是READY(延迟1时间片顶多几毫秒,怎么会停在DELAY状态呢?)

多谢大家帮助!
...全文
701 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,179

社区成员

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

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