我自己写个小程序测试taskRestart时,程序是可以运行的,但是在自己专门写的程序中跑时,却没有启动。
可以运行taskRestart,再次启动任务的程序如下:
void TestTask1()
{
printf("enter the TestTask1\n");
while(1)
{
taskDelay(100);
}
}
taskId = taskSpawn("testTask" , 200 , 0 , TASK_STACK_SIZE,
(FUNCPTR)TestTask1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
taskDelay(100);
while(1)
{
taskRestart(taskId);
taskDelay(5);
}
在这个程序中,任务TestTask1是不断被启动的。
但是在 下面这种情况下TestTask1只在第一次运行,后面虽然用taskRestart,但没有能够成功启动任务的。
#include
#include "taskLib.h"
#include "sysLib.h"
int taskId ;
void TestTask1()
{
printf("enter the TestTask1\n");
while(1)
{
taskDelay(100);
}
}
void TaskManager()
{
taskRestart(taskId);
}
int main()
{
taskId = taskSpawn("testTask" , 200 , 0 , 500 , (FUNCPTR)TestTask1 ,
0, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0);
sysAuxClkConnect((FUNCPTR)TaskManager, 0);
sysAuxClkEnable();
taskDelay(1000);
return 1;
}
原因在于中断服务程序是没有上下文的,所以不能用taskRestart,可以再此处创建一个监听任务ListenTask,在ListenTask中激活该任务。 ListenTask平时都是阻塞的,只有当中断服务程序通知他激活任务时才苏醒并运行。