How to create and compile a Xenomai helloworld program
How to create and compile a Xenomai helloworldprogram
Contents
一、create a task.2
二、start a task.2
三、helloworld.2
四、编译执行…4
1> xeno-config —xeno-cflags.4
2> xeno-config —xeno-ldflags.4
3>设置flags环境变量有效…4
4>编译…4
5>声明动态库环境变量…4
6>执行程序…5
说明:如何编译调用了xenomai API的程序,可以参考此文档。 |
一、createa task
创建任务使用 int rt_task_create()函数(参考API手册更详细,native api)
int rt_task_create (RT_TASK *task, const char *name, intstack_size, int priority, int mode)
*task,指向RT_TASK类型。在创建任务之前,一定要事先声明好。用来存储实时任务需要的数据。
name任务的符号名称。
stack_size 为任务分配的堆栈大小。如果设置为0,会使用预定义的默认设置。
priority优先级。最高99,最低0
mode 模式。
二、starta task
int rt_task_start (RT_TASK *task, void(*task_func)(void*arg), void *arg)
task就是指rt_task_create()里创建的任务
task_func 任务要执行的功能函数,比如helloworld程序,就是这个功能函数里输出helloworld的。
arg参数。空指针参数。
三、helloworld
#include <stdio.h> #include <signal.h> #include <unistd.h> #include <sys/mman.h> #include <native/task.h> #include <native/timer.h> #include <rtdk.h>
RT_TASK demo_task;
void demo(void arg) //task function,任务要执行的函数功能
{
RT_TASK curtask; RT_TASK_INFO curtaskinfo; // hello world rt_printf(“Hello World!\n”); // inquire current task curtask=rt_task_self(); rt_task_inquire(curtask,&curtaskinfo); // print task name rt_printf(“Task name : %s \n”, curtaskinfo.name); }
int main(int argc, char argv[])
{ char str[10] ; // Perform auto-init of rt_print buffers if the task doesn’t do so rt_print_auto_init(1); // Lock memory : avoid memory swapping for this program mlockall(MCL_CURRENT|MCL_FUTURE); rt_printf(“start task\n”); /
Arguments: &task, name, stack size (0=default), priority, mode (FPU, start suspended, …)
/ sprintf(str,”hello”); rt_task_create(&demo_task, str, 0, 50, 0);
/ Arguments: &task, task function, function argument */ rt_task_start(&demo_task, &demo, 0);
} |
四、编译执行
一般来说,如果库的头文件不在/usr/include目录中,那么在编译的时候需要用-I参数指定其路径。由于同一个库在不同系统上可能位于不同的目录下,用户安装库的时候也可以将库安装在不同的目录下,所以即使使用同一个库,由于库的路径的不同,造成了用-I参数指定的头文件的路径也可能不同,其结果就是造成了编译命令界面的不统一。
可以使用xeno-config获得编译时候库的位置,然后告诉gcc。
首先获得CFLAGS和LDFLAGS。分别是编译选项的参数和连接选项的参数。
1> xeno-config —xeno-cflagsxeno-config —xeno-cflags
2> xeno-config —xeno-ldflagsxeno-config —xeno-ldflags
3>设置flags环境变量有效
说明 这里的export LDFLAGS= 这个按键。 |
4>编译
gcc $CFLAGS $LDFLAGS -lnative -lrtdk ex01.c -o ex01
5>声明动态库环境变量
程序执行需要的动态库在/usr/xenomai/lib里面,在环境变量里进行声明
export LD_LIBRARY_PATH=/usr/xenomai/lib
6>执行程序
![Image 1][]
我们在PC上编译生成的在本地运行的程序,要在ARM板子上运行,把GCC命令改成对应交叉编译工具即可。
如果不使用xeno-config ,交叉编译命令格式大概如下
arm-linux-gnueabi-gcc \
-I/home/carles/…/xenomai-2.5.6/usr/xenomai/include \
-D_GNU_SOURCE -D_REENTRANT -Wall-pipe -D__XENO__ \
\-lnative \\
\-L/home/carles/.../xenomai\-2.5.6/usr/xenomai/lib \\
\-lxenomai \-lpthread \-lrtdk \\
ex01.c \-o ex01
[Image 1]:
还没有评论,来说两句吧...