VxWorks操作系统RTP介绍和使用方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VxWorks 操作系统RTP 介绍和使用方法

从VxWorks 6.x开始引入RTP(VxWorks real time process projec模t) 式编程,这种模式的优点是应用程序相互独立,互不影响,而且增加了内核的稳定性,缺点是由于“内核态”与“用户态”的内存拷贝,其执行效率有所降低,随着CPU 速度越来越快,这点效率的牺牲已经越来越不重要。相比较于传统的DKM (downloadable kernel module project ),RTP适合多个团队独立运作,然后汇总

联试,这种模式除了全局函数不能再shell 里直接调用外,其对应用程序几乎不

做任何约束,原有的DKM 工程代码稍作修改即可正常运行。内核变化较大,需

要添加较多的组件,内存需要较好的划分,为保持应用程序直接调用函数调试的

习惯,需要封装接口供用户使用。

现简单的介绍RTP使用方法,并给出demo 代码供参考。

1. 新建并编译工程:

(1) File->new-> VxWorks real time process projec如t, 图【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】

依次执行如下命令:

(a) ftp 192.168.0.2 (该ip 可在vxWorks启动后,输入命令ifconfig 查看)

(b) bi

(c) cd /tffs0

(d) put filename (完整的文件路径)

(e) by

执行完上述命令后,即可把可执行程序下载到目标板上,如下图【5】:

图【5】

在串口终端中,输入ifconfig 命令查看ip 地址;依次输入如下命令查看刚下载到目标板的文件:

(a) cd “/tffs0 ”

(b) ls

上述操作结果如下图【6】所示:

图【6】

3. 运行可执行文件

下载完成后,可以断电重启或者在调试串口中输入命令ctrl+x 软重启电路板,待系统启动后应用程序自动运行。

4. 调试方法

(1 )原有的DKM 工程,.out 文件被加载后其全局函数可以在shell 里直接调

用,对调试方便的很,但是RTP的实现机制决定了其中的函数不能被调

用,所以需要找到一种方法来实现,以达到安全、团队合作,而又方便

调试。

函数原型:

n “file_name ”, ”fun_name a”rg2,a,a rg rg13, , 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))D emo 代码如下:

#include

#include

/*#include */

/*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);

}

}

void processB(void)

{

printf ("hello world\n");

}

int main

(

)

int argc, /* number of arguments */

char * argv[], /* array of arguments */

char * envp[], /* array of environment strings */

void * auxp /* implementation-specific auxiliary vector */

{

taskSpawn ( "hello" ,150,0,0x60000,process_hello,0,1,2,3,4,5,6,7,8,9);

taskSuspend (0); /* stop again to keep RTP alive */

return 0;

}

************************end*******************************

相关文档
最新文档