请问各位大神,任务删除怎么使用的???
工程包含主任务(优先级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);
}
}