vxworks模拟器利用指南.docx
《vxworks模拟器利用指南.docx》由会员分享,可在线阅读,更多相关《vxworks模拟器利用指南.docx(13页珍藏版)》请在冰豆网上搜索。
![vxworks模拟器利用指南.docx](https://file1.bdocx.com/fileroot1/2023-6/12/c9bfcd07-83da-4073-8143-db4853ea8089/c9bfcd07-83da-4073-8143-db4853ea80891.gif)
vxworks模拟器利用指南
约定
文档中提到的途径,均相关于ROS5(M)目录而言。
1.编译模拟器
1.1.大体原理
为了节省时刻,模拟器不像设备那样编译一个完整的vxworks镜像文件,而是把系统和模块分开。
系统寄存在vxsim\vxWorks文件中,该文件由系统组负责保护。
模块那么编译在vxsim\文件中,那个文件由各自编译。
为了编译明白得,咱们能够和Windows系统做一个对照,vxworks文件相当于Windows系统,.out文件相当于一个exe文件。
咱们开发一个exe文件的时候,并非需要编译整个Windows系统。
因此咱们只需要编译出文件即可。
的编译进程如下:
1、编译vxsim目录下的所有.c文件,生成对应的.o文件
2、链接步骤1生成的.o文件和lib\gnu\vxworks\SIMNT、publib\gnu\vxworks\SIMNT目录下的所有.a文件。
若是两个目录有同名文件,那么利用lib目录下的。
1.2.编译
当前模拟器的编译再也不利用Workbench工程,完全利用批处置common\进行,该批处置应该用VxWorksDevelopmentShell运行,而不是cmd。
下面描述都假设是在common目录下。
从那能看出,编译需要编译vxsim目录下的.c文件和编译库文件(.a文件)。
其中要紧的工作是编译库文件。
1.2.1.库文件编译
编译一个库文件的方式是libname,其中libname指的是模块的名称,在module目录下应该有一个文件。
比如:
最终生成的库文件是寄存在lib\gnu\vxworks\SIMNT目录下,也即当前编译的库文件优先于publib的库文件。
一样而言,公共的库文件(rdvp/support/rcis/simssp)在publib目录下已经存在稳固的版本,不用另外编译。
各自只需要编译自己当前开发/调试的模块即可。
ROS5和ROS5M编译库文件略有不同。
ROS5M下的代码是全的,各个组件能够正常编译,比如需要编译命令行库文件,只需要运行cli即可。
其余各个组件的编译方式类似。
由于cli目录下存在大量的未组件化模块的命令行,编写不甚标准,在ROS5下是编译只是的(ROS5M能够编过),因此ROS5下应该利用publib下的cli库文件。
可是publib下的cli库文件并非包括正在开发的模块命令行,为了解决那个问题,可按如下步骤进行:
1、ROS5的cli库文件应该起一个新名称,比如qoscli。
只需要复制一份module下的文件,然后改个名即可,比如改成。
注意该文件不能受控。
2、在cli目录下增加一个文件,里面写一行ROSCFILES=,比如
,如此表示该目录(cli)下只编译那个文件,能够写多个,中间用空格隔开,大小写灵敏,比如ROSCFILES=
3、编译新增加的命令行库文件,比如
如此在lib目录下就会生成一个。
之因此要更名,是因为若是那个地址也用cli那个名称,依照优先原那么,publib下的将可不能被链接,致使其他模块的命令行链接不进来。
mib尽管在ROS5下也能编译通过,可是建议采纳和cli类似的处置方式。
1.2.2.编译.out文件
库文件编译好了以后,即可编译文件了,执行dev即可:
若是编译成功,那么在vxsim目录下会生成一个文件,那个确实是咱们用来调试的文件。
1.3.常见问题
编译问题那个地址再也不赘述,依照一样的编译问题定位方式即可,那个地址说模拟器比较典型的两个问题:
缺少概念和重复概念。
缺少概念也确实是咱们常见的“undefinedreferencetoxxxx”这种错误。
模拟器的编译是可不能报这种错误的,只有在运行的时候才会显现这种错误。
上面说了,此刻模拟器是分成了两部份,系统的vxworks文件和模块的文件。
编译文件的时候,若是某些变量找不到概念,会假定其在vxworks文件中,因此可不能报错只有等运行的时候才会报错。
重复概念,也确实是咱们常见的“multipledefinitionxxxx”这种错误,常见于组件开发进程,专门是那些未组件化的模块组件化的时候。
因为在中存在一份概念,然后新开发的模块中也有一份概念。
可是,正常情形下,即便有重复概念,若是模块的独立性没问题,那么也可不能显现重复概念的问题。
若是显现了那个问题,能够打开vxsim目录下的文件查看缘故。
里面列出了各个.o被引用的缘故。
正常情形下,由于lib目录优先,publib下的中的旧模块应该是可不能被引用的。
2.编写ssp
【本节临时作废,先别看】
和设备类似,模拟器也有自己的ssp,用于硬件的一些行为。
当前模拟器的ssp放在ROS5\ssp\vxsim_ssp目录下,ROS5M不做复制,仅做映射。
vxsim_ssp下有两个目录,一个src一个include,别离用于寄存源文件和头文件。
一样而言,每一个模块应该有两个源文件和一个头文件。
概念的规那么如下:
概念一个,名字和hwapi头文件的名称一样,比如有一个,那么概念一个用于寄存hwapi的7个(pvset,pvget,svget,svset,ssget,ssset,ssdel)函数(部份模块可能只有7个中的部份)。
然后再概念一个,用于寄存功能代码,xxx为模块的名称,取的前脸部份,比如那么对应的是,头文件叫,也放在src目录下。
当前已经实现了一些大体的hwapi,比如mac,vlan和port,可是还很不完整,专门是收发包模块的转发功能,后续会依照大伙儿的需求补全。
具体的ssp功能如何编写那个地址没方法说,毕竟各个模块不一样,简单的说,确实是要用软件来模拟硬件的功能。
3.成立远端系统
在Workbench的RemoteSystems窗口下成立远端系统【若是已经有远端系统且正确配置,这一步省略】,如以下图(若是找不到RemoteSystems那个窗口,请参考):
点击图中的红色方框内的按钮即可新建一个远端系统。
远端系统类型选“WindRiverVxWorksSimulatorConnection”,如以下图:
下一步,然后配置启动参数,如以下图:
那个地址需要配置两个参数,一个是选择镜像文件,请选择ROS5\vxsim\vxWorks。
另一个是“Processornumber”,那个相当于远端系统的编号。
每一个远端系统相当于一台设备,若是需要调试一些需要多设备联调的模块,就需要成立多个远端系统,各个远端系统之间的“Processornumber”不能重复。
下一步,配置内存选项,如以下图:
红色方框内的是内存大小选项,默许是32,需要修改成一个更大的值,推荐128,若是调试的是专门大的模块,建议改的更大,具体数值请依照各个模块的内存利用情形。
下一步,配置其他参数,如以下图:
那个地址要紧配置三个参数:
临时目录的途径,选择vxsim\wb目录;是vxsim的进程优先级,建议修改成“Normal”;其他选项,那个地址咱们要紧配置simnet接口。
以-ni开头,留一个空格,然后后面配置各个simnet接口的IP地址,各个simnet接口之间用分号隔开。
simnet接口的命名依照simnet+接口号的格式进行。
simnet接口介绍请参考。
至此,远端系统就算成立好了,上述的各个配置在成立好了以后也能够修改,修改的方式为右击一个远端系统,然后选择“Properties”。
4.成立调试配置
调试配置要紧需要以下情形:
选择远端系统
选择.out文件
配置入口函数
步骤如下:
菜单:
RunDebugConfigurations…
右击左侧窗口的VxWorksKernelTask,选择New:
在“LaunchContext”标签页下需要做几个配置:
1、选择远端系统;2、输入入口函数,ROS5统一为sysAppInit;3、Debug栏下的两个复选框选上。
在“Download”标签页下选择.out文件:
点击“Add”按钮,会弹出一个对话框,点击阅读按钮,选择对应的.out文件。
至此,调试配置成立完毕。
附录AWorkbench下打开某个窗口的方式
若是当前view下没有找到需要的窗口,能够选择菜单中的WindowShowView。
在弹出的下拉菜单里面有各类窗口,若是没有找到想要的,那么点击最下面的Other…,如以下图:
点击Other…以后会弹出一个ShowView的窗口,如以下图:
能够在typefiltertext框里面输入过滤字符串,即可找到想要的窗口。
附录Bsimnet简介
simnet用于模拟远端系统之间的网络连接。
若是两个simnet接口的IP地址网段相同,那么这两个接口确实是连通的,不管是同一个远端系统内仍是不同的远端系统之间。
比如远端系统A配置了simnet1=,远端系统B配置了simnet1=,远端系统C配置了simnet2=,那么A:
simnet1、B:
simnet1、C:
simnet2确实是连通的。
注意,simnet接口的IP地址不是随意配的,其网段是有限制的,具体请参考后面章节。
在ROS5里面,咱们用simnet来模拟端口,simnet0模拟SNMP口,simnet1-6模拟1-6口。
在上面的例子里面A的端口1,B的端口1,C的端口2是连通的,它们中任意一个发出的报文都能被另外两个收到。
上面说了,simnet的IP地址是有限制的,simnet可否互通依托于一个效劳,大伙儿打开自己的Windows效劳治理窗口,若是看到以下图红色框内的效劳,那么表示已经安装:
若是没看到那么需要安装该效劳,在vxworksshell下运行即可安装该效劳。
若是安装成功那么在Windows的效劳治理里面应该能看到该效劳。
停止该效劳,然后在启动参数里面输入:
-fxxxx,其中xxxx表示的是simentds的配置文件,格式在后面讲,如以下图:
,将启动类型修改成自动。
那个步骤只需要在安装了simnetds效劳以后执行一次即可。
配置文件格式如下:
SUBNET_STARTsub1{SUBNET_ADDRESS="";SUBNET_EXTERNAL=yes;SUBNET_EXTPROMISC=yes;};
SUBNET_STARTsub2{SUBNET_ADDRESS="";SUBNET_EXTERNAL=yes;SUBNET_EXTPROMISC=yes;};每一个子网配置包括三部份,能够配置多个子网。
关键看“SUBNET_ADDRESS”段,那个地址配置的是一个子网地址,最后一名是0。
上面说的simnet的IP地址是有限制的,意思是只能配置在在配置文件中概念了的子网地址,比如上面的配置文件中,simnet只能配置和网段的IP地址。
建议大伙儿依照需要来配置网段的数量,少了不够用,多了浪费内存(每一个网段约1M)。
附录C模拟器和实际设备联调
那个地址简单介绍一下若是将模拟器和实际设备连接起来。
那个地址需要用到虚拟网卡,在介绍虚拟网卡安装方式之前,先介绍一下拓扑:
桥接程序
网线
simnetds
实
际
设
备
物
理
网
卡
模
拟
器
虚
拟
网
卡
上面介绍了,模拟器能够配置simnet接口用来模拟物理端口,相同网段的simnet接口是互通的,若是虚拟网卡的IP地址网段也相同,那么simnet接口和虚拟网卡也是连通的。
因此,只要模拟器上有一个1-6之间的simnet接口的IP地址网段和虚拟网卡的相同,就意味着模拟器有一个“端口”连接到虚拟网卡上了。
开发了一个桥接程序(依托于wincap),能够将从一个网卡收上来的报文原样转发到另一个网卡,反过来也一样。
因此能够用桥接程序将虚拟网卡和一块物理网卡连接起来,然后物理网卡通过网线和设备相连,那么就相当于模拟器和实际设备相连了。
(当前的桥接程序的MAC表容量只有100,也即下挂的设备不能超过100台)。
上面说的虚拟网卡并非是Windows自带的虚拟网卡,而是WindRiver提供的虚拟网卡,安装步骤如下:
操纵面板添加硬件下一步是,我已经连接了此硬件下一步添加新的硬件设下一步安装我手动从列表选择的硬件下一步网络适配器下一步从磁盘安装选择“WindRiver\\host\x86-win32\bin\”下一步下一步完成。
虚拟网卡的IP不用配置,它会选择上面的simnetds的配置文件的第N个网段作为其IP网段,最后一名是254,N是这是你安装的第几块虚拟网卡的编号。