请问各位大神,任务删除怎么使用的???
工程包含主任务(优先级1),两个子任务(优先级2, A任务先创建,B任务不创建),两个子任务同一时间只能存在一个,代码如下,想要运行A任务时删除B任务;运行B任务时删除A任务,AB任务的切换采用外部按钮事件。
采用下面的代码,A -> B -> A就挂掉了!!!
请问是我的写法有问题?正确的应该是怎么做?
////////////////////////////////////////////////////////////////////////////////////////////////////// // 主任务: Void mainFxn(UArg arg0, UArg arg1) { // A任务 Task_Params_init(&taskFuncAppParams); taskAParams.stackSize = TASKSTACKSIZE; taskAParams.stack = &taskAStack; taskAParams.priority = 2; Task_construct(&taskAStruct, (Task_FuncPtr)TaskAFxn, &taskAParams, NULL); // B任务,参数设置先不创建 Task_Params_init(&taskBParams); taskBParams.stackSize = TASKSTACKSIZE; taskBParams.stack = &taskBStack; taskBParams.priority = 2; // Task_construct(&taskBStruct, (Task_FuncPtr)TaskBFxn, &taskBParams, NULL); // 创建事件,以便发生外部按键中断时通知按键任务 Event_Params eventParams; Event_Params_init(&eventParams); myEventHandle = Event_create(&eventParams,NULL); } ////////////////////////////////////////////////////////////////////////////////////////////////////// // 任务A static Void TaskAFxn(UArg arg0, UArg arg1) { UInt eventId = 0; UInt key; while (1) { Task_sleep((UInt)arg0); eventId = Event_pend(myEventHandle, Event_Id_NONE, Event_Id_00|Event_Id_01, 10000); if(eventId == Event_Id_00 ) { // 创建B任务 Task_Params_init(&taskBParams); taskBParams.stackSize = TASKSTACKSIZE; taskBParams.stack = &taskBStack; taskBLParams.priority = 2; Task_construct(&taskBStruct, (Task_FuncPtr)TaskBFxn, &taskBParams, NULL); break; } if( eventId == Event_Id_01 ) { } } // 删除A任务 Task_destruct(&taskAStruct); } ////////////////////////////////////////////////////////////////////////////////////////////////////// // 任务B static Void TaskBFxn(UArg arg0, UArg arg1) { UInt eventId = 0; UInt key; while (1) { Task_sleep((UInt)arg0); eventId = Event_pend(myEventHandle, Event_Id_NONE, Event_Id_00|Event_Id_01, 10000); if(eventId == Event_Id_00 ) { } if( eventId == Event_Id_01 ) { // 创建A任务 Task_Params_init(&taskAParams); taskAParams.stackSize = TASKSTACKSIZE; taskAParams.stack = &taskAStack; taskAParams.priority = 2; Task_construct(&taskAStruct, (Task_FuncPtr)TaskAFxn, &taskAParams, NULL); break; } } // 删除B任务 Task_destruct(&taskBStruct); } ////////////////////////////////////////////////////////////////////////////////////////////////////// // 外部按钮事件 void buttonCallbackFxn(PIN_Handle handle, PIN_Id pinId) { CPUdelay(8000*50); uint32_t eventId = Event_Id_NONE; if (!PIN_getInputValue(pinId)) { switch (pinId) { case Board_BUTTON0: eventId |= Event_Id_00; break; case Board_BUTTON1: eventId |= Event_Id_01; break; default: /* Do nothing */ break; } } if(eventId) { Event_post(myEventHandle,eventId); } }