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

发布于 2021-11-12 17:32:20 字数 1201 浏览 916 评论 1

我自己写个小程序测试taskRestart时,程序是可以运行的,但是在自己专门写的程序中跑时,却没有启动。

 

可以运行taskRestart,再次启动任务的程序如下:

 

void TestTask1()
{
	printf("enter the TestTask1n");
	
	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 TestTask1n");
	
	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平时都是阻塞的,只有当中断服务程序通知他激活任务时才苏醒并运行。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

皇甫轩 2021-11-15 08:13:47

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文