1. 创建第一个VxWorks任务
任务目标
本案例演示如何在VxWorks实时操作系统中使用taskSpawn()创建并启动一个简单任务。任务启动后打印自身名称、任务ID与优先级,验证任务已进入就绪态并被调度执行。
实现代码
/* first_task.c - VxWorks第一个任务示例 */
#include <vxWorks.h>
#include <taskLib.h>
#include <stdio.h>
/* 任务体:打印任务信息 */
void firstTask(void)
{
/* 获取当前任务ID,并查询任务名与优先级 */
TASK_ID selfId = taskIdSelf();
char taskName[20];
int priority;
taskNameGet(selfId, taskName);
priority = taskPriorityGet(selfId, NULL);
printf("任务[%s]已启动,任务ID: 0x%x,优先级: %d\n",
taskName, (unsigned int)selfId, priority);
/* 任务循环,保持任务存活 */
while (1)
{
taskDelay(sysClkRateGet()); /* 延时1秒 */
}
}
/* 初始化入口:由shell或启动脚本调用 */
void firstTaskInit(void)
{
/* 创建并启动任务 */
taskSpawn("tFirst", /* 任务名 */
100, /* 优先级(数值越小优先级越高) */
0x00000000, /* 选项:默认 */
0x2000, /* 栈大小(字节) */
(FUNCPTR)firstTask, /* 任务入口函数 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0); /* 10个参数,未使用填0 */
printf("任务tFirst已创建并启动\n");
}
运行与验证
环境要求:VxWorks 6.x/7.x开发环境,已连接目标机或使用VxWorks Simulator。
- 将
first_task.c添加到VxWorks镜像工程(或下载模块到目标机)。 - 在VxWorks shell中调用初始化函数:
firstTaskInit
验证方法:观察shell输出,若看到类似以下内容,说明任务创建成功并已被调度执行:
任务tFirst已创建并启动
任务[tFirst]已启动,任务ID: 0x3a3f3c0,优先级: 100
随后在shell中执行i命令查看系统任务列表,应能看到tFirst处于READY或DELAY状态(因任务内循环延时,通常显示为DELAY),确认任务持续存活。
关键说明
taskSpawn()参数依次为:任务名、优先级、选项、栈大小、入口函数及最多10个入口参数。本案例入口函数无参数,故全部填0。- 任务体内使用
taskIdSelf()获取自身ID,taskNameGet()与taskPriorityGet()查询任务属性,用于打印验证。 - 任务末尾的
while(1)循环防止任务退出,使任务在系统中持续可见,便于后续观察与管理。