一、创建一个实时任务
1、RT_TASK 结构
当在Xenomai中创建实时任务时,RT_TASK结构将作为引用此任务的描述符。
struct RT_TASK {
uintptr_t handle;
pthread_t thread;
};
任务创建将会通过调用 rt_task_create函数进行创建:
int rt_task_create (RT_TASK *task, const char *name, int stack_size, int priority, int mode)
其中:*task 为指向RT_TASK 类型额结构体指针
*name为创建实时任务的名称
stack_size 新任务使用的堆栈大小
priority 设定任务的优先级,[0–99]
“mode” 是一组影响任务的标志,例如:
T_JOINABLE允许另一个任务在新任务结束时等待。此任务终止后,应调用rt_task_join(),以清除任何资源。
T_LOCK导致新任务在进入rt_task_start()指定的用户任务函数之前锁定该程序。需要从新任务调用rt_task_set_mode(),才能解除此锁。
任务创建过后则需要启动运行这个程序,任务将进入休眠状态则使用函数 rt_task_start()进行任务启动运行:
int rt_task_start (RT_TASK task, void()(void *arg) entry, void *arg)
其中:*task 为指向RT_TASK 类型结构的指针,该结构必须已由对RT_task_create()的调用初始化
“entry” 是此实时任务要执行的任务函数的地址
“arg” 是给任务函数的void类型指针参数
2、RT_TASK_INFO结构
int prio(任务优先级)
struct threadobj_stat stat(任务的状态)
char name [XNOBJECT_NAME_LEN](任务名)
pid_t pid
任务状态描述符,此结构用于保存实时任务的各种静态和运行时信息,这些信息由对rt_task_inquire()的调用填充。
rt_task_inquire()检索有关实时任务的信息,返回有关 Alchemy 任务的各种信息。此函数还可用于探测任务是否存在.
int rt_task_inquire ( RT_TASK * task, RT_TASK_INFO * info )
其中 * task 任务描述符,如果task为空,则返回有关当前任务的信息。注意:如果task为空则必为Alchemy 任务。
info 任务信息将写入的结构的地址
如果任务存在,则返回零。另外,如果信息为非空,则用任务信息填写info结构内容。
二、程序及结果分析
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <alchemy/task.h>
RT_TASK hello_task;
// 任务执行的功能函数
void helloWorld(void *arg)
{