- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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。
您可能关注的文档
最近下载
- 2025年专业工具通达信软件操作详解教材 .pdf VIP
- 沉降观测方案.docx VIP
- 《土地管理法》考试题库(含答案).docx VIP
- P12 更多的资料请参阅《2010学年上中CPS活动手册 上海中学.docx VIP
- 从肝论治2型糖尿病课件.doc VIP
- 于志强教授从肝论治糖尿病经验.docx VIP
- 2021届北京市海淀高三语文一模阅读部分讲评 课件(150张PPT).pptx
- 背负式风力灭火机的操作与使用 .ppt VIP
- 苏州七年级月考试卷及答案.doc VIP
- 山东科学技术版劳动实践指导手册三年级第11课公益劳动与志愿服务校园公益劳动清洁美化校园我行动 教案.docx VIP
文档评论(0)