1. 概述
1.1. 介绍
本手册讲述的是VxWorks,VxWorks是Tornado开发系统的高性能实时操作系统。本手册包括以下内容:
l 在实时应用中怎样运用VxWorks。
l 怎样运用VxWorks的可选组件WIND基础类,VxMP,和VxVMI。
l 不使用工程怎样配置和编译VxWorks。
l 怎样运用VxWorks的Target驻留工具。
l VxWorks支持的所有体系结构的相关信息。
l Wind River System的C和C++编码规范。
在本章开始的地方列出了描述如何在Tornado开发系统中安装和启动VxWorks的章节。然后概述了在实时应用的开发中VxWorks的作用,VxWorks的功能,Wind River System的客户服务,以及本章的书写约定。
1.2. 初识Tornado开发系统
以下章节提供了关于安装和配置Tornado开发系统(包括VxWorks)的帮助信息。配置信息取决于你使用得开发主机是Windows还是Unix;因而“Tornado用户指导”是平台相关的。
(省略)
1.3. VxWorks:实时应用开发的助手
Unix和Windows都是很好的应用开发和交互式应用的操作系统平台,然而他们不适合于实时应用。另一方面,过去的实时操作系统都没有为应用开发和应用的非实时组件(譬如向GUI)提供很好的运行环境。
Wind River哲学是利用两个相互协作的操作系统来互相补充对方的不足(譬如VxWorks和Windows 或 VxWorks和Unix),让他们各尽所长。VxWorks为应用提供实时性,而主机被用来进行应用开发和运行非实时的应用程序。
VxWorks是可以裁剪的,你可以将VxWorks裁剪为只包含你的应用所需要的部件。在开发期间为了方便你的开发,你可以加入网络部件,当发行最终版本时为了节约资源你可以轻松的去掉网络部件。
你可以利用交叉开发的主机来编辑,编译,连接,存储实时应用的执行代码,然后在VxWorks上运行和调试实时应用。最终的VxWorks应用可以独立运行(从ROM或磁盘),不再需要网络或主机。
当然,在混合应用中主机和VxWorks可以一起工作,主机利用VxWorks作为网络环境中的实时服务器。例如,VxWorks系统控制机器人,而它本身被运行在主机上的专家系统控制,
或几个VxWorks系统控制制造设备,而它本身被连向主机,利用主机来跟踪存货清单或产生报表。
1.4. VxWorks部件总览
本小节概述了VxWorks部件,我们将在后面的章节对各部件进行详细描述。对各部件的详细细节,请参照相关的章节。
l 高性能实时核心部件
VxWorks的核心,wind,包含了基于优先级调度的抢占式多任务,任务间的同步机制,通信机制,中断处理,定时器,和内存管理。
l POSIX兼容性部件
VxWorks提供了1003.1b标准规定的大部分接口
。
l I/O系统
字符串函数库下载VxWorks提供了快速灵活的Ansi-C兼容I/O系统,包括Unix标准的缓冲I/O和POSIX标准的异步I/O。VxWorks包含了下面列出的驱动:
网络驱动 &nb
l 支持C++开发
除了支持通常的C++ 开发库外(包括I/O流开发库和C++模板类库),作为可选组件的WIND基础类库提供了VxWorks包装类库和来自Rogue Wave的Tools.h++类库。
l 共享内存对象
VxMP选项提供的内存共享机制包括共享信号量,消息队列,在不同处理器上的任务间共享的内存区域。
l 虚拟内存(包含VxVMI选项)
VxWorks既提供了捆扎的虚拟内存支持,对自带内存管理单元的板也可提供非捆扎的虚拟内存支持。具有使部分内存不可缓冲和只读的功能,以及虚拟内存管理的函数集。
l 运行在目标机上的工具
在Tornado开发系统中,开发工具运行在主机上,参见Tornado用户指导。然而,运行在目标机上的工具,模块上载,模块下载,符号表等都可以配置到VxWorks的核中。
l 帮助函数库
VxWorks提供了功能丰富的帮助函数集,包含中断处理,定时器,消息纪录,内存分配,格式化字符串,输入字符串,线性和环形缓冲区的操作,链表和ANSI-C函数库。
l 性能统计工具
VxWorks性能统计工具包括定时执行一些函数来统计任务的CPU利用率。
l 目标机代理
目标机代理使得Tornado开发工具远程调试VxWorks应用成为可能。
l 板支持包
VxWorks包含很多种板的板支持包。板支持包提供硬件初始化,中断安装,定时器,内存映射等函数
l VxWorks模拟器和逻辑分析仪
Tornado附带了所有主机平台上的VxWorks模拟器和逻辑分析软件,VxSim模拟VxWorks目标机,用来做原型开发和搭建测试环境。WindView为模拟环境提供了先进的调试工具。
VxSim提供了网络支持和运行多个模拟器的能力。WindView为所有WRS的板支持包提供了软件逻辑分析仪
l 网络工具
VxWorks提供了对另外一个VxWorks的透明的存取机制和TCP/IP网络系统,MUX接口(包括多点传送,polled-mode以太网,zero-copy传输),BSD兼容的socket编程接口,远程过程调用(RPC),SNMP(可选),网络文件存取(包括NFS的客户端和NFC服务器,以及其它的网络文件存取工具例如RSH, FTP, 或且TFTP),BOOTP,ARP代理,
1.1. POSIX接口
POSIX(可移植操作系统接口)是ISO/IEEE下的软件团体代表开发的标准。该标准的目的是实现多操作系统应用的源代码级移植。现下为实时操作系统提供的服务定义了一套接口(POSIX标准1003.1b,以前称作1003.4)。利用这些接口编程就会使应用从一个操作系统轻松的移植到另外一个操作系统上。
POSIX接口包括:
m 异步I/O
m 信号量
m 消息对列
m 内存管理
m 信号
m 调度
m 时钟
1.2. I/O系统
VxWorks的I/O系统对多种输入输出设备提供统一的存取机制。既可以调用基本的I/O函数:creat(),remove(),open(),close( ),read(),write(),和ioctl();也可以调用高层I/O函数,譬如printf(),scanf()。
VxWorks也提供了缓冲输入输出函数包(stdio),包含ANSI-C兼容函数,譬如fopen(),fclose(),fread(),fwrite(),getc()和putc()。在许多情况下,这些函数提高了输入输出的性能。
VxWorks的I/O系统也包含了POSIX兼容的异步输入输出:输入输出和任务的其它动作同时进行的函数库。
VxWorks包含下面设备的驱动程序:串行通信,磁盘,RAM磁盘,SCSI磁带,用于任务间通信的管道设备,以及网络设备。如果有必要的话,应用开发者还可以轻松的编写其它设备的驱动程序,加入VxWorks中。
VxWorks的I/O系统允许驱动程序完全控制如何执行用户请求的服务。驱动程序可以方便的实现不同的协议,唯一的设备特定的函数,甚至不同的文件系统,与输入输出系统毫无干涉。VxWorks提供了一些高层包可以让驱动程序方便的实现公共的设备协议和文件系统。
1.3. 本地文件系统
VxWorks包含几个本地文件系统来使用块设备(磁盘)。这些设备使用标准的接口以至可以方便的挂接在文件系统上。本地文件系统包含了SCSI磁带文件系统和CD-ROM文件系统。VxWorks的输入输出架构使得VxWorks系统可以同时具有多个不同的文件系统。
1.3.1. MS-DOS兼容文件系统
VxWorks提供dosFs文件系统,兼容MS-DOS文件系统。DosFs为了适应实时应用的各种需求提供了相当的弹性。主要特性如下:
m 树状的文件目录结构,允许在一卷上创建任意多个文件。
m 可以指定文件的连续存储,连续存储的文件可以提高性能,而非连续存储的文件可以充分利用磁盘空间。
m 与现在广泛使用的存取媒介兼容,在dosFs文件系统下创建的磁盘可以与用MS-DOS个人计算机创建的磁盘交互使用。MS-DOS下的硬盘可以被正确配置的dosFs文件系统识别。
m 文件名区分大小写,并且文件名的长度不受限制(MS-DOS文件系统下文件名长度约定为8字符+文件扩展名)。
dosFs为面向文件的设备驱动程序提供的服务在dosFsLib里实现。
1.3.2. RT-11兼容文件系统rt11Fs
rt11Fs文件系统兼容于RT-11操作系统。该文件系统一直被实时应用使用,因为该文件系统下的所有文件都是连续存储的。但是它缺少树状文件组织结构,树状文件组织结构对大容量磁盘是特别有用的。同时,呆板
的连续存储空间分配会导致大量的磁盘碎片。所以,dosFs要优于rt11Fs。
VxWorks实现的rt11Fs文件系统可以对所有文件利用字节寻址进行随机存取。每一个打开的文件都有一块缓冲内存来优化对文件的读写。
rt11Fs为面向文件的设备驱动程序提供的服务在rt11FsLib里实现。
1.3.3. 裸碟文件系统
VxWorks提供简单的裸碟文件系统rawFs。rawFs将整个磁盘当作一个大文件。通过指定字节偏移rawFs可以读写磁盘的某一部分,并且做简单的缓冲。当仅需要简单,低级的磁盘输入输出操作时,rawFs有空间和速度的优势。
rawFs为面向文件的设备驱动程序提供的服务在rawFsLib里实现。
1.3.4. SCSC顺序文件系统:tapFs
VxWorks为不使用标准文件和目录结构的磁带设备提供tapFs文件系统。磁带象裸碟一样被看成是一个大文件。上层负责组织这个大文件里的数据。
tapFs为面向文件的设备驱动程序提供的服务在tapFsLib里实现。
1.3.5. CDROM文件系统
VxWorks为了让应用读写按照ISO9660文件系统标准格式化的CDROM设备提供了cdRomFs。初始化cdRomFs文件系统后,挂接cdRomFs到一个CDROM设备,就可以用POSIX标准的I/O调用来读CDROM。
1.3.6. 可替换的文件系统
在VxWorks下,文件系统不紧系于特定的设备或设备驱动。设备可以挂接到任意文件系统。你可以按照介于文件系统,驱动程序,VxWorks的输入输出系统之间的接口标准提供你自己的文件系统来使用标准设备。
1.4. 虚拟内存
VxWorks对有内存管理单元的板提供虚拟内存支持。绑定的虚拟内存支持能够使部分内存不缓冲,这在多处理器之间共享内存或使用DMA传输是非常有用的。
非绑定的虚拟内存支持是可选组件VxVMI提供的。VxVMI可以让应用创建文本段和可读的异常向量表,并且包含一套函数让用户来管理自己的虚拟内存场景。
1.5. 共享内存对象
下面的共享内存对象(可选组件VxMP提供)是用来在不同处理器上的任务间进行通信和同步用的。
l 共享信号量是用来同步不同处理器上任务的,同时也可以用作它们对共享数据结构的互斥访问。
l 共享消息对列是用来在不同处理器上任务之间传递消息。
l 共享内存管理是用来为不同处理器上的任务分配公共的内存空间。
1.6. 运行在目标机上的工具程序
在Tornado开发系统中,在主机上安装和执行整套的开发工具,详情参见Tornado用户指导。并且目标机上运行的外壳程序,符号表,模块上下载工具也可被配置入VxWorks系统中,例如创建动态配置的VxWorks运行系统。
1.7. C++开发支持
VxWorks支持C++开发,Tornado随带GNU的C++编译
器。Tornado编译器提供可重入的异常处理。Tornado包含一新版的iostream库和SGI实现的标准模板库。Tornado的交互式开发工具调试器,外壳,和渐增模块加载工具都包含了对C++的支持。
而且你可以选购组件WIND基础类。WIND基础类包含下面的C++库。
VxWorks包装类
Rogue Wave的Tool.h++库
1.8. 工具库
VxWorks为应用开发者提供了常用用途的子函数。这些函数被组织为如下所描述的子函数库。我们希望你在开发过程中尽可能利用这些子函数。利用这些函数库既可以减少开发时间又可以减少应用的内存需求。
1.9. 中断处理支持
VxWorks提供处理硬件中断和软件陷阱的函数,不一定需要求助于汇编语言。VxWorks里有连接C函数到硬件中断向量和操纵处理器中断级别的函数。
1.10. 看门狗定时器
定时器可以让用户在指定时间间隔后重复执行自定义的C函数。当指定时间间隔过去后,超时函数在系统时钟的中断级被调用直到定时器被取消。定时器机制完全不同于内核的时延机制。
1.11. 消息LOG
VxWorks提供了简单消息LOG机制,可以让应用发送错误和状态消息到一专门LOG的任务,这一任务将该消息格式化并输出到系统里的LOG设备(譬如向系统控制台,磁盘,内存)。消息LOG机制可以在任务级或中断级使用。
1.12. 内存分配
VxWorks提供内存管理机制。内存动态分配,释放,在内存池重新分配一块内存。内存管理方案是一十分通用的方案,允许VxWorks管理多个独立的内存池。
1.13. 字符串格式化和扫描
VxWorks包含完整的字符串格式化和扫描的ANSI-C函数集。实现prinf()/scanf()基于格式化的编解码以及相关联的函数。
1.14. 线性和环形缓冲操作
bLib库包含象拷贝,填充,比较等的缓冲操作函数,这些函数在执行速度上都得到了优化。ringLib库包含常用的管理先进先出环形缓冲的函数,而且可以让一个读内存的任务和一个写内存的任务“同时”访问内存而不需要互锁内存访问权限。
1.15. 链表操作
lstLib库包含创建和所有操作双链表的函数。
1.16. ANSI C库
VxWorks提供ANSI X3.159-1989标准规定的所有C库。ANSI C定义了如下的库:assert, ctype, errno, float, limits, locale, math, setjmp, signal, stdarg, stdio, stddef, stdlib, string, 和 time.
头文件float.h, limits.h, errno.h, 和 stddef.h给出了ANSI C规定的申明和定义。下面列出了常用的库:
ansiCtype 字符操作的函数库。
ansiMath 三角函数,指数函数,对数函数。
ansiSetjmp 实现远程转移的函数库。
ansiStdarg 遍历不定长参数列表。
ansiStdio 输入输出流操作函数。
ansiStdlib 包括很多类型的函数,象类型转换,内存
分配,和随机数产生函数。
sigLib 信号操作函数。
1.17. 性能估计
对VxWorks或应用的函数进行计时对了解和优化实时系统的性能是非常有用的。VxWorks提供了很多计时机制来帮助估计实时系统的性能。
VxWorks计时器可以对任何函数获一组函数的执行进行计时。因为系统时钟中断太缓慢而不能为快速执行的函数提供必须的时间精度。可以对一组函数进行多次重复计时直到一次的执行时间在合理的精度范围内。关于执行计时,详情参见timexLib.
VxWorks提供了spy工具。Spy工具可以提供每个任务的CPU
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论