实时控制软件系统设计第三周作业-杨静梧
VxWorks实时操作系统性能分析
VxWorks实时多任务的嵌入式操作系统,它主要包括任务调度、I/O功能、文件系统、中断管理、内存管理、网络功能、内存管理、BSP(系统启动模块)等。它的多任务的实现是由中断驱动的,即在每个系统时钟中断中,实现任务的调度。VxWorks中的任务有优先级的概念。与其它嵌入式操作系统相比,它有如下优点:
-任务之间的切换快,任务间通信手段多样
VxWorks的任务有优先级的概念,其任务调度也是基于优先级考虑的,是抢占式的,VxWorks的任务有256个等级,0—255,其调度算法有两种:完全抢占式的和循环分配式的。VxWorks为任务间的通信和同步提供了丰富的手段,包括信号量、消息队列、管道、信号等。
-中断响应的延时短
VxWorks的中断延时短,可以满足实时的要求,而用户可以用C语言编写中断服务程序,而无需掌握汇编。需要注意的是,用户中断函数所使用的栈和应用任务的栈并不相同,而是由用户指定的另外一段空间,这样在一定程度上保证了系统的安全性。
-内存管理安全
VxWorks把内存分成很多区域,包括内核区、用户区,并且采用虚拟内存管理的方法,这样大大提高了系统的安全性,并且增加了堆栈溢出的判断。VxWorks中有虚拟内存的概念,内存是分页管理的。即用户所操作的内存地址实际上是虚存,实际物理内存对于用户而言是不可见的。 在VxWorks中,内存被分成许多域,有内核域、应用域。内核域用来执行操作系统内核代码和存放操作系统内核数据(如信号量、任务控制结构等),应用域用来 执行用户任务代码和存放用户任务数据。各个域之间的数据是不可见的,每个应用域都有自己的堆和栈,而且都有内核域在本域中的映像。
-I/O功能丰富,硬件驱动全面
VxWorks提供了丰富的I/O功能(包括低层硬件驱动)供使用,包括:硬盘驱动,键盘驱动,网卡驱动,显卡驱动,软盘驱动和并行口驱动等。并且驱动程序还可以由开发者自己动态添加、删除而不用重新启动系统。用户可调用iosDrvInstall()函数来添加自己的硬件驱动,从而系统在操作相应设备时,会调用用户的驱动来实现。
-文件系统强大
VxWorks提供了强大的本几文件系统供使用。提供了与MS-DOS兼容的FAT32文件系统,另外还提供支持硬盘、CD-ROM、磁带设备和FLASH的文件系统,并且在一个VxWorks系统中,允许多个文件系统同时存在。另外VxWorks提供的TrueFFS文件系统,是支持FLASH设备的;VxWorks提供的TSFS文件系统,是支持 网络功能的,它可以用来实现和Tornado服务器程序通信,从而在服务器上存取本机文件。
-网络功能全面
VxWorks的网络功能也是很强大的,它提供的网络驱动接口MUX,运行在IP层和数据链路层之间,从而用户可以在MUX中加进自己的协议,并且用户还可以增加自己的网络驱动。
-对任务的实时监控
VxWorks提供了对系统的实时监控(Spy)功能,它可以提供每个任务运行所耗时间信息、系统所花在中断上的时间信息以及CPU的空闲时间等,其单位是时钟周期,并可以以百分比的形式显示。更强大的监视工具(仿真器)是WindView,用于程序调试。这样可以帮助用户分析各个任务以及中断的执行状态是否正常。
-BSP(启动模块)的支持
BSP模块主要用于系统的初始化,包括硬件的初始化、加载系统库并加载应用程序从而运行整个系统等,它可以被掩膜到ROM中,从而不会被修改。
-多CPU的支持
VxWorks的一个特点就是对于多CPU有较好的支持,运行在多个CPU上的任务可以通信,这是由VxMP模块实现的,采用共享信号量和共享消息队列以及共享内存管理的方法。采用共享信号量可以同步不同CPU上的多个任务,就像在本机上使用一样。采用共享消息队列可以让在不同CPU上的任务之间交换数据。采用共享内存可以让在不 同CPU上的任务之间共享数据。
-系统各模块是单独的库,可以根据需要加载
VxWorks强大的灵活性体现在它的各个功能模块都是单独的库,可以根据需要在运行时动态加载。比如任务管理库是taskLib,信号量库是semLib,中断管理库是sysLib和intLib,网络库是sockLib,I/O库是ioLib等,这些库可以根据需要在运行时动态加载、卸载,从而增强的系统的灵活性,节省了系统空间。
-专门的集成开发环境
WindRiver公司随VxWorks操作系统提供了配套的Tornado集成开发环境,Tornado开发环境具有使用方便、功能全面的优点。另外,tornado仿真器提供了强大的调试功能,可用来调试VxWorks的程序。它提供了网卡、串口或者PIPE(管道)来下载程序到目标板上调试。
参考:http://www.360doc.com/content/15/0305/11/9561082_452698594.shtml
团队项目思考
-感兴趣的任务
对于各个功能模块,个人觉得对轨迹插补任务比较感兴趣。就目前自己的理解就是首先接收到相关G指令之后,对G代码进行解码,然后根据解码结果,控制脉冲输出转换成电机的转速以及位移等物理量。其中主要的任务应该分两块儿,第一个就是G代码的解码模块,第二个应该是运动物理量计算的运动控制模块。
-团队开发理解
我认为团队协作开发主要有几个要注意的地方:(1)工作的分工首先要根据个人的兴趣,特长来开展。让擅长文字管理的人来管理文档资料,擅于编程的人来管理代码等等。(2)团队协作开发要进行不同方面的管理,比如代码管理,进度管理等。对于代码管理,比如我们先在github上创建issue,然后创建不同的分支,每个人进行代码的编写测试的同时要形成工作日志,也就是说个人工作的透明化,每个人都能够看见其他人的工作,这样一方面能够控制各个分支的进度保持一致,同时也能够及时让别人帮助发现问题。
-团队任务角色
如果我在一个控制软件设计团队里面,我个人比较倾向一是算法的设计,二是文档的写作的工作。倾向算法设计主要是自己对这方面相对比较感兴趣;倾向文档写作主要是我认为自己在这方面有一些经验。