/* 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);
}
}
/* suspend and resume task */
void suspendResumeMyTask(void)
{
taskDelay(sysClkRateGet() *3);
taskSuspend(tid);
printf("my task is suspended\n");
taskDelay(sysClkRateGet() *3);
taskResume(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("suspendResumeMyTask", 90, 0x100, 2000, (FUNCPTR) suspendResumeMyTask, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0);
}
我们可以使用taskSuspend()函数挂起一个任务的运行,这个任务只有获得对应的taskResume()后才能再次运行,这两个API的原型为:
extern STATUS taskSuspend (int tid);
extern STATUS taskResume (int tid);
运行输出:
Hello, I am task 17753664
0 1 2 3 4 5 my task is suspended
6 7 8 9
这个程序运行3秒后,suspendResumeMyTask任务挂起了myTask,输出“my task is suspended”。suspendResumeMyTask本身延迟3秒后恢复myTask,使得myTask再次输出“6 7 8 9”。显然,“6 7 8 9”与“0 1 2 3 4 5”的输出之间间隔了3秒以上的时间。
阅读(4122) | 评论(0) | 转发(0) |