Vxworks 任务重启示例

/* includes */
#include "vxWorks.h"
#include "taskLib.h"
#include "sysLib.h"

int tid;

/* task function */
void myFunc(void)
{
    int i;
    printf("Hello, I am task %d\n", taskIdSelf()); /* Print task Id */
    for (i = 0; i < 10; i++)
    {
        printf("%d ", i);
        taskDelay(sysClkRateGet() / 2);
    }
}

/* reset task */
void resetMyTask(void)
{
    taskDelay(sysClkRateGet() *3);
    printf("my task will be reseted\n");
    taskRestart(tid);
}

/* user entry */
void user_start()
{
    printf("ready to begin new tasks\n");
    tid = taskSpawn("myTask", 90, 0x100, 2000, (FUNCPTR) myFunc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    taskSpawn("resetMyTask", 90, 0x100, 2000, (FUNCPTR)resetMyTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}

运行输出:
8 9 Hello, I am task 15700472
0 1 2 3 4 5 my task will be reseted
Hello, I am task 15700472
0 1 2 3 4 5 6 7 8 9 
程序运行3秒后resetMyTask启动,它复位了myTask,因此myTask被重新执行,“Hello, I am task 17753664”以及“0 1 2 3 4 5”被再次输出。


我们可以使用taskRestart()函数重新启动一个任务,不管任务当前处于什么状态,它都会被重新开始。该API的原型是:
extern STATUS taskRestart (int tid);

猜你喜欢

转载自blog.csdn.net/yhc1991/article/details/81142196