xenomai 应用开发 1:创建并运行一个实时任务 --WT

本文介绍了如何在Xenomai中创建和运行一个实时任务,包括RT_TASK结构的使用、rt_task_create和rt_task_start函数的调用,以及RT_TASK_INFO结构用于获取任务信息。此外,还讨论了程序结果分析和常见的错误处理方法,如利用strerror函数检查错误。
摘要由CSDN通过智能技术生成

一、创建一个实时任务

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)
{
   
  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值