返回信息流//在这创建第一批task,task执行期间会调用下面的progStart函数来创新新的task
void start(void)
{
int tGetId,tJudId,tProId;
tGetId = taskSpawn("tPget",200,0,1000,(FUNCPTR)taskmsg,0,0,0,0,0,0,0,0,0,0);
tJudId = taskSpawn("tPjud",201,0,1000,(FUNCPTR)process,0,0,0,0,0,0,0,0,0,0);
/* tProId = taskSpawn("tPro",202,0,1000,(FUNCPTR)task3,3,0,0,0,0,0,0,0,0,0); */
}
void progStart(void)
{
printf("progStart is ok");//这是新的task,这个输出语句执行到了,但是新的task的代码没执行到......
thetask1=taskSpawn("tTask1",100,0,STACK_SIZE,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);
thetask2=taskSpawn("tTask2",101,0,STACK_SIZE,(FUNCPTR)task2,0,0,0,0,0,0,0,0,0,0);
return;
}
纯新手
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #16074同步于 2016/1/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
vxworks task中taskSpawn新的task 但是 新的task不执行
z723707157
2016/1/13镜像同步27 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 VxWorks55 的大作中提到: 】
: 判断返回值thetask1和thetask2是否ERROR,这个很重要。
返回ERROR 为啥 呢
【 在 VxWorks55 的大作中提到: 】
: 你把task1函数定义贴出来看看。
/*任务一,负责信号量的创建,控制全局*/
void task1(void)
{
printf("task1 is ok");
semMalloc= semBCreate(SEM_Q_PRIORITY,SEM_FULL);
semFree = semBCreate(SEM_Q_PRIORITY,SEM_FULL);
}
/*任务二,测试程序*/
void task2(void)
{
int i;
char* add[10];
int size[8] = {44, 55, 54, 76 ,11, 5, 4, 666};
mallocPtr->frontBlock = 0;
printf("task2 is ok");
initialPtr = initial();
for(i=0;i<8;i++)
{
poolHead* poolHeadPtr;
add[i] = (char*)memMalloc(size[i]);/*分配内存,检查内存块分配情况*/
poolHeadPtr=initialPtr->pool;
/*输出测试结果*/
printf("task malloc size:%d",size[i]);
printf("\n[pool 1](16B) : available block in pool is : %d \n",poolHeadPtr->available);
printf("[pool 2](256B) : available block in pool is : %d\n",(poolHeadPtr->next)->available);
if (size[i]<=16)
printf("The Address is:%08x (use size is:16+8)\n\n",add[i]);
else if (size[i]<=256)
printf("The Address is:%08x (use size is:256+8)\n\n",add[i]);
else
printf("system malloc \n\n");
}
taskDelay(10);
for(i=0;i<8;i++)
{
poolHead* poolHeadPtr;
memFree((void*)add[i]); /*释放内存,检查内存块分配情况*/
poolHeadPtr=initialPtr->pool;
taskDelay(50);
/*输出测试结果*/
printf(" free size:%d",size[i]);
printf("\n[pool 1](16B) : available block in pool is : %d\n",poolHeadPtr->available ); printf("[pool 2](256B) : available block in pool is : %d\n",(poolHeadPtr->next)->available);
if (size[i]<=16)
printf("The Address is:%08x (free size is:16+8)\n\n",add[i]);
else if (size[i]<=256)
printf("The Address is:%08x (free size is:256+8)\n\n",add[i]);
else
printf("system free \n\n");
}
return;
}
如果写个函数 在函数中直接启动任务就ok