编写LXRTRTAILXRT用户空间程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编写LXRT(RTAI-LXRT)用户空间程序 Asad Chan 2011-06-28 此文档仅为那些刚涉猎RTAI Linux的爱好者编写。在用户空间下编写RTAI-LXRT程序并不是一件困难的事,可以参考《DIAPM RTAI Programming Guide 1.0》和《How to port your C++ GNU/Linux application to RTAI/LXRT》。而这两个文档却没有一个完整在用户空间能执行的例子,所以往往会造成看了遇到问题不知问题出在哪里。往往有的程序编写好了,也编译好了,在控制台下执行却出现了segmentation fault字样。 RTAI Linux 调度器(请参考RTAI 3.3 User Manual rev0.2) RTAI分别在内核空间和用户空间提供了两个对等的任务调度器,一个为rtai_sched,一个为rtai_lxrt,这两个调度器主要是他们所能调度的可调度任务有所差异,而这两个调度器都能调度用户空间和内核空间的任务。rtai_sched能调度Linux下的各种任务,例如process,thread,kthread,而同时它还能调度RTAI 内核空间任务(请区分Linux内核和 RTAI 内核)。需要手动指定其静态库,可见“-llxrt” “-lpthread”两项,其中“-llxrt”实为liblxrt.a的缩写,此实为GNU连接器的使用规则,由此可知“-lpthread”即为libpthread.a的缩写。 “$()”符号用于对定义的宏进行解析,例如“$(CC)”在上面的例子中等价为“gcc”,“$(SOURCE)”等价为“main.c”,其他各项亦按此种形式解析。 3、编译main.c文件 假设你的main.c、Makefile两个文件放在绝对路径/usr/root/workspace/main目录里,那么在控制台下进入到此目录,执行以下命令即可: make ↙ 注:“↙”为回车的意思。 此时控制台上会显示“gcc main.c -I/usr/realtime/include -o main -L/usr/realtime/lib -llxrt -lpthread 首先要切换到目录/usr/realtime/modules下,也即如下命令: cd /usr/realtime/modules ↙ 继续执行以下命令: insmod rtai_hal.ko ↙ insmod rtai_sched.ko ↙ 实时性功能,则毫无疑问需要包含rtai_lxrt.h,请记得rtai_lxrt.h在/usr/realtime/include(假设是按照RTAI安装的默认路径)目录里,因此需要在编译选项里指定这一路径,否则将不能找到此头文件。头文件包含如下所示: #include stdio.h #include stdlib.h #include signal.h #include rtai_lxrt.h 2、RT_TASK指针 可以看到在程序的开头声明了指针task,可以知道它为RT_TASK结构体指针,此结构体指针用于指向需要设置为实时性的任务,需要这个指针的原因是当在程序中将一个process(本文档例子中即为main Process)/pthread/kthread向RTAI内核注册后,task将指向此prcess/pthread/kthread,在随后的过程中还需要设置task指向的任务的一些属性,比如该任务的周期等属性,那么需要使用task作为设置该任务设置的链接口,并且在程序结束时还要通过它来从RTAI内核中删除任务。 可以看到main函数里的task=rt_task_init_schmod(nam2num(TEST),0,0,0,SCHED_FIFO,0x0f)。此过程将main进程注册进RTAI内核,并成为软实时任务。 第一个参数为任务号,我们看到nam2num(“TEST”),此调用的目的是向RTAI申请一个名为“TEST”的任务号,其返回值即为该任务号。 第二个参数为该任务的优先级,这里设置为0,即为最高优先级。 第三个参数为任务的栈大小,如果给0,将会使用默认的512(单位未知)。 第四个参数为任务的消息邮箱缓冲大小,如果为0,则默认大小为256(单位未知)。 第五个参数为Linux任务的优先级设置。(下文会有解释) 第六个参数为处理器掩码,类如为0x01时选用处理器0,为0x02时选用处理器1,为0x03时为处理器0和1。

文档评论(0)

187****5045 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档