taskRestartは任務を再び走らせなかった
自分で小さなプログラムを書いてtaskRestartをテストしたとき、プログラムは実行できましたが、自分が専門に書いたプログラムの中で走っていたとき、起動しませんでした.
taskRestartを実行し、タスクを再起動できるプログラムは次のとおりです.
このプログラムでは,タスクTestTask 1は絶えず起動される.
しかし次の場合TestTask 1は1回目のみ実行され、後はtaskRestartを使用するがタスクの起動に成功しなかった.
割り込みサービスプログラムにはコンテキストがないためtaskRestartは使用できません.ここでリスニングタスクListenTaskを作成し、ListenTaskでタスクをアクティブにすることができます.ListenTaskは普段はブロックされており、中断サービスプログラムがタスクをアクティブにするように通知したときにのみ蘇って実行されます.
taskRestartを実行し、タスクを再起動できるプログラムは次のとおりです.
void TestTask1()
{
printf("enter the TestTask1
");
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);
}
このプログラムでは,タスクTestTask 1は絶えず起動される.
しかし次の場合TestTask 1は1回目のみ実行され、後はtaskRestartを使用するがタスクの起動に成功しなかった.
#include
#include "taskLib.h"
#include "sysLib.h"
int taskId ;
void TestTask1()
{
printf("enter the TestTask1
");
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は普段はブロックされており、中断サービスプログラムがタスクをアクティブにするように通知したときにのみ蘇って実行されます.