E002_Vxworks
VxWorks使用说明书
VxWorks使用说明书1、概述VxWorks操作系统的集成环境叫Tornado。
T ornado集成环境提供了高效明晰的图形化的实时应用开发平台,它包括一套完整的面向嵌入式系统的开发和调测工具。
Tornado环境采用主机-目标机交叉开发模型,应用程序在主机的Windows环境下编译链接生成可执行文件,下载到目标机,通过主机上的目标服务器(T arget Server)与目标机上的目标代理(Target Agent)的通信完成对应用程序的调试、分析。
它主要由以下几部分组成:VxWorks高性能的实时操作系统;* 应用编译工具;* 交互开发工具;下面对T ornado集成环境的各组件功能分别介绍:* Tornado开发环境Tornado是集成了编辑器、编译器、调试器于一体的高度集成的窗口环境,同样也可以从Shell窗口下发命令和浏览。
* WindConfig:T ornado系统配置通过WindConfig可选择需要的组件组成VxWorks实时环境,并生成板级支持包BSP的配置。
通过修改config.h可以实现WindConfig的所有功能,并且,可以实现WindConfig不能实现的功能。
* WindSh:Tornado外壳WindSh是一个驻留在主机内的C语言解释器,通过它可运行下载到目标机上的所有函数,包括VxWorks和应用函数。
Tornado外壳还能解释常规的工具命令语言TCL。
WindSh不仅可以解释几乎所有的C语言表达式,而且可以实现所有的调试功能。
它主要有以下调试功能:下载软件模块;删除软件模块;产生任务;删除任务;设置断点;删除断点;运行、单步、继续执行程序;查看内存、寄存器、变量;修改内存、寄存器、变量;查看任务列表、内存使用情况、CPU利用率;查看特定的对象(任务、信号量、消息队列、内存分区、类);复位目标机。
* 浏览器Tornado浏览器可查看内存分配情况、任务列表、CPU利用率、系统目标(如任务、消息队列、信号量等)。
VxWorks操作系统基础(适合初学者阅读)2024新版
系统库(System Library)
提供一系列操作系统服务,如文件操作、网络协议栈等。
驱动程序(Device Drivers)
与硬件设备交互,实现对硬件设备的控制和管理。
内核组成及作用
内核组成及作用
01
内核的主要作用包括
02 管理系统资源,如CPU、内存、I/O设备等 。
06
VxWorks文件系统操作指南
文件系统类型及特点介绍
RAM-based File System
基于RAM的文件系统,读写速度快,但数据在 关机后丢失。
TrueFFS
Wind River特有的闪存文件系统,提供磨损均 衡和掉电保护功能。
ABCD
DOS File System (dosFs)
兼容MS-DOS的文件系统,支持FAT12、FAT16 和FAT32格式。
01
VxWorks操作系统概述
VxWorks操作系统定义
VxWorks是一款由美国风河公司( Wind River)开发的嵌入式实时操 作系统(RTOS),专为需要实时响 应和高可靠性的应用而设计。
VxWorks提供了丰富的中间件和开发 工具,支持多种处理器架构和硬件平 台,广泛应用于航空、航天、通信、 医疗、工业自动化等领域。
在ISR中处理完中断事件后, 需要及时清除中断标志,避 免重复处理。
中断优先级设置和嵌套处理
01
VxWorks支持多级中断优先级,高优先级的中断可以打断低优先 级的中断处理。
02
中断优先级可以通过配置文件或动态调整进行设置,以满 足不同应用场景的需求。
03
在处理中断时,如果发生更高优先级的中断请求, VxWorks会自动保存当前中断的上下文信息,并跳转到更 高优先级的中断处理程序中。处理完成后,再恢复之前中 断的上下文信息并继续执行。这种机制称为中断嵌套处理 。
vxworks 使用案例
vxworks 使用案例VxWorks是一款实时操作系统(RTOS),广泛应用于嵌入式系统、工业控制、航空航天、军事等领域。
以下是一些VxWorks的典型使用案例:1. 嵌入式设备:VxWorks可用于各种嵌入式设备,如智能家居、无人驾驶汽车、工业机器人等。
在这些设备中,VxWorks可以提供实时性能、低功耗和紧凑的系统资源占用。
2. 航空航天:VxWorks在航空航天领域有着广泛应用,如飞行控制系统、卫星通信系统、航空电子设备等。
在这些系统中,VxWorks需要具备高可靠性、实时性和强大的内存管理能力。
3. 军事系统:VxWorks在军事领域也有广泛应用,如导弹控制系统、雷达系统、指挥控制系统等。
在这些系统中,VxWorks需要满足严格的性能、安全性和可靠性要求。
4. 工业控制:VxWorks可用于各种工业控制系统,如生产线自动化、智能仪表、传感器等。
在这些系统中,VxWorks可以提供实时性能、稳定性和易于扩展的特性。
5. 医疗设备:VxWorks在医疗设备中有广泛应用,如超声波设备、心电监测设备、手术机器人等。
在这些设备中,VxWorks需要具备高可靠性、实时性和良好的兼容性。
6. 通信设备:VxWorks可用于通信设备,如交换机、路由器、基站的控制系统等。
在这些设备中,VxWorks需要提供高性能、低功耗和稳定的系统运行。
7. 汽车电子:VxWorks在汽车电子领域也有广泛应用,如发动机控制系统、刹车控制系统、车载信息娱乐系统等。
在这些系统中,VxWorks 需要满足功能安全、实时性和低功耗的要求。
总之,VxWorks作为一款实时操作系统,在众多领域发挥着重要作用。
其高性能、实时性、可靠性和易用性使得它成为许多嵌入式系统和实时控制应用的首选操作系统。
vxworks使用过程中的100个疑问与解答
vxworks使用过程中的100个疑问与解答1. VxWorks是什么?VxWorks是一种实时操作系统(RTOS),由美国Wind River公司开发,适用于嵌入式系统。
2. VxWorks有哪些特点?VxWorks具有高度可靠性、实时性、可移植性和可扩展性等特点。
3.如何安装VxWorks?安装VxWorks需要下载安装包,然后按照安装指南进行安装。
4.如何创建VxWorks任务?可以使用taskSpawn函数来创建任务,指定任务的入口函数、优先级等参数。
5. VxWorks如何进行任务间通信?任务间可以使用消息队列、信号量、共享内存等机制进行通信。
6.如何调试VxWorks程序?可以使用Wind River公司的调试工具Wind River Workbench进行调试。
7. VxWorks支持哪些开发语言?VxWorks主要支持C和C++开发,也可以使用汇编语言和Java等。
8.如何加载和运行VxWorks程序?VxWorks程序可以通过TFTP、FTP等网络协议加载到目标设备上,然后使用命令运行。
9. VxWorks是否支持多任务?是的,VxWorks支持多个任务的同时运行,并通过任务调度器进行任务切换。
10.如何实现任务间的同步?可以使用信号量、事件标志等机制实现任务间的同步。
11. VxWorks中如何实现中断处理?VxWorks提供了中断服务例程(ISR)和处理器驱动程序(DPC)来处理中断。
12.如何列出VxWorks系统中的任务?可使用taskShow命令列出系统中所有任务的详细信息。
13.如何获取任务的优先级?可以使用taskPriorityGet命令获取任务的优先级。
14.如何设置任务的优先级?可以使用taskPrioritySet命令设置任务的优先级。
15.如何控制任务的时间片轮转?可以使用taskDelay命令来控制任务的时间片轮转。
16.如何查看VxWorks系统的中断信息?可以使用intShow命令来查看系统中的中断信息。
vxWorks学习笔记
vxWorks学习笔记vxWorks学习笔记2006-07-20 11:141.VxWorks开发方式:交叉开发,即将开发分为主机(host)和目标机(target)两部分。
类似于dos下C语言程序的开发。
合并开发的优点:简单缺点:资源消耗量大,CPU支持,非标准体系的支持host (Tornado) target(vxWork) 小程序模块vxWorks实际采用开发模式Tornado提供:编辑,编译,调试,性能分析工具,是vxWorks 的开发工具vxWorks:面向对象可以剪裁的实际运行操作系统2.vxWorks启动方式<1>Rom方式 (vxWork_rom)vxWorks直接烧入rom<2>Rom引导方式(bootrom+vxWorks)其中bootrom烧入rom,vxWorks可以通过从串口,网口,硬盘,flash等下载!这里的bootrom不是开发环境中的bootable,在开发环境里bootable指的是vxWorks,downloadable指application3.调试<1>attach用来在多任务调试时将调试对象绑定到某个任务<2>任务级调试(attach taskName)单个任务的调试不会影响到其他任务的运行,主要用来调用户的应用程序。
全局断点:在调另一任务或本任务时,系统运行本任务断点,则停下。
各任务要配合使用。
任务断点:调本任务时,系统运行到本任务断点,则停下。
如果没有attach到本任务,不起作用。
一次性断点:跑到一次之后自动删除。
<3>系统级调试(attach system)把所有task和系统core、中断看成一个整体,可用于调试系统和中断。
对中断调试,如果不是系统级调试,无论是那种断点都不起作用!wdbAgent不在调试范围内,当任务级调试时工作在中断方式,系统级调试工作在轮询方式。
!可是使用命令行方式的调试,参看crossWind教程。
VxWorks网络驱动配置及分析
VxWorks网络驱动配置及分析VxWorks支持两种形式的网络驱动,一种是BSD驱动支持通用的BSD4.4网络,API,结构等和大多数BSD网络的驱动类似.另一种是END 网络驱动,是VxWorks独有的,根据VxWorks MUX接口编程,不过END驱动在底层也要转换成BSD的形式.VxWorks网络驱动可参见VxWorks网络驱动1.BSD4.4网络驱动设置.网络设备驱动的调用主要在/target/src/config/usrNetwork.c文件中,下面说明BSD4.4驱动在VxWorks系统调用.主要调用过程如下:VxWorks系统执行的第一个任务target\config\all\usrConfig.c文件中 usrRoot()=======>>target\src\config\usrNetwork.c文件中的usrNetInit( )通过数组表netIf[]初始化相应的BSD网卡驱动.在usrNetwork.c中的调用过程如下:usrNetInit()函数中调用usrNetIfAttach():#ifdef INCLUDE_BSDif (!attached){if ( (usrNetIfAttach (pNetDev, params.unitNum, pBootString) !=OK))return (ERROR);attached = TRUE;}#endif /*INCLUDE_BSD*/usrNetIfAttach ()函数中调用数组表usrNetIfTblfor (pNif = usrNetIfTbl; pNif->ifName != 0; pNif++){if (strcmp (buf, pNif->ifName) == 0)break;}网络BSD驱动数组表usrNetIfTbl在文件/target/src/config/usrNetwork.c中的定义初始化:...LOCAL NETIF netIf [] = /* 网络接口,定义网卡驱动 */{/* 下面是定义包含的各种网络驱动 */#ifdef INCLUDE_DC /* 从DEC 芯片启动,即系统有NVRAM存在,现在已过时*/{ "dc", dcattach, (char*)IO_ADRS_DC, INT_VEC_DC, INT_LVL_DC,DC_POOL_ADRS, DC_POOL_SIZE, DC_DATA_WIDTH, DC_RAM_PCI_ADRS,DC_MODE },#endif /* INCLUDE_DC */#ifdef INCLUDE_FEI /* 如果定义了INCLUDE_FEI,初始化Intel 网卡 */{ "fei", feiattach, (char*)FEI_POOL_ADRS, 0, 0, 0, 0},#endif /* INCLUDE_FEI */#ifdef INCLUDE_EX /* Excelan 网卡 */{ "ex", exattach, (char*)IO_ADRS_EX, INT_VEC_EX, INT_LVL_EX,IO_AM_EX_MASTER, IO_AM_EX },#endif /* INCLUDE_EX */#ifdef INCLUDE_ENP /* CMC 网卡 */{ "enp", enpattach, (char*)IO_ADRS_ENP, INT_VEC_ENP, INT_LVL_ENP, IO_AM_ENP },#endif /* INCLUDE_ENP */...}设置方法:从以上可以看出BSD网络驱动只需在BSP配置文件config.h中将网络(#define INCLUDE_NETWORK)BSD网卡宏定义(#define INCLUDE_xxx)和一些I/O参数(一般不需要)加入,则在文件usrNetwork.c中进行相应的初始化.如: 在VxWorks加入支持intel的网卡驱动.在config.h中加入"#define INCLUDE_FEI".主要网卡定义如下:#define INCLUDE_ENE /* include Eagle/Novell NE2000 interface */#define INCLUDE_ELT /* include 3COM EtherLink III interface */ #define INCLUDE_ESMC /* include SMC 91c9x Ethernet interface */#define INCLUDE_FEI /* include Intel Ether Express PRO100B PCI */#define INCLUDE_ELC /* include SMC Elite16 interface */#define INCLUDE_EEX /* include INTEL EtherExpress interface */#define INCLUDE_EEX32 /* include INTEL EtherExpress flash 32 */#define INCLUDE_EX /* include Excelan Ethernet interface */ #define INCLUDE_ENP /* include CMC Ethernet interface*/#define INCLUDE_SM_NET /* include backplane net interface */ #define INCLUDE_SM_SEQ_ADDR /* shared memory network auto address setup */#define INCLUDE_EL_3C90X_END /* 3com fast etherLink XL PCI */#define INCLUDE_LN_97X_END /* AMD 79C972 END DRIVER */....2.END网络驱动设置.END网络设备的初始化主要通过定义在文件configNet.h中的一个数组表实现.初始化网络时muxDevLoad()会按这个表的定义把end初始化安装到VxWorks 系统.主要调用过程:VxWorks系统执行的第一个任务target\config\all\usrConfig.c文件中 usrRoot()=======>>target\src\config\usrNetwork.c文件(该文件初始化TCP/IP)中 usrNetInit(BOOT_LINE_ADRS)(该函数作用是添加MUX END)========>>pcooki = pCookie =muxDevLoad(pDevTbl->unit,.....)其中pDevTbl在BSP网络配置文件configNet.h中定义.END_TBL_ENTRY endDevTbl[]={...},该表定义了网络设备的具体参数.configNet.h部分定义如下所示:#define DEC_LOAD_FUNC dec21x40EndLoad /* 定义加载网络设备的入口程序*/#define DEC_BUFF_LOAN 1/* 网络设备硬件的物理定义数据串,一般BSP已经定义,不到必要时,无需更改*//** <devAdrs>:<PCIadrs>:<ivec>:<ilevel>:<numRds>:<numTds>:<memBase>: \ * <memSize>:<userFlags>*/# define DEC_LOAD_STRING"0x81020000:0x80000000:0x12:0x12:-1:-1:-1:0:0x80800000"IMPORT END_OBJ* DEC_LOAD_FUNC (char*, void*);/* 网络END设备表 */END_TBL_ENTRY endDevTbl [] ={ 0, DEC_LOAD_FUNC, DEC_LOAD_STRING, DEC_BUFF_LOAN, NULL, FALSE}, { 0, END_TBL_END, NULL, 0, NULL, FALSE},};设置方法:由以上可看出在VxWorks添加END网络驱动1.在文件config.h中添加"#define INCLUDE_NETWORK"和"#defineINCLUDE_END".2.在configNet.h中加入END驱动的入口函数"#definexxx_LOAD_FUNC xxxxxEndLoad"和一些相关的初始化字符串.这样就会在生成BSP包含END/MUX,系统网络初始化调用函数muxDevLoad()会更据这个表初始化END网络.文件configNet.c关于END驱动初始化的主要内容:#ifdef INCLUDE_ENDIMPORT int ipAttach ();IMPORT END_TBL_ENTRY endDevTbl[]; /* 定义这个表 */#endif /* INCLUDE_END */..........#ifdef INCLUDE_ENDint count;END_TBL_ENTRY* pDevTbl; /* END设备列表 */END_OBJ* pCookie = NULL;END_OBJ* pEnd;#endif /* INCLUDE_END */#if defined(INCLUDE_END)muxMaxBinds = MUX_MAX_BINDS; /* 初始化MUX接口 */if (muxLibInit() == ERROR)..........关于DEFAULT_BOOT_LINE 的解释这一行对配置网络,连通Target Server及下载调试程序非常重要DEFAULT_BOOT_LINE的原意是为没有NVRAM的target设计的,这样用户就不需要在每次系统启动是手工输入这些参数了.系统启动网络时xxxEndLoad()会解释这一行并按这一行的定义进行加载.Emac(0,0) : 启动设备,可是是软盘,硬盘,PCMCIA卡等其他的设备名称如:fd为软盘,(0,0)表示第一个软驱,3.5寸盘.dc则表示从DEC 21x4x 芯片启动,即系统有NVRAM存在,这种方式现在已不采用. elpci表示启动设备为3COM EtherLink XL PCI网卡.fei:Intel 82559 EtherExpress网卡.ene: NE2000网卡ELT: 3COM以太网卡EEX: Intel网卡ata: ATA/IDE 硬盘 ............405GP: 主机名vXworks从主机加载的VxWorks文件h=172.16.1.159 主机的IP地址e=172.16.254.52 目标机的IP地址,若网络启动Target Server时,这个IP必须和主机上Target Server配置的Target IP地址一致,且设置Back End选项为wdbrpcu=xxx 用户名,pw=xxx 密码: 若通过网络加载调试时,主机的Ftp服务器和目标机的用户名和密码必须相同tn=vxTarget 目标机名称*/#define DEFAULT_BOOT_LINE \"Emac(0,0)405GP:vxWorks h=172.16.1.159 e=172.16.254.52 \u=xxx pw=xxx tn=vxTarget"高智商学生 ( Thu, 1 Jun 2006 20:32:04 +0800 )Description:某日,老师在课堂上想看看一学生智商有没有问题,问他:“树上有十只鸟,开枪打死一只,还剩几只?”他反问:“是无声手枪或别的无声的枪吗?”“不是。
vxworks内核笔记
*
* Process delay list. Make tasks at the end of their delay, ready.
* Perform round robin scheduling if selected.
FAST WDOG *wdId;/* pointer to a watchdog */
FUNCPTRwdRtn;/* watch dog routine to invoke */
intwdArg;/* watch dog argument to pass with wdRtn */
intstatus;/* status return by Q_REMOVE */
/* set up system timer */
sysClkConnect ((FUNCPTR) usrClock, 0);/* connect clock interrupt routine */
sysClkRateSet (SYS_CLK_RATE);/* set system clock rate */
sysClkEnable ();
}
/*******************************************************************************
** sysClkConnect - connect a routine to the system clock interrupt
taskRtnValueSet (pTcb, OK);
break;
}
case ERROR:
vxworks模拟器使用指南
约定文档中提到的路径,均相对于ROS5(M)目录而言。
1.编译模拟器1.1.基本原理为了节省时间,模拟器不像设备那样编译一个完整的vxworks镜像文件,而是把系统和模块分开。
系统存放在vxsim\vxWorks文件中,该文件由系统组负责维护。
模块则编译在vxsim\vxsim.out文件中,这个文件由各自编译。
为了编译理解,我们可以和Windows系统做一个对比,vxworks文件相当于Windows系统,.out文件相当于一个exe文件。
我们开发一个exe文件的时候,并不需要编译整个Windows系统。
因此我们只需要编译出vxsim.out 文件即可。
vxsim.out的编译过程如下:1、编译vxsim目录下的所有.c文件,生成对应的.o文件2、链接步骤1生成的.o文件和lib\gnu\vxworks\SIMNT、publib\gnu\vxworks\SIMNT目录下的所有.a文件。
如果两个目录有同名文件,则使用lib目录下的。
1.2.编译vxsim.out当前模拟器的编译不再使用Workbench工程,完全使用批处理common\vxsim.bat进行,该批处理应该用VxWorks Development Shell运行,而不是cmd。
下面描述都假设是在common 目录下。
从基本原理那能看出,编译vxsim.out需要编译vxsim目录下的.c文件和编译库文件(.a 文件)。
其中主要的工作是编译库文件。
1.2.1.库文件编译编译一个库文件的方法是vxsim.bat libname,其中libname指的是模块的名称,在module目录下应该有一个libname.module文件。
比如:最终生成的库文件是存放在lib\gnu\vxworks\SIMNT目录下,也即当前编译的库文件优先于publib的库文件。
一般而言,公共的库文件(rdvp/support/rcis/simssp)在publib目录下已经存在稳定的版本,不用另外编译。
VxWorks常用命令汇总
VxWorks常⽤命令汇总VxWorks常⽤的命令1.与任务相关的命令sp function,[arg1],...,[arg9]-启动任务,最多接受9个参数,默认的优先级100、堆栈20000字节period n,function,[arg1],...,[arg8]-创建⼀个周期调⽤function的任务,周期为n秒,最多接受8个参数repeat m,function,[arg1],...,[arg8]-创建⼀个反复调⽤function的任务,调⽤次数为m,m=0时永久调⽤,最多也是8个参数ts tidX -挂起任务tr tidX -恢复挂起的任务td tidX -删除任务i tidX -显⽰任务基本信息,参数为0时显⽰全部任务ti tidX -显⽰任务详细信息,包括寄存器、堆栈等tt tidX -显⽰任务的函数调⽤关系checkStack tidX -显⽰任务堆栈使⽤的历史统计,参数为0时显⽰全部任务[其中tidX可以为任务ID 也可以为任务名]2、系统信息lkup ["string"] -在系统符号表中查找并列出含有"string"字符的函数及全局变量,有两个特殊参数:0,给出符号表统计;""(空字符串),列出全部符号lkAddr addr -显⽰addr地址附近的符号表l addr,[n] -显⽰addr地址开始的n条指令的反汇编,n省略时默认为10条指令h [n] -n为0时列出最近执⾏的shell命令,默认20条;n⾮0时,设定shell记录的历史命令的数⽬d [addr,[number],[width]]-显⽰addr地址开始的number个单元的内容,width定制每个单元的宽度,可以是1、2、4、8m addr,[width] -按width宽度修改addr地址的内容,width可以是1、2、4、8 memShow 1 -显⽰系统分区上空闲和已分配空间的总数等printErrno value -打印系统定义的错误码的宏3、与⽹络相关的命令ifShow ["ifname"] - show info about network interfacesinetstatShow - show all Internet protocol socketstcpstatShow - show statistics for TCPudpstatShow - show statistics for UDPipstatShow - show statistics for IPicmpstatShow - show statistics for ICMParpShow - show a list of known ARP entriesmbufShow - show network stack data pool statistics netStackSysPoolShow - show network stack system pool statistics routeShow - display all IP routes (summary information) mRouteShow - display all IP routes (verbose information) routestatShow - display routing statisticsrouteAdd "destaddr","gateaddr" - add route to route tablerouteDelete "destaddr","gateaddr" - delete route from route table说明:上述⼤多数命令都可以在help、netHelp中查到vxWorks命令规则:名词+动词,第⼆个单词开始⼤写序号状态命令备注1 BSP c 改变配置2 BSP p 打印当前配置信息3 BSP @ 开始加载内核4 BSP ctrl+x 重新启动5 BSP6 BSP7 vxWorks i 查看进程8 vxWorks ifShow 查看当前⽹络设置9 vxWorks devs 查看所有的设备10 vxWorks cd "/xxx/" 进⼊⽬录11 vxWorks cfIdeInit 每次上电后执⾏12 vxWorks cfFormat 新卡(或者是未格式化的卡)插⼊的时候执⾏,只需执⾏⼀次13 vxWorks ll 以详细模式查看当前⽬录下的⽂件14 vxWorks ls 以简单模式查看当前⽬录下的⽂件15 vxWorks version 查看编译时间16 vxWorks td xxx 终⽌xxx进程17 vxWorks help 帮助18 vxWorks tffsShow 查看tffs的相关信息19 vxWorks tffsDevFormat 格式化tffs⽂件系统20 vxWorks showTime 查看系统时间21 vxWorks usrTffsConfig(0,0,"/tffs0") 新增⼀个tffs格式的⽂件系统22 vxWorks pwd 查看当前操作所在的⽬录路径23 vxWorks ping "xx.xx.xx.xx",10,0 ping地址xx.xx.xx.xx,共计10次24 vxWorks pciDeviceShow 查看当前系统中的所有PCI设备25 vxWorks pciHeaderShow,0,xx 查看当前系统中的组号为0、地址号为xx 的PCI设备VxWorks中如果稍有不慎,就可能导致task suspend,如果运⽓好,shell没有被挂起,则可以通过系统的⼀些命令追踪⼀下挂起的原因。
vxworks系统及函数详解
VxWork介绍及编程VxWork介绍及编程一.嵌入式操作系统VxWorks简介VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。
良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。
它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
在美国的F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。
实时操作系统和分时操作系统的区别从操作系统能否满足实时性要求来区分,可把操作系统分成分时操作系统和实时操作系统。
分时操作系统按照相等的时间片调度进程轮流运行,分时操作系统由调度程序自动计算进程的优先级,而不是由用户控制进程的优先级。
这样的系统无法实时响应外部异步事件。
实时操作系统能够在限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。
分时系统主要应用于科学计算和一般实时性要求不高的场合。
实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。
VxWorks的特点•可靠性操作系统的用户希望在一个工作稳定,可以信赖的环境中工作,所以操作系统的可靠性是用户首先要考虑的问题。
而稳定、可靠一直是VxWorks的一个突出优点。
自从对中国的销售解禁以来,VxWorks以其良好的可靠性在中国赢得了越来越多的用户。
•实时性实时性是指能够在限定时间内执行完规定的功能并对外部的异步事件作出响应的能力。
实时性的强弱是以完成规定功能和作出响应时间的长短来衡量的。
VxWorks 的实时性做得非常好,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,它们造成的延迟很短。
vxworks命令教程2024新版
文件创建、打开和关闭
创建文件
使用`creat()`函数创建新文件,需要指定文件名和访 问模式。
打开文件
使用`open()`函数打开已存在的文件,同样需要指定 文件名和访问模式。
关闭文件
使用`close()`函数关闭已打开的文件,释放相关资源 。
文件读写操作
01
读取文件
写入文件
02
03
telnet
远程终端服务命令,用于建立TCP连接 并远程登录到目标主机。
ftp
文件传输协议(FTP)命令,用于在网 络上传输文件。
tftpபைடு நூலகம்
简单文件传输协议(TFTP)命令,用 于在网络上进行简单的文件传输。
网络诊断和调试
netstat
网络统计命令,用于显示网络 连接、路由表、接口状态等网
络相关信息。
在嵌入式系统开发中,命令行接口(CLI )是一个不可或缺的工具。通过CLI,开 发者可以与系统进行交互,执行命令,查 看系统状态,调试问题等。
本教程旨在帮助开发者熟悉并掌握 VxWorks的命令行接口,以便更有效地 进行嵌入式系统开发和调试。
教程范围
基本命令介绍
涵盖VxWorks中常用的基本命令, 如任务管理、内存管理、时间管理
ndp
邻居发现协议(NDP)命令,用于 IPv6网络中的邻居发现和管理。
route
用于设置和查看路由表,实现网络数 据包的正确转发。
dhcpc
动态主机配置协议客户端(DHCP Client)命令,用于从DHCP服务器 获取网络配置信息。
数据传输和接收
ping
用于测试网络连接可达性,发送ICMP 回显请求并接收回显应答。
VxWorks动态加载(转)
VxWorks动态加载(转)展开全文注:最近在做热补丁的功能,看到一篇gateway写的文章,觉得很通俗易懂的,就将搜集到的资料又整理了一下,供大家参考。
使用动态加载目标模块的方式有很多好处,比如可以在不破坏原来的环境下增加调试定位功能,相当于给系统打“补丁”,不需要编译原来的代码(甚至可以不用原来的代码)而只需要关注正在调试的代码,这样能减少编译时间和减少映像的加载量。
实现目标模块的动态加载有很多种方法,如在主机环境的界面上通过在目标模块上单击鼠标右键,选择“Download 文件名”;也可以通过wShell和GDB命令行窗口实现。
本文通过tshell下使用ld()、loadModule()、loadModuleAt()中一个函数来实现,当然在代码中也可以自如地调用它们。
ld命令是由用户接口子程序库usrLib提供的一个加载命令。
使用ld的前提是在config.h中定义INCLUDE_LOADER。
这样,在usrRoot()函数中就会自动调用加载模块初始化函数moduleLibInit();同时,根据CPU类型,自动决定目标模块的格式。
如果CPU是MIPS、PPC、ARM、I80X86、COLDFIRE、SIMSPARCSOLARIS、SH等,加载的目标模块格式是elf类型,就会调用loadElfInit();如果CPU是I960、AM29XXX等,加载的目标模块的格式则是coff类型,就会调用loadCoffInit()函数。
在ARM和PPC下,Tornado编译器生成的.o或.out都是elf类型,打开目标文件都会看到文件头有ELF(45,4C,46)标记。
这时可以通过ftp工具把它加载到文件系统(如使用copy命令加载到RAM盘)中,再调用ld()或loadModule()函数加载到内存中运行。
ld的函数原型是:MODULE_ID ld( int syms, BOOL noAbort, char *name )。
VxWorks调试手段和方法总结
3
单击 Adcanced 按钮可以打开 Advanced Breakpoint 窗口,如图 4 所示。
图 3 Advanced Breakpoint 窗口 Condition Expression 输入框允许用户给断点附加条件,只有在此条件满足时,断点才会 起作用,程序才会在此暂停。可以在条件框内输入一个整型表达式,或是一个变化的内存值, 只要是非零值,就假定此条件为真。 Number of times to skip 框指定在导致程序暂停之前允许经历的断点次数。 On Break 选项指定了如何处理一个断点: l Keep 将断点定义为永久断点 l Delete 将断点定义为临时断点,程序经历一次此断点即删除它 l Disable 将断点定义为临时断点,程序经历一次此断点即关闭它,以后仍可以经
2 运行程序
单击 CrossWind 工具栏中的 图标或选择 Debug 下拉菜单中的 Run 选项,就会出现
1
Run Task 窗口。如图 1 所示。
图 1 Run Task 窗口 利用 Run Task 窗口指定需要运行的函数和函数参数。函数参数之间以空格键隔开。参 数列表必须是整数或地址,不能是浮点或双精度值、函数调用。选中 Break at Entrypoint 框 可以在函数的第一条语句处设置一个临时断点,这样程序一运行就会停在第一条语句处,用 户可以执行单步,跳过子函数调用或恢复执行。
的每一个起始地址保存下来,可以从下拉列表中选择一个以前显示过的地址。单击 按钮
6
可以更新内存显示。 Memory窗口中显示的内存值不能手工修改。如果想修改某一地址的内存值需要通过
Shell命令m来完成。 在Tools|Options|Debugger窗口中修改Memory Window 选项可以改变Memory窗口中的
vxWorks文件系统详细介绍
VxWorks为块设备(磁盘)的实时使用提供了两种本地文件系统:一种与MS-DOS文件系统相兼容,另一种与RT-11文件系统相兼容。
这些文件系统的支持库分别为dosFsLib和rt11FsLib。
VxWorks还提供了一种简单的raw文件系统,这个文件系统把整个磁盘作为一个单独的大文件。
这个文件系统的支持库是rawFsLib.VxWorks还为不使用标准文件或目录结构的磁带设备提供了一个文件系统。
磁带卷被看作一个raw设备,整个卷就是一个大文件.这个文件系统的支持库是tapeFsLib。
另外,VxWorks提供了一个文件系统支持库cdromFsLib,它允许应用程序从依照ISO9660标准文件系统格式化的CD-ROMs中读取数据。
在VxWorks中,文件系统不受块设备种类型或它的驱动程序的约束.VxWorks块设备都使用一个标准接口,以便文件系统可以与设备驱动程序自由的混合。
做为选择,你可以写自己的能被驱动程序以相同方式使用的文件系统,只要在文件系统、驱动程序和I/O系统间遵循同样的标准接口。
VxWorks的I/O体系结构使得在一个VxWorks系统中可以有多样的文件系统,甚至其类型也可以不同。
块设备界面在3。
9.4块设备中讨论.1 与MS—DOS兼容的文件系统:dosFs使用dosFs文件系统格式化的磁盘与MS-DOS(直至6.2版本)磁盘是相兼容的。
由两个文件系统初始化的硬盘之间在格式上有细微区别。
然而,数据自身是兼容的,而且dosFs可被配置成使用MS—DOS格式化的磁盘。
DosFs文件系统向不同要求的实时应用程序提供了良好的适应性。
主要特点包括:l 文件和目录分等级排序,允许有效地组织,在一卷上可以创建任意数量的文件。
l 每个文件可以是连续存储或非连续存储的。
非连续存储的文件可使硬盘空间利用率更高,连续存储的文件可以增强系统性能。
l 具有与广泛可用的存储器和可恢复介质的兼容性.应用VxWorks(不使用dosFs文件扩展名)、MS—DOS PCs和其它系统创建的磁盘可以自由的交换.如果分区表被说明,那么硬盘也是兼容的。
VxWorks系统异常分析方法
VxWorks系统异常分析方法1、任务异常的一般表现:i)指令异常:系统打印program异常或instruction access异常。
ii) 访问非法地址异常,串口打印data access异常。
iii)中断处理中产生的异常。
data accessException current instruction address:0x00187d4cMachine Status Register:0x00009030Data Access Register: 0x8003435cCondition Register:0x48000080Data storage interrupt Register:0x0000000bTask:0xc844f0 "XXX"2、可能的原因:i)堆栈写越界,主要是数组写越界,导致前面声明的变量(因为堆栈是从下往上增长的)或者函数的参数或者函数返回的地址被改写为无效值。
ii) 堆栈溢出,堆栈声明过小,而函数又声明了大数组,超出堆栈的容量。
iii) 内存改写,这是最通常出现的原因。
包括,指针没有初始化,导致访问随机地址;访问空指针;内存操作范围越界,例如在使用memcpy/memset等函数使用的长度超过所分配,导致改写了其他的指针。
因此在定位异常问题过程中,可以通过内存管理先查看一下先前是否有内存写越界的记录,但是内存写越界只有在释放该内存区时才能检查到,如果该内存没有被释放,则即使写越界也是不知道的。
iv)系统调用不当,在中断回调中,使用printf,semTake之类可能引起阻塞的操作;printf等使用不当导致内存改写,这些函数在中断回调函数中是严格禁止的。
v) 增量编译引起的问题,Tornado和workbench增量编译有时会出现问题,导致古怪的异常,重新全量编译后,可能个会解决问题。
vi)多任务抢占引起的问题,当多个任务共同访问一个或者多个变量时,如果互斥不当,可能会产生同步或互斥的问题,比较典型的是:任务A和B都使用一个变量指针P;而A和B的优先级不同(即存在任务抢占),则他们在释放或者修改这个变量指针的时候,可能会出现随机的异常访问问题。
嵌入式实时操作系统VxWorks入门_开发环境构建
嵌入式实时操作系统VxWorks入门――开发环境构建VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
在美国的F-16、FA-18 战斗机、B-2隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。
VxWorks原先对中国区禁止销售,自解禁以来,在我们的军事、通信、工业控制等领域得到了非常广泛的应用。
VxWorks 的实时性体现在能于限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。
因此,实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。
本文将对这个操作系统进行一个入门级的、全面的介绍。
为力求展示其全貌,全文共分五章:(1)搭建VxWorks嵌入式开发环境;(2)简要介绍VxWorks的基本组成,内核的基本结构;(3)概述VxWorks板级支持包(BSP)的概念及VxWorks的启动过程;(4)介绍VxWorks设备驱动的架构及编写方法;(5)指明VxWorks应用开发的思路,任务调度及任务同步、中断与任务的同步机制。
以上各章中将贯穿着许多实例,由于本文定位于入门级教程,所以文中的实例都将十分简单。
下面我们进入第一章内容的讲解。
如图1,嵌入式系统的调试方法一般为通过PC(宿主机)上的集成开发环境交叉编译针对特定电路板(目标机)的程序,然后将程序通过目标板的JTAG、串口或网口等途径下载到目标板上运行。
因此,为了构造一个嵌入式系统的学习环境,拥有一块包含CPU、存储器及I/O电路(构造计算机系统)的目标电路板往往是必要的。
虽然许多集成开发环境附带模拟软件,但仅限于指令集的模拟,均无法模拟物理的目标机硬件平台,因而在其上只能进行应用程序的象征性模拟开发。
VxWorks驱动开发笔记(注释)
VxWorks驱动开发笔记普通应用软件的开发,客户都会提出很明确的需求如功能、用户界面、外部接口以及开发周期经费等等要求,这些要求一般都相对直观且容易理解。
但是对于驱动程序的开发开说,开发周期以及经费这些需求往往都比较容易理解,可是对于功能、用户界面以及外部接口等需求就很难描述了,因为这需要对底层操作系统的理解,否则就无法提出适宜的需求来,而对底层操作系统的理解才是驱动程序开发之所以困难的主要原因。
1.1驱动程序的结构驱动程序有两大基本特征:一是它实现了对硬件设备的访问(最根本目的),二是它实现了一系列与硬件设备无关的的访问接口。
通过这些接口,上层软件在控制此类硬件设备时无需对硬件进行详细的了解就可以进行访问,此外,当硬件设备更换时,只需要修改设备驱动的硬件相关的部分,而上层软件无需做任何更改。
这两个基本特征也正好决定了驱动程序的主体结构。
如图1.1所示,图中的阴影部分为设备驱动程序。
图1.1驱动程序的结构1.2驱动程序的工作流程不同设备在操作系统中完成的工作是不同的,但是就是工作流程来说,大致可以分为两个阶段。
第一个阶段是初始化阶段,在初始化阶段,驱动程序主要完成硬件以及设备驱动相关数据结构的初始化。
第二个阶段是硬件的访问阶段,根据设备工作模式的不同,可以分为中断模式和轮询模式,无论何种模式都可以通过与硬件设备无关的通用接口进行硬件设备的访问。
2.1串口驱动原理串口因为调试简单在许多数据量不大的场合依然较为流行,可以借助串口对目标机中操作系统的运行情况进行监控等等。
下图为Tornado开发软件通过串口对目标机上运行的VxWorks操作系统进行监控的结构原理图。
图2.1Tornado通过串口对vxWorks操作系统进行监控设备的驱动程序分为与硬件相关部分和硬件无关部分,而硬件相关部分则负责具体的硬件实现,硬件无关部分实现了一系列通用的数据接口,其中硬件无关部分实现是create、remove、open、close、read、write、ioctl等7个通用的函数接口。
VxWorks简介
VxWork BSP 和启动过程开发BSP 主要的两点:系统image 的生成,image 的种类,image 的download 下载过程,系统的启动顺序和过程,调试环境的配置及远端调试的方式和方法,相应BSP 设置文件的修改(网络,串口..),BSP 各文件的组成和作用.要对系统底层驱动清楚,也就是对CPU 及相关的硬件有所了解.主要是32微处理器(上电启动过程, download image 的方式方法,读写ROM,地址空间分配,MMU,寄存器,中断定义,..).参照硬件资料,多读一些源码会有所帮助.Tornado 2 开发调试环境协议框图 主机开发(Host Development System) 目标机(Target System)Tornado 工具WTX 协议通信<==========> Editor Project S h e l lDebug g e r B r o w s erWindviTargetServer|Target Agent VxWor ks Target Simulat or WDB 协议通信 <==========> Application VxWorks OS VxWorks Target (WDB )Agentew两个主要两个协议WTX协议(Wind River Tool eXchange): 用于开发机内部Tornado工具与Target Server之间通信.WDB协议(Wind DeBug): 用于主机Target Server与目标机之间的通信.一.基本概念BSP定义:Provides VxWorks with primary interface to hardware environment.作用:在通电后,初始化硬件.支持VxWorks和硬件驱动通信.使hardware-dependent 和hardware-independent在VxWorks系统中很好的结合.主要BSP主要文件目录的组成及主要文件的作用:目录target/config/All:这个目录下的文件是所有BSP文件共享的,不是特别需要不要更改里面的任何文件. configAll.h:缺省定义了所有VxWorks的设置.如果不用缺省的设置,可在BSP目录下的config.h文件中用#define或#undef方式来更改设置.bootInit.c:在romInit.s后,完成Boot ROM的第二步初始化.程序从romInit.s中的romInit()跳到这个文件中的romStart().来执行必要的解压和ROM image的放置.bootConfig.c:完成Boot ROM image的初始化和控制.usrConfig.c: VxWorks image的初始化代码.目录target/config/comps/src:涉及系统核心的components,主要由target/config/All中usrConfig.c中函数调用目录target/config/bspname:包含系统或硬件相关的BSP文件.Makefile一些命令行控制images的生成,参见BSP设置部分及生成下载READMEBSP发布纪录,版本,总的文档config.h包括所有涉及CPU主板的设置及定义(includes,definations),参见BSP设置文件及生成下载configNet.h网络驱动的主要设置文件,主要对END驱动设置.romInit.s汇编语言文件,是VxWorks Boot ROM和ROM based image的入口,参见系统启动部分sysALib.s汇编语言文件,程序员可以把自己的汇编函数放在这个文件里,在上层调用.VxWorks image的入口点_sysInit在这个文件里,是在RAM中执行的第一个函数.sysLib.c包含一些系统相关的函数例程,提供了一个board-level的接口,VxWorks和应用程序可以以system-indepent的方式生成.这个文件还能包含目录target/config/comps/src的驱动. sysScsi.c可选文件用于Scsi设备设置和初始化.sysSerial.c可选文件用于所有的串口设置和初始化.bootrom.hexASIC文件包含VxWorks Boot ROM代码VxWorks运行在目标机上,完整的,连结后的VxWorks二进制文件.VxWorks.sym完全的,连结后带有符号表的VxWorks二进制文件VxWorks.st完全的,连结后,standalone,带有符号表的VxWorks二进制文件BSP用"make"来编译连接生成(Created),而不是用Tornado的工具.BSP和应用程序都可以在"make"或"tornade"上开发(developed)BSP被设置包括以下驱动:中断控制interrupt controller,计时器timer(sys/aux),串口UART(serial),显示屏LCD,键盘Keyboard(opt),触摸屏touch-screen(opt).前面三个是BSP的主要部分.BSP默认的download VxWorks RAM image方式是从ethernet.串口电缆需要用来和开发板(COM1)通信,通过协议WDB.VxWorks Image的种类:Loadable images.ROM-based images---compressed/uncompressed.ROM-Resident images.ROM-resident image 对一些系统内存RAM资源较少的情况下,为了节省资源,只拷贝image 中的数据部分(data segment)到内存RAM,留下程序部分(text segment)在ROM中执行。
VxWorks学习
串行数据与并行数据串口通信的基本概念1,什么是串口?2,什么是RS-232?3,什么是RS-422?4,什么是RS-485?5,什么是握手?1,什么是串口?串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS- 232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:(1)地线,(2)发送,(3)接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但是不是必须的。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通行的端口,这些参数必须匹配:a,波特率:这是一个衡量通信速度的参数。
它表示每秒钟传送的bit的个数。
例如300波特表示每秒钟发送300个bit。
当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。
这意味着串口通信在数据线上的采样率为4800Hz。
通常电话线的波特率为14400,28800和36600。
波特率可以远远大于这些值,但是波特率和距离成反比。
高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
b,数据位:这是衡量通信中实际数据位的参数。
当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-./0123 是 非 常 优 秀 的 嵌 入 式 商 用 实 时 操 作 系 统 456。 *017 89:0 是其开发系统的核心组件 4;6。 -./0123 提供了多种用于实
时系统开发、调试和运行的功能,如多任务机制、 <+,=> 兼容 性、 本地文件系统、 网络功能、 虚 拟 内 存 等 。 而 它 与 @A=> = ? +、 的相似性, 又使熟悉 @A=> 的开发人员比较容易掌握。现阶段 开发的通信系统, 往往把 -./0123 操作系统作为首选。为了更 的程序设 形象直观地说明问题, 下面将以局域网仿真 (BCAD )
0(1。
: 位于局域网仿真层和实体连接管理实体 (2345 接口 (% ) 之间, 对 于 0>2 (0?987@6A >9B8C;D 4678934 :;4;<6:648 64898= ) (16B:64648 29B7C98)它完成虚电路的建立和释放,而对于 1>2 ) 则提供虚电路的分配功能。 >9B8C;D 29B7C98 : 与层管理实体的接口, 完成初始化、 控制局域网 接口 (E ) 仿真实体和返回状态信息等功能。 (/ ) : 这是一个逻辑意义上的接口 , 位 于 ’* ’F)G 接 口
)8’3%743: *&L3 Y9YP1 X0R’3P3 08 Q932J:P3LN8 L8 R0KK’8LR9QL08 Y10Q0R0M3 )P3P91R& 98: ZPVPM0YKP8Q [&P8 ’3L8N Q&P )P9MQLKP E’MQLQ932 +YP19QL8N ,W3QPK#*&P 2PW Q&9Q [P92P8 PXXLRLP8RW L3 :L3R’33P: [&P8 1P9ML\L8N 30KP R0KK’8LR9QL08 Y10Q0R0M#*&P [9W Q0 YM98 Q&03P R0KYMLR9QP: R93P [PMM L3 L8Q10:’RP: L8 :PQ9LM [LQ& Q&P P.9KYMP 0X BCAD E’MQLQ932 :P3LN8# :-@#$%A’: R0KK’8LR9QL08 <10Q0R0M, <10RP33, -./0123, EP339NP ]’P’P , E’MQLQ93描述方式的进程通信模型
/#0
合理掌握进程个数
也许有人会争论说,对于单处理器多进程的系统来说, 进 采用消息描述方式时, 在需要传送消息时, 只是将该传送 消息的描述 (通常是一个结构) 放入目标消息队列。 这种方法通 常用在实际消息 (如数据帧) 的长度比较长, 如果将整个实际消 息塞进消息队列需要较大的内存区间, 及较长的处理延迟。采 用消息描述的方法可以避免上述问题, 其副作用为: 要求提供 消息的进程保证在消息处理前实际消息的内存区域保持有效, 这就引入了较为复杂的内存管理机制。 该方法通常用在底层将 到来的 数 据 帧 通 知 高 层 的 协 议 处 理 进 程 , 它 有 效 避 免 了 E:@M 带来的系统资源消耗问题。 底层驱动程序通常通过一个循环的 缓冲区来存数据帧, 这样有效保证了所要求的内存管理机制。 这种方法经常用于数据帧短消息。 首先是因为短消息填入 内存块也不再是主要矛盾。 消息队列的延迟、 ’12 占用时间小, 再者为一个短消息写一个消息描述 (有些消息短到和消息描述 相当大小) ,并且为保证在消息处理前实际消息的内存区间保 持有效引入内存管理机制, 是一个相当大的代价。所以要根据 不同的情况选用不同的模式, 以期充分发挥硬件功能, 达到最 佳的运行效果。
%
通信协议软件的特点及选择实时操作系统的原因
由于现代电信和计算机网络技术的发展和人们对网络带
计为例, 论述提高通信协议性能的实践技术、 手段。 局域网仿真 提供了在 C*E 网络上运行现有 BCA 协议的手段, 它能够使原 局域网终端的软件和硬件系统不做任何改动的情况下, 即可享 受到 C*E 技术带来的高速和灵活性。
+%,
((’/ 协 议 包 , 通 过 2FNG- 转 换 成 (-. 信 元 发 送 到 (-. 网
这两个方向作为数据 上, 完成从局域网数据到 (-. 网的适配。 的主要通道, 有以下特点: 业务流量大, 数据帧频度高, 占用了 若不及时处理, 影响业务适配的效 绝大部分的 21F 处理时间, 果, 容易造成缓冲溢出。 如果有速度瓶颈, 该通道为限制业务板 处理速度的主要矛盾。 根据以上特点,在两个方向上创建两个消息队列来管理。 具 体 的 数 据 帧 存 放 的 缓 冲 区 一 般 由 底 层 驱 动 程 序 (包 括 022 以太网端口驱动和 ((’/ 驱动) 负责。底层驱动程序在有数据 到达时, 将该数据的描述放到相应的消息队列中。可以安排单 一的一个进程看护一个消息队列, 这样, 一旦有消息到达, 就能 马上转入到相应的消息处理函数。 将这两个模块划分为单模块处理, 便于在程序运转的时候 通过进程优先级的调整来提高业务板的过滤率和转发率, 更加 方便地改善协议实现的效率, 解决高速度要求的主要矛盾。进 程的优先级关系到程序的运行效率和实际协议实现的效果。 通 过把实际的不同实现之间作对比发现: 一般来说, 相对数据量 比较大的进程应该安排较高的优先级。
浅析基于 !"#$%&’ 的 ()*+ 软件设计
孔令山 张志群 丁 炜 (北京邮电大学, 北京 %""HI$ )
DJK9LM: 208NM3OP93QR0K#R0K
摘 要 文章分析了在通信协议开发中采用实时多任务操作系统进行进程规划时影响协议性能的关键因素, 同时以局
实现为例, 依据实践应用结果, 提出了一些高效的处理策略和方法。 域网仿真 (BCAD ) 关键词 通信协议 进程
%#%
多模块适于一个进程情况
对缓冲区压力小、 时延要求不苛刻的模块一般考虑用较少
的进程管理较多的模块。以 ’()* 实现为例, ’*2 需要接受网
图! 局域网业务板功能模块图
管 (<648 的 管 理 , 启动配置管理、 性能管理、 安全管理等, 这就 计算机工程与应用 !""!#$
&$O
要求在 %&’ 的软件中有相应管理模块,比如专门 设 置 一 个 消 息队列来听从 ()*+, 的命令, 然后使用一个进程来管理这个消 息队列; 另一方面, 局域网仿真要求将局域网数据通过 (-. 网 传输, 那么需要有接收信令建链、 拆链消息的消息队列, 如果采 用前述方案, 也需要再增加一个进程看护这个消息队列。 但是, 作者注意到从主控板的网管和信令模块来的控制帧 频次远小于主数据通道的数据帧, 也就是说, 可以把这两个消 息队列合二为一, 这样对其专用缓冲区的压力依然远远小于数 据帧。再者, 信令和网管的性质比较相近, 帧长较短, 安排相同 的优先级不会影响协议实现的效果。
宽、 时延等要求越来越苛刻, 对通信系统的硬件和软件都提出 了更高的要求。对于传统的网络设备的硬件设计, 为了满足对 速度带宽等参数的指标要求,许多公司开发了专用的芯片, 将 现有网络的资源模式从共享式进化到交换式 。 交 换 式 的 &’( 、 路由器等网络设备相继占领市场的主流, 这些专用芯片和设备 的广泛采用, 大大提高了网络的性能, 减缓了日益增多的用户 和日益增加的带宽需求对网络的压力。 为了适应计算机和通信 网络的发展变化, 通信协议的复杂性日益增强。这体现在: 分布性: 指多个局部系统分布在不同的机器上; 并发性: 各个局部系统并发工作; 异步性: 各个局部系统不能同时观察到事件的产生; 实时性: 局部系统的活动有严格的时序要求和时间要求。 正是由于上述原因, 实际网络设备的开发往往采用专用芯 进行协议软件的开发。 这是 片, 同时选择实时操作系统 ( )*+, ) 因 为 )*+, 具 有 以 下 特 点 满 足 通 信 协 议 的 复 杂 性 : 系 统 内 核 小; 中断处理时间短; 连续运行时间长; 多个毫秒级或微妙级定 时器的处理能力。
图%
’*2 模块划分模型
%#!
适应采用单模块单进程的情况
根据需要,外来的数据用缓冲区和消息队列来管理。对
’*2 侧的程序功能来说,它要从 ((’/ 的芯片接受 (-. 交换
机送来的数据包,通过协议处理发送到相应的以太网适配器 ,该适配器写数据包到以太网端 (比如 .12$M&$" ,参照图 ! ) 口, 完成从 (-. 到传统局域网的适配。相反, 从相应以太网适 配 器 来 的 .(2 帧 要 经 过 相 反 的 过 程 , 通 过 协 议 处 理 打 包 成
图&
’()* 协议栈结构图
作 者 研 究 图 & 的 ’()* 协 议 栈 结 构 +!,可 以 发 现 , 局域网仿 提供与 (-. 的接口, 真实体是位于数据链路层, 下接 ((’ 层, 上接高层, 提供与原局域网高层协议的接口。局域网仿真层与 其它部分共有五个接口,下面对这五个接口的功能作简要分 析: : 位于局域网仿真层与高层之间, 它完成发送和接 接口 (& ) 收用户数据帧的功能。 : 完 成 发 送 和 接 收 ((’ 帧 的 功 能 , 而 ((’/ 则 利 接口 (! ) 用底层的功能提供服务,其中多个箭头表示多个服务接入点
-./0123
消息队列
多任务
BCAD
中图分类号 *<GSG
文章编号 %""!JHGG%J (!""! ) "$J"%$$J"G
文献标识码 C
,-’./0 $1 ()*+ 2%$3$4$5 6$13#7%- 87’- $0 !"#$%&’ 96
:$0/ (.0/’;70 <;70/ <;.=>0 ,.0/ ?-. (TPLUL8N @8LVP13LQW 0X <03Q3 98: *PMPR0KK’8LR9QL083, TPLUL8N %""HI$)