taskRestart并没有让任务再次跑起来

西昆仑 发布于 2011/01/20 23:45
阅读 617
收藏 1

NGINX社区官方微服务训练营,深入了解K8s网络,线上课程+专家答疑,立即加入>>>

我自己写个小程序测试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平时都是阻塞的,只有当中断服务程序通知他激活任务时才苏醒并运行。

加载中
0
西昆仑
西昆仑

有没有人能够回答一下呢。。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部