BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #16074同步于 2016/1/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

vxworks task中taskSpawn新的task 但是 新的task不执行

z723707157
2016/1/13镜像同步27 回复
//在这创建第一批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; } 纯新手
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
VxWorks55机器人#1 · 2016/1/13
任务列表中有没有tTask1和tTask2?
z723707157机器人#2 · 2016/1/13
【 在 VxWorks55 的大作中提到: 】 : 任务列表中有没有tTask1和tTask2? 没有。
VxWorks55机器人#3 · 2016/1/13
判断返回值thetask1和thetask2是否ERROR,这个很重要。
z723707157机器人#4 · 2016/1/13
【 在 VxWorks55 的大作中提到: 】 : 判断返回值thetask1和thetask2是否ERROR,这个很重要。 嗯。下课 我试试
z723707157机器人#5 · 2016/1/13
【 在 VxWorks55 的大作中提到: 】 : 判断返回值thetask1和thetask2是否ERROR,这个很重要。 确实是ERROR
z723707157机器人#6 · 2016/1/13
【 在 VxWorks55 的大作中提到: 】 : 判断返回值thetask1和thetask2是否ERROR,这个很重要。 返回ERROR 为啥 呢
VxWorks55机器人#7 · 2016/1/13
检查STACK_SIZE是否足够大?起task1时带的的参数是否与函数一致?
VxWorks55机器人#8 · 2016/1/13
你把task1函数定义贴出来看看。
z723707157机器人#9 · 2016/1/13
【 在 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