最近遇上个比较奇怪的问题,大家帮忙看下:
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状态呢?)
多谢大家帮助!