- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
RTP介绍和使用方法
PAGE 6
VxWorks操作系统RTP介绍和使用方法
从VxWorks 6.x开始引入 RTP(VxWorks real time process project)模式编程,这种模式的优点是应用程序相互独立,互不影响,而且增加了内核的稳定性,缺点是由于“内核态”与“用户态”的内存拷贝,其执行效率有所降低,随着CPU速度越来越快,这点效率的牺牲已经越来越不重要。相比较于传统的DKM(downloadable kernel module project),RTP适合多个团队独立运作,然后汇总联试,这种模式除了全局函数不能再shell里直接调用外,其对应用程序几乎不做任何约束,原有的DKM工程代码稍作修改即可正常运行。内核变化较大,需要添加较多的组件,内存需要较好的划分,为保持应用程序直接调用函数调试的习惯,需要封装接口供用户使用。
现简单的介绍RTP使用方法,并给出demo代码供参考。
1.新建并编译工程:
(1)File-new- VxWorks real time process project,如图【1】
图【1】
(2)一路next后,选择如图【2】所示的编译器
图【2】
(3)选择Finish后,工程新建完毕。
(4)导入源文件:这里的源文件名称是fooRtpApp.c,一种较快捷的方式是选中新建的工程,按下F5,源文件会出现在工程中.
(5)右键选择编译,出现如图【3】,选择Continue继续。
图【3】
编译完成后,会生成vxe格式的可执行文件,此处为usrAppA.vxe。
2. 下载可执行性文件
待板子启动后,使用ftp将vxe文件下载到板子中。步骤如下:
(1)运行-cmd,打开对话窗口,如图【4】所示:
图【4】
依次执行如下命令:
HYPERLINK ftp (该ip可在vxWorks启动后,输入命令ifconfig查看)
bi
cd /tffs0
put filename (完整的文件路径)
by
执行完上述命令后,即可把可执行程序下载到目标板上,如下图【5】:
图【5】
在串口终端中,输入ifconfig命令查看ip地址;依次输入如下命令查看刚下载到目标板的文件:
cd “/tffs0”
ls
上述操作结果如下图【6】所示:
图【6】
3.运行可执行文件
下载完成后,可以断电重启或者在调试串口中输入命令ctrl+x软重启电路板,待系统启动后应用程序自动运行。
4. 调试方法
(1)原有的DKM工程,.out文件被加载后其全局函数可以在shell里直接调用,对调试方便的很,但是RTP的实现机制决定了其中的函数不能被调用, 所以需要找到一种方法来实现,以达到安全、团队合作,而又方便调试。
函数原型:
n “file_name”,”fun_name”,arg1, arg2,arg3, arg4, arg5, arg6
假如usrAppA.vxe里有如下两全局函数:
void process_hello(int a,int b,int c);
void processB(void);
执行方法如下:
n usrAppA.vxe,process_hello,1,2,3
n usrAppA.vxe,processB
这种方式在UP(单核)、多核(SMP)模式下都是安全可用的。
(2)如果应用程序存在BUG而导致RTP程序被杀掉,如何能快速定位是哪出了问题?请注意,RTP模式优势来了,此时vxWorks还是活着的,可以输入命令edrShow查看所有的异常,能快速定位是哪一个任务出了问题。
(3)内核启动后,输入命令:aff_lrtp,即可手动执行应用程序。这种方式可以把RTP及其任务亲和到某一个核上,当然只是多核跑在SMP时有效,单核模式无所谓,因为只有一个核。
(4)查看任务
输入命令ri “filename”可查看该应用程序中任务状态,比如:
ri “usrAppA.vxe”
这种方式只查看针对本RTP的任务状态。
(5)杀掉RTP进程
delk “filename”
***************************Demo***************************************
(6)Demo 代码如下:
#include vxWorks.h
#include stdio.h
/*#include barLib.h*/
/*user function*/
void process_hello(int a,int b,int c)
{
int t1=a,t2=b,t3=c;
while(1)
{
printf (hello world,^^^^0x%x,0x%x,0x%x\n,t1,t2,t3);
taskDelay(30);
原创力文档


文档评论(0)