Tornado_VxWorks官方培训教程1
Vxworks开发简明培训教程服务器应用
Vxworks开发简明培训教程服务器应用一、教学内容本教程服务器应用部分,主要针对VxWorks操作系统的服务器应用进行讲解。
教材涵盖的章节有:第三章网络编程,第四章服务器编程,第五章Web服务器开发。
具体内容如下:1. 第三章网络编程:介绍VxWorks操作系统中的网络编程基础,包括套接字编程、TCP/IP协议栈的使用等。
2. 第四章服务器编程:讲解如何在VxWorks中实现网络服务器,包括基于TCP和UDP的服务器编程。
3. 第五章Web服务器开发:介绍Web服务器的基本原理,以及在VxWorks中如何开发Web服务器。
二、教学目标1. 使学生掌握VxWorks操作系统的基本网络编程方法。
2. 培养学生具备在VxWorks中实现网络服务器的能力。
3. 让学生了解Web服务器的工作原理,并能在VxWorks中进行开发。
三、教学难点与重点1. 教学难点:VxWorks网络编程中的socket API,Web服务器开发中的HTTP协议处理。
2. 教学重点:服务器编程的基本方法,Web服务器的核心模块实现。
四、教具与学具准备1. 教具:多媒体教学设备,VxWorks操作系统安装光盘。
2. 学具:学生个人电脑,VxWorks操作系统安装文件,网络编程实践案例。
五、教学过程1. 引入实践情景:以企业实际需求为背景,讲解网络编程在服务器应用中的重要性。
2. 讲解第三章网络编程:通过示例代码,讲解VxWorks中的套接字编程方法。
3. 讲解第四章服务器编程:以TCP服务器为例,讲解服务器程序的实现过程。
4. 讲解第五章Web服务器开发:介绍Web服务器的工作原理,以及在VxWorks中实现Web服务器的方法。
5. 随堂练习:让学生根据所学内容,编写一个简单的网络服务器程序。
6. 例题讲解:分析并讲解典型的网络编程问题,如Socket编程中的粘包问题。
7. 课后作业:布置作业题目,要求学生完成一个基于VxWorks的Web服务器程序。
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入门
1. 概述1.1 TORNADO 组件1.1.1 开发工具1.1.2 实时系统1.1.3 Tornado 文件目录1.2 硬件/软件配置1.3 booting介绍1.4 Tornado开始过程1.5 WDB 代理2 Projects2.1 bootable projects2.2 集成模拟器vxsim2.3 Downloadable projects 2.4 build说明3 WindSh 和Browser3.1 WindSh3.2 Browser4 CrossWind4.1 Debugging简介4.2 任务级Debugging 4.3 系统级DebuggingVxWorks 是美国Wind River System 公司(以下简称风河公司,即WRS 公司)推出的一个实时操作系统。
WRS 公司组建于1981年,是一个专门从事实时操作系统开发与生产的软件公司,该公司在实时操作系统领域被世界公认为是最具有领导作用的公司。
VxWorks 是一个运行在目标机上的高性能、可裁减的嵌入式实时操作系统。
它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
在美国的F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。
1984年WRS 公司推出它的第一个版本--VxWorks 1.0.1,在1999年推出了它的最新版本VxWorks 5.4。
从1995年以后,WRS 公司推出了一套实时操作系统开发环境-- Tornado。
1.1 Tornado2.0 组件Tornado是嵌入式实时领域里最新一代的开发调试环境。
Tornado给嵌入式系统开发人员提供了一个不受目标机资源限制的超级开发和调试环境。
T ornado包含三个高度集成的部分:. 运行在宿主机和目标机上的强有力的交叉开发工具和实用程序;. 运行在目标机上的高性能、可裁剪的实时操作系统VxWorks;. 连接宿主机和目标机的多种通讯方式,如:以太网,串口线,ICE或ROM仿真器等。
vxWorks开发入门教程索引
vxWorks还提供了内存泄漏检测功能,以帮助用户发现并及时处理内存泄漏问题。同时,vxWorks还支持内 存回收功能,可以自动回收不再使用的内存空间。
03 开发环境搭建与 配置
安装与配置开发环境
安装Wind River Workbench
下载并安装适用于您的操作系统的Wind River Workbench,这是开发vxWorks应用程序的集成开发环境( IDE)。
vxWorks开发入门教程索 引
contents
目录
• 引言 • vxWorks基础知识 • 开发环境搭建与配置 • 驱动程序开发与调试 • 中间件及组件应用 • 系统优化与性能提升 • 项目实战:基于vxWorks的智能家居控
制系统设计
01 引言
vxWorks概述
01
vxWorks是一款实时操作系统(RTOS),专为嵌入式系统设计 ,具有高性能、可确定性和低延迟等特点。
日志和跟踪工具
使用vxWorks提供的日志和跟踪工具来记录应用程序的运行状态和错误信息。这有助于 分析和解决问题。
04 驱动程序开发与 调试
设备驱动模型概述
01
设备驱动模型组成
包括设备、驱动和服务等组件, 用于实现硬件设备的抽象和访问 控制。
02
设备驱动模型作用
提供统一的设备访问接口,屏蔽 底层硬件细节,简化驱动开发流 程。
关键模块代码实现及讲解
设备驱动模块
展示设备驱动模块的代码实现,包括 设备初始化、数据读写等操作。
通信协议模块
介绍通信协议模块的实现,包括协议 的选择、封装和解封装等过程。
应用功能模块
展示应用功能模块的代码实现,如远 程控制、自动化场景设置等。
VxWorks 驱动程序安装指南说明书
Document: CTI_SIO_Install Revision: 1.01Date: January 4, 2010 VxWorksDriver InstallationVxWorks Driver Installation1.H ISTORY (3)2.H ARDWARE R EQUIREMENTS (4)3.D RIVER F ILES (4)4.C ONFIGURATION (4)4.1. BSP Files (4)4.1.1. config.h (4)4.1.1.1. INCLUDE_CTI_U550 (4)4.1.1.2. INCLUDE_CTI_U650 (5)4.1.1.3. INCLUDE_CTI_U850 (5)4.1.1.4. INCLUDE_CTI_EXAR17XX5XPCI (5)4.1.1.5. CTI_PCI_MAXBOARDS (5)4.1.1.6. CTI_PCI_MAXCHANS (5)4.1.1.7. INCLUDE_CTI_AUTO485POLLER (5)4.1.1.8. CTI_DEFAULT_BAUD (6)4.1.1.9. CTI_AUTO485SWITCHBAUD (6)4.1.1.10. CTI_AUTO485POLLER_DELAY (6)4.1.1.11. CTI_SYS_PCI_INTCONNECT() (6)4.1.1.12. CTI_SYS_INTCONNECT() (6)4.1.1.13. CTI_SYS_INTENABLE() (7)4.1.1.14. CTI_SYS_IN_BYTE() (7)4.1.1.15. CTI_SYS_OUT_BYTE() (7)4.1.1.16. CTI_SYS_IN_WORD() (8)4.1.1.17. CTI_SYS_OUT_WORD() (8)4.1.1.18. CTI_SYS_IN_LONG() (8)4.1.1.19. CTI_SYS_OUT_LONG() (9)4.1.2. sysLib.c (9)4.1.2.1. sysHwInit() (9)4.1.2.2. sysHwInit2() (10)4.2. Driver Files (10)4.2.1. sysCTISerial.c (10)4.2.1.1. Storage (10)4.2.1.2. Configuration (11)4.2.1.3. Interrupts (12)4.2.1.4. Enumeration (13)4.3. Tornado Projects (14)4.3.1. Connect Tech Inc. SIO (14)4.3.2. Use alternate base name (14)5.E XAMPLES (14)5.1. pcP3CTI_1 (14)5.2. pcP3CTI_2 (14)5.3. pcP3CTI_3 (15)6.I NSTALLATION C HECKLIST (16)1. HistoryOriginal draft.Added installation checklist.Added 3rd sample BSP.Fixed minor mistakes.Adapted for both Tornado and Workbench builds.2. Hardware RequirementsThis driver supports the following products:Xtreme/104 switchableXtreme/104 232BlueStorm/LPXtreme/104-Plus3. Driver FilesCopy the following files into your BSP directory (<WIND_INST>\target\config\<BSP_NAME>):00cti.cdfctiSio.cctiSio.hsysCTISerial.cusrCTISerial.c4. Configuration4.1. BSP FilesThe following files should be modified to support the CTI SIO driver. These modifications can be done in any other way as appropriate, but the following are suggestions made based on the Pentium III BSP. For sample modified files, refer to the files (of the same name) located within the driver distribution package. Sample files are from the Pentium III BSP. Note; file names and locations of information may differ in your BSP.<WIND_INST>\target\config\<BSP_NAME>\config.h<WIND_INST>\target\config\<BSP_NAME>\sysLib.cThe sample files included with the driver package should not be copied over any files in your BSP. These sample files are included only so that you can see the required changes in the context of complete files.4.1.1.config.hAdd a section to your config.h file so that there is a place for the driver options. If your config.h has an “if-def” block used to determine when to define INCLUDE_PCI, it is advised that you place this new section above that “if-def” block. This suggestion is made so that the “if-def” section can be modified to define INCLUDE_PCI when needed by any included CTI boards. The section for CTI driver configuration should surrounded by a check forINCLUDE_CTI_SIO being defined.For example:/* Connect Tech Inc. serial driver options */#if defined(INCLUDE_CTI_SIO)#define INCLUDE_CTI_U550/* support for 550 UARTs */#endif/* defined(INCLUDE_CTI_SIO) */A complete list of the available configuration options follows:4.1.1.1.INCLUDE_CTI_U550Define INCLUDE_CTI_U550 to include support for Xtreme/104 products that utilize 550 UARTs. This can be determined by examining the UART chips on the Xtreme/104 board itself, or by contacting CTI support staff.Usage:#define INCLUDE_CTI_U5504.1.1.2.INCLUDE_CTI_U650Define INCLUDE_CTI_U650 to include support for Xtreme/104 products that utilize 650 UARTs. This can be determined by examining the UART chips on the Xtreme/104 board itself, or by contacting CTI support staff.Usage:#define INCLUDE_CTI_U6504.1.1.3.INCLUDE_CTI_U850Define INCLUDE_CTI_U850 to include support for Xtreme/104 products that utilize 850 UARTs. This can be determined by examining the UART chips on the Xtreme/104 board itself, or by contacting CTI support staff.Usage:#define INCLUDE_CTI_U8504.1.1.4.INCLUDE_CTI_EXAR17XX5XPCIDefine INCLUDE_CTI_EXAR17XX5XPCI to include support for BlueStorm/LP and Xtreme/104-Plus products. You should also include you BSP’s PCI support if these pr oducts are to be used.Usage:#define INCLUDE_CTI_EXAR17XX5XPCI4.1.1.5.CTI_PCI_MAXBOARDSCTI_PCI_MAXBOARDS is used to define the maximum number of CTI PCI boards that can be enumerated. If not defined the default is 1.Usage:#define CTI_PCI_MAXBOARDS X/* where X is the maximum number of boards */4.1.1.6.CTI_PCI_MAXCHANSCTI_PCI_MAXCHANS is used to define the maximum number of serial channels that can be used by enumerated CTI PCI devices. This number is not the maximum per CTI PCI device, it is the maximum total number of channels across all CTI PCI devices. If not defined the default is 8.Usage:#define CTI_PCI_MAXCHANS X/* where X is the maximum number of channels */4.1.1.7.INCLUDE_CTI_AUTO485POLLERWhen using half-duplex RS485, the receiver and transmitter need to be toggled on and off depending on whether data is being sent or received. On CTI products that do not utilize UARTs with the capability to do this automatically, the driver must perform the toggling.This can be done in one of two ways; Using the interrupt service routine (ISR) of thechannel; Using a watchdog timer as a poller. In order to use the watchdog timerINCLUDE_CTI_AUTO485POLLER must be defined.Usage:#define INCLUDE_CTI_AUTO485POLLER4.1.1.8.CTI_DEFAULT_BAUDCTI_DEFAULT_BAUD is used to define the default baud rate when the serial channels are initialized. If not defined the default is 9600.Usage:#define CTI_DEFAULT_BAUD X/* where X is the default baud rate in bps */4.1.1.9.CTI_AUTO485SWITCHBAUDWhen using the CTIAUTO485SWITCHED auto 485 direction control method,CTI_AUTO485SWITCHBAUD defines the baud rate used to switch between ISR and poller methods. When the baud rate is less than CTI_AUTO485SWITCHBAUD the ISR method is used, else the poller method is used. If not defined the default is 9600.Usage:#define CTI_AUTO485SWITCHBAUD X/* where X is the baud rate in bps */4.1.1.10.CTI_AUTO485POLLER_DELAYWhen the poller auto 485 direction control method is being used a watchdog timerperforms a polling operation to look for the end of a transmit. This watchdog timer is set to expire every CTI_AUTO485POLLER_DELAY ticks. If not defined the default is 1.Usage:#define CTI_AUTO485POLLER_DELAY X/* where X is the delay in ticks */4.1.1.11.CTI_SYS_PCI_INTCONNECT()The CTI_SYS_PCI_INTCONNECT() macro is used to connect a PCI device interrupt to an interrupt service routine. The default definition of this macro uses pciIntConnect().Usage:/** _intLevel_ - interrupt level to connect _isr_ to* _isr_ - interrupt service routine to connect to _intLevel_* _arg_ - argument to be passed to _isr_* _result_ - STATUS result of the macro*/#define CTI_SYS_PCI_INTCONNECT(_intLevel_, _isr_, _arg_, _result_) \{ \/* place desired code here */ \}4.1.1.12.CTI_SYS_INTCONNECT()The CTI_SYS_INTCONNECT() macro is used to connect a device interrupt to an interrupt service routine. The default definition of this macro uses intConnect().Usage:/** _intLevel_ - interrupt level to connect _isr_ to* _isr_ - interrupt service routine to connect to _intLevel_* _arg_ - argument to be passed to _isr_* _result_ - STATUS result of the macro*/#define CTI_SYS_INTCONNECT(_intLevel_, _isr_, _arg_, _result_) \{ \/* place desired code here */ \}4.1.1.13.CTI_SYS_INTENABLE()The CTI_SYS_INTENABLE() macro is used to enable an interrupt level. The defaultdefinition of this macro uses sysIntEnablePIC().Usage:/** _intLevel_ - interrupt level to enable* _result_ - STATUS result of the macro*/#define CTI_SYS_INTENABLE(_intLevel_, _result_) \{ \/* place desired code here */ \}4.1.1.14.CTI_SYS_IN_BYTE()The CTI_SYS_IN_BYTE() macro is used to read an 8 bit value. The default definition of this macro uses sysInByte() for port I/O and does a direct assignment for memory I/O.Usage:/** _ioMode_ - I/O mode (CTIIOPORT or CTIIOMEM)* _address_ - address to read from* _value_ - receives 8 bit value read from _address_*/#define CTI_SYS_IN_BYTE(_ioMode_, _address_, _value_) \{ \if((_ioMode_) == CTIIOPORT) { \/* place port I/O code here */ \} \else { \/* place memory I/O code here */ \} \}4.1.1.15.CTI_SYS_OUT_BYTE()The CTI_SYS_OUT_BYTE() macro is used to write an 8 bit value. The default definition of this macro uses sysOutByte() for port I/O and does a direct assignment for memory I/O.Usage:/** _ioMode_ - I/O mode (CTIIOPORT or CTIIOMEM)* _address_ - address to write to* _value_ - 8 bit value to write to _address_*/#define CTI_SYS_OUT_BYTE(_ioMode_, _address_, _value_) \{ \if((_ioMode_) == CTIIOPORT) { \/* place port I/O code here */ \} \else { \/* place memory I/O code here */ \} \}4.1.1.16.CTI_SYS_IN_WORD()The CTI_SYS_IN_WORD() macro is used to read a 16 bit value. The default definition of this macro uses sysInWord() for port I/O and does a direct assignment for memory I/O.Usage:/** _ioMode_ - I/O mode (CTIIOPORT or CTIIOMEM)* _address_ - address to read from* _value_ - receives 16 bit value read from _address_*/#define CTI_SYS_IN_WORD(_ioMode_, _address_, _value_) \{ \if((_ioMode_) == CTIIOPORT) { \/* place port I/O code here */ \} \else { \/* place memory I/O code here */ \} \}4.1.1.17.CTI_SYS_OUT_WORD()The CTI_SYS_OUT_WORD() macro is used to write a 16 bit value. The default definition of this macro uses sysOutWord() for port I/O and does a direct assignment for memory I/O.Usage:/** _ioMode_ - I/O mode (CTIIOPORT or CTIIOMEM)* _address_ - address to write to* _value_ - 16 bit value to write to _address_*/#define CTI_SYS_OUT_WORD(_ioMode_, _address_, _value_) \{ \if((_ioMode_) == CTIIOPORT) { \/* place port I/O code here */ \} \else { \/* place memory I/O code here */ \} \}4.1.1.18.CTI_SYS_IN_LONG()The CTI_SYS_IN_LONG() macro is used to read a 32 bit value. The default definition of this macro uses sysInLong() for port I/O and does a direct assignment for memory I/O.Usage:/** _ioMode_ - I/O mode (CTIIOPORT or CTIIOMEM)* _address_ - address to read from* _value_ - receives 32 bit value read from _address_*/#define CTI_SYS_IN_BYTE(_ioMode_, _address_, _value_) \{ \if((_ioMode_) == CTIIOPORT) { \/* place port I/O code here */ \} \else { \/* place memory I/O code here */ \} \}4.1.1.19.CTI_SYS_OUT_LONG()The CTI_SYS_OUT_LONG() macro is used to write a 32 bit value. The default definition of this macro uses sysOutLong() for port I/O and does a direct assignment for memory I/O.Usage:/** _ioMode_ - I/O mode (CTIIOPORT or CTIIOMEM)* _address_ - address to write to* _value_ - 32 bit value to write to _address_*/#define CTI_SYS_OUT_LONG(_ioMode_, _address_, _value_) \{ \if((_ioMode_) == CTIIOPORT) { \/* place port I/O code here */ \} \else { \/* place memory I/O code here */ \} \}4.1.2.sysLib.cAdd a section to your sysLib.c file that includes the file sysCTISerial.c. This file includes the CTI SIO driver and defines routines used to configure the CTI serial channels. This section should come after the PCI configuration files have been included and should be surrounded by a check for INCLUDE_CTI_SIO being defined.For example:#if defined(INCLUDE_CTI_SIO)#include "sysCTISerial.c"#endif/* defined(INCLUDE_CTI_SIO) */In addition to including the driver and driver configuration routines, the routines sysHwInit() and sysHwInit2() need to be modified to call the serial configuration routines defined in sysCTISerial.c.4.1.2.1.sysHwInit()During sysHwInit(), sysCTISerialHwInit() should be called to initially configure the CTIserial channels. This call should be made after any PCI initialization in order for CTI PCI adapters to be configured.For example:#if defined(INCLUDE_CTI_SIO)sysCTISerialHwInit();#endif/* defined(INCLUDE_CTI_SIO) */4.1.2.2.sysHwInit2()During sysHwInit2(), sysCTISerialHwInit2() should be called to connect and enableinterrupts used by the CTI serial channels.For example:#if defined(INCLUDE_CTI_SIO)sysCTISerialHwInit2();#endif/* defined(INCLUDE_CTI_SIO) */4.2. Driver FilesThe file sysCTISerial.c, which is included into sysLib.c, needs to be configured to properly match the setup of your system.4.2.1.sysCTISerial.csysCTISerial.c contains rountines used to configure any CTI serial adapters you have. The configuration includes:storage for board and channel structuresboard/channel configuration and initializationinterrupt connecting and enablingchannel enumerationThe code in this section is only meant to serve as a short example. For a more complete sample refer to the sample BSP’s provided with the driver files. For a description of routine parameters refer to the documentation for that routine.4.2.1.1.StorageEach board and channel must have a corresponding structure allocated for it. This istypically done by declaring local variables in the file sysCTISerial.c.Typically one board structure (CTI_BOARD) is defined for each non-PCI CTI adapter.For example:LOCAL CTI_BOARD ctiXt1Board;LOCAL CTI_BOARD ctiXt2Board;For each of the non-PCI adapters, an array of channel structures should be defined aswell. The size of these arrays depends on the number of channels supported by theadapters.For example:LOCAL CTI_CHAN ctiXt1Chans[8];LOCAL CTI_CHAN ctiXt2Chans[4];For PCI adapters, only one instance of CTI_PCI_DEVICESET need be defined. The maximum number of supported adapters and channels should be defined with CTI_PCI_MAXBOARDS and CTI_PCI_MAXCHANS (see section 4.1.1 - config.h for more information onCTI_PCI_MAXBOARDS and CTI_PCI_MAXCHANS).For example:#if defined(INCLUDE_PCI)LOCAL CTI_PCI_DEVICESET ctiPciDevset;#endif/* defined(INCLUDE_PCI) */4.2.1.2.ConfigurationDuring sysHwInit() sysCTISerialHwInit() should be called. This is where the board andchannels structures declared in the previous section are configured and initialized.Each non-PCI board structure should be configured using ctiBoardConfig() and initialized using ctiBoardHrdInit().PCI adapters should be enumerated and initialized using ctiPciConfig() and ctiPciHrdInit().For example:void sysCTISerialHwInit(void){if(OK == ctiBoardConfig(&ctiXt1Board,CTIU650,CTIIOPORT,0x300,0x340, /* 0 if status port not being used */0x05,7372800,4, /* 1 if using extended baud rates */ctiXt1Chans,8,NULL,NULL,0xFF)){if(sysBp) {ctiBoardHrdInit(&ctiXt1Board);}}if(OK == ctiBoardConfig(&ctiXt2Board,CTIU850,CTIIOPORT,0x200,0x240, /* 0 if status port not being used */0x0A,7372800,4, /* 1 if using extended baud rates */ctiXt2Chans,4,NULL,NULL,0xF)){if(sysBp) {ctiBoardHrdInit(&ctiXt2Board);}}#if defined(INCLUDE_PCI)if(OK == ctiPciConfig(&ctiPciDevset, NULL, NULL)) {if(sysBp) {ctiPciHrdInit(&ctiPciDevset);}}#endif/* defined(INCLUDE_PCI) */}4.2.1.3.InterruptssysCTISerialHwInit2() should be called during sysHwInit2() and is responsible for connecting and enabling interrupts used by the CTI adapters.The operations of connecting an interrupt to an interrupt service routine as well asenabling the interrupt have been encapsulated into driver rountines ctiBoardIntConnect() and ctiPciIntConnect(). The behaviour of these routines is controlled by the macrosCTI_SYS_INTCONNECT(), CTI_SYS_PCI_INTCONNECT(), and CTI_SYS_INTENABLE(). These macros can be redefined from their default behaviour. See section 4.1.1 - config.h formore information on CTI_SYS_INTCONNECT(), CTI_SYS_PCI_INTCONNECT(), andCTI_SYS_INTENABLE(). These routines do not have to be used and in some cases may not be sufficient. The specifics of their operation can be seen in ctiSio.c.For example:void sysCTISerialHwInit2(void){ctiBoardIntConnect(&ctiXt1Board);ctiBoardIntConnect(&ctiXt2Board);#if defined(INCLUDE_PCI)ctiPciIntConnect(&ctiPciDevset);#endif/* defined(INCLUDE_PCI) */}4.2.1.4.EnumerationEach serial channel must be associated with a device. The CTI serial channels areenumerated using sysCTISerialChanGet(). This routine takes an index value specifyingwhich channel structure to retrieve, and effectively acts as a look-up table for thechannels. The order in which the channels are returned determines the order in which the channels are associated with device names.For example:SIO_CHAN* sysCTISerialChanGet(int channel/* serial channel */){if((channel >= 0) && (channel < 8)) {return((SIO_CHAN*)&ctiXt1Chans[channel]);}else if((channel >= 8) && (channel < (8 + 4))) {return((SIO_CHAN*)&ctiXt2Chans[channel - 8]);}#if defined(INCLUDE_PCI)else if((channel >= (8 + 4)) &&(channel < (8 + 4 + hans))){return((SIO_CHAN*)&(ctiPciDevset.pChans[channel - 8 - 4]));}#endif/* defined(INCLUDE_PCI) */return((SIO_CHAN*)ERROR);}The total number of channels needs to be reported using sysCTISerialGetNumChans(). This routine simply needs to return the total number of channels being used across all CTIadapters.For example:UINT16sysCTISerialGetNumChans(void){UINT16retVal = 0;retVal += 8;retVal += 4;#if defined(INCLUDE_PCI)retVal += hans;#endif/* defined(INCLUDE_PCI) */return(retVal);}4.3. Tornado/WorkBench ProjectsBootable VxWorks image projects based on a BSP containing the CTI driver files will have a new folder available under hardware\peripherals\serial called “Connect Tech Inc.”. This folder contains components for controlling the CTI serial driver. A description of the components follows:4.3.1.Connect Tech Inc. SIOThis component controls INCLUDE_CTI_SIO (used earlier when including the CTI serial driver in the BSP).e alternate base nameIf this component is not included, the CTI serial channels will be named “/tyCo/X” where X is the channel index value and is based on the defined NUM_TTY value so that the names do not collide with other serial devices. However, it may be desireable to use a different base name. By including the Use alternate base name component, the default behaviour is to name the CTI serial channels “/tyCTI/X” where X is the channel index value starting at 0.The Use alternate base name component has a parameter called CTI_TY_NAME_BASE which can be used to set a base name other than “/tyCTI/”.5. ExamplesIncluded with the driver files are three example BSP’s. These example BSP’s are based on the Pentium III BSP from WindRiver. A description of each of the example BSP’s follows:5.1. pcP3CTI_1This example is based on the following CTI serial adapters:Xtreme/104 RS-2328 channels.Base I/O address is 0x300.IRQ is 10.Status port is in use.Extended baud rates not in use.BlueStorm/LP RS-2324 channels.5.2. pcP3CTI_2This example is based on the following CTI serial adapters:Xtreme/104 14 RS-232 channels.Base I/O address is 0x300.IRQ is 10.Status port is in use.Extended baud rates not in use.Xtreme/104 28 channels.Base I/O address is 0x200.Channels 1, 3, 5, and 7 are on IRQ 5, channels 2, 4, 6, and 8 are on IRQ 9. SeeMode 2 in the Interrupt Selection section of the Xtreme/104 manual.Status port is not in use.Extended baud rates in use.Channels 1 and 2 are RS-232, channels 3, 4, and 5 are RS-485 full-duplex,channels 6, 7, and 8 are RS-485 half-duplex.Xtreme/104-Plus Switchable4 channels.Channels 1 and 2 are RS-485 full-duplex, channels 3 and 4 are RS-232.5.3. pcP3CTI_3This example is based on the following CTI serial adapters:BlueStorm/LP8 RS-232 channels.6. Installation Checklist。
VxWorks基础培训
SHELL
EDIT DEBUGGER
Project
Browser
Windview
WDB
The WDB (Wind DeBug) protocol specifies how the target server (on the host) communicates with the target agent (on the target).
在VxWorks中,任务有几种状态 :就绪 (READY)、阻塞(PEND)、睡眠 (DELAY)、挂起(SUSPEND)及它们的 组合DELAY+S、PEND+S、PEND+T、 PEND+S+T、State+I。
任务状态转换
• Wind微内核的状态迁移表如下图所示:
Wind内核的任务调度
• 多任务处理需要一个调度法则对CPU准备运行的
基于优先级的抢占式调度与轮转调度算法相结合调度示意图
抢占上锁
• Wind的调度器可以通过tasklock( )和
taskUnlock( )对一个任务锁定或允许抢先调 度。当一个任务通过调用taskLock( )来锁定 抢先调度,在任务的运行期间就避免了高 优先级的任务的抢占。
VxWorks任务编程接口
删除安全
• 互斥中的另一个问题涉及到任务的删除。删除一
个在临界资源中的正在执行的任务往往会带来严 重的错误。
• 互斥信号量提供了一个SEM_DELETE_SAFE的参
数使得每个semTake()都含有taskSafe(),且每 个semGive()都含有taskUnsafe()。通过这个方法, 一个持有信号量的任务就可以得到删除保护。
共享内存访问互斥
VxWorks编程指导
Wind River哲学是利用两个相互协作的操作系统来互相补充对方的不足(譬如VxWorks和Windows 或 VxWorks和Unix),让他们各尽所长。VxWorks为应用提供实时性,而主机被用来进行应用开发和运行非实时的应用程序。
VxWorks是可以裁剪的,你可以将VxWorks裁剪为只包含你的应用所需要的部件。在开发期间为了方便你的开发,你可以加入网络部件,当发行最终版本时为了节约资源你可以轻松的去掉网络部件。
dosFs为面向文件的设备驱动程序提供的服务在dosFsLib里实现。
1.3.2. RT-11兼容文件系统rt11Fs
rt11Fs文件系统兼容于RT-11操作系统。该文件系统一直被实时应用使用,因为该文件系统下的所有文件都是连续存储的。但是它缺少树状文件组织结构,树状文件组织结构对大容量磁盘是特别有用的。同时,呆板的连续存储空间分配会导致大量的磁盘碎片。所以,dosFs要优于rt11Fs。
1.3.5. CDROM文件系统
VxWorks为了让应用读写按照ISO9660文件系统标准格式化的CDROM设备提供了cdRomFs。初始化cdRomFs文件系统后,挂接cdRomFs到一个CDROM设备,就可以用POSIX标准的I/O调用来读CDROM。
1.3.6. 可替换的文件系统
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入门
嵌入式实时操作系统VxWorks入门VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
在美国的F-16、FA-18 战斗机、B-2隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。
VxWorks原先对中国区禁止销售,自解禁以来,在我们的军事、通信、工业控制等领域得到了非常广泛的应用。
嵌入式系统的调试方法一般为通过PC(宿主机)上的集成开发环境交叉编译针对特定电路板(目标机)的程序,然后将程序通过目标板的JTAG、串口或网口等途径下载到目标板上运行。
如图1。
因此,为了构造一个嵌入式系统的学习环境,拥有一块包含CPU、存储器及I/O电路(构造计算机系统)的目标电路板往往是必要的。
虽然许多集成开发环境附带模拟软件,但仅限于指令集的模拟,均无法模拟物理的目标机硬件平台,因而在其上只能进行应用程序的象征性模拟开发。
但是,并非所有人都能拥有一块物理的电路板。
在这种情况下,我们如何构造一个模拟的开发环境,其学习效果就如同拥有完全真实的电路板一样呢? 本文试图解答此问题,主体内容包括四个方面:1.利用VMware等软件模拟真实的目标机;2.构建VMware虚拟PC上VxWorks BSP,建立Bootrom和OS映像;3.修改Tornado相关设置,连接宿主机与目标机,建立调试通道;4.写一个简单的应用程序并下载到目标系统运行。
图1 嵌入式系统的调试本章工作的最终目标为:(1)VxWorks在VMware启动成功并顺利运行,如图2;图2 在VMware中运行的VxWorks(2)可在Tornado上针对目标板编译程序并进行调试,如图3。
图3 与目标机建立调试通道的Tornado1. 模拟目标机PC也具有目标机的所有特点,实际上,我们可以把PC作为嵌入式系统的目标机,从而构造如图4所示的开发模型:图4 PC作为目标机很遗憾,这种方法实际上非常麻烦,同时开动两台PC进行调试将使你和你的室友饱受折磨,既然他如此地热切于游戏和上网。
Vxworks学习资料整理
Vxworks学习资料整理Vxworks学习资料整理 (1)1 基于硬盘启动的Vxworks环境搭建 (3)2 Vxworks引导盘制作 (6)2.1 通过DOS加载VxWorks方法 (6)2.2 Bootrom三种类型 (7)2.3 VxWorks映象 (7)2.4 Bootrom.sys最快制作方法 (8)2.5 从网络引导 (8)2.6 从本地硬盘引导 (9)2.7 制作bootrom文件 (9)2.8 Bootrom编译步骤 (11)2.9 用BSP生成Bootable工程(即我们的程序文件) (12)2.10 FTP Server下载VxWorks (14)3 Tornado调试环境的建立 (17)3.1.1 配置文件config.h (17)3.1.2 网络连接 (18)6 从主机搭接(attach)到目标机 (21)7.1.3 串口连接 (21)4 4.Config.h文件注释说明 (22)4.1 启动行说明 #define DEFAULT_BOOT_LINE \: (22)4.2 Config.h 文件说明 (23)4.3 启动参数结构体 BOOT_PARAMS (35)4.4 booting过程介绍,比较详细 (39)5 sysClkRateGet();返回系统时钟每秒的tick数量, tick详解 (43)6 中断应用设计要点 (44)7 驱动程序设计 (49)8 缩短vxworks的启动时间 (52)9 调试篇 (55)10 驱动编程步骤 (55)10.1 将驱动程序增加到“系统驱动程序列表”中 (55)10.2 将设备增加到“系统设备列表”中 (55)10.3 打开设备,得到文件描述符 (55)10.4 SELECT机制的使用 (56)10.4.1 select( )函数翻译 (58)11 VxWorks系统的网络驱动(END) (60)12 VXworks操作系统中信号量用于多任务同步与互斥的讨论 (62)12.1 二进制信号量实现互斥和同步 (64)12.1.1 互斥的实现: (64)12.1.2 同步的实现: (65)12.2 互斥信号量 (67)13 Tornado的文件目说明录 (68)14 Shell 内置命令说明 (72)14.1 任务管理 (72)14.2 任务状态信息 (72)14.3 系统修改和调试 (73)14.4 对象命令( WindSh Commands for Object Display ) (73)14.5 WindShell and Browser, Shell 命令 (74)15 驱动篇 (82)16 中断篇 (83)16.1 中断服务程序ISR编写注意事项 (83)16.2 中断号与中断向量的转换 (84)16.3 安装中断服务程序 intConnect() (84)16.4 调试中断服务程序方法 (84)17mkboot批处理命令详细解释 (84)18 MakeFile 说明 (86)19 VxWorks5.4中的输入输出重定向 (89)19.1 vxworks屏幕输出, 一般来说用printf都是串口/shell输出,串口输出就可以到屏幕上了? (89)19.2 20.2 VxWorks中针对X86开发时标准输入输出的重定向? (90)20 怎样加入外部.o文件? (93)21 如何在Vxworks中使用 cd ,pwd , ls 命令:启用File System and Disk Utilities 组件(INCLUDE_DISK_UTIL),可在shell下用pwd/cd/ls等命令 (94)22 Error: image is larger than 524288 bytes (94)23 proxyArpDefaultOn()未定义解决方法? (95)24 如何将VxWorks的系统定时间隔或系统Ticks设置为1ms (95)25 read/write、fread/fwrite、fopen/open有什么区别 (96)26 快速启动 (100)27 启动时报ATA0a和硬盘启动相关问题 (100)28 如何安装USB2.2新版本及编译USB驱动? (101)29 WindML、图形界面相关问题 (102)29.1 WindML,ugldemo出错? (102)29.2 5101 VxWorks黑屏问题? (102)29.3 添加ugldemo.c后,编译报undefined reference to “ugltextdraw”错误一大堆? (103)29.4 WindML 中文字库显示? (103)30 VxWork6.8相关问题 (105)30.1 ELF和bin文件的区别? (105)30.2 diab和GNU的区别? (106)31 No such file or directory错误? (108)专业术语:WTX协议:(Wind River Tool eXchange): 用于开发机内部Tornado工具与Target Server 之间通信.WDB协议:(Wind DeBug): 用于主机Target Server与目标机之间的通信.1基于硬盘启动的Vxworks环境搭建VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS)。
VxWorks使用说明书
1、概述VxWorks操作系统的集成环境叫Tornado。
Tornado集成环境提供了高效明晰的图形化的实时应用开发平台,它包括一套完整的面向嵌入式系统的开发和调测工具。
Tornado环境采用主机-目标机交叉开发模型,应用程序在主机的Windows环境下编译链接生成可执行文件,下载到目标机,通过主机上的目标服务器(Target Server)与目标机上的目标代理(Target Agent)的通信完成对应用程序的调试、分析。
它主要由以下几部分组成:1.1 VxWorks高性能的实时操作系统;1.2 应用编译工具;1.3 交互开发工具;2、Tornado集成环境的各组件功能2.1 Tornado开发环境Tornado是集成了编辑器、编译器、调试器于一体的高度集成的窗口环境,同样也可以从Shell窗口下发命令和浏览。
2.2 WindConfig:Tornado系统配置通过WindConfig可选择需要的组件组成VxWorks实时环境,并生成板级支持包BSP的配置。
通过修改config.h可以实现WindConfig的所有功能,并且,可以实现WindConfig不能实现的功能。
2.3 WindSh:Tornado外壳WindSh是一个驻留在主机内的C语言解释器,通过它可运行下载到目标机上的所有函数,包括VxWorks和应用函数。
Tornado外壳还能解释常规的工具命令语言TCL。
WindSh不仅可以解释几乎所有的C语言表达式,而且可以实现所有的调试功能。
它主要有以下调试功能:下载软件模块;删除软件模块;产生任务;删除任务;设置断点;删除断点;运行、单步、继续执行程序;查看内存、寄存器、变量;修改内存、寄存器、变量;查看任务列表、内存使用情况、CPU利用率;查看特定的对象(任务、信号量、消息队列、内存分区、类);复位目标机。
2.4 浏览器Tornado浏览器可查看内存分配情况、任务列表、CPU利用率、系统目标(如任务、消息队列、信号量等)。
Vxworks 开发工具(tornado)的使用教程
一.认识Tornado II和VxworksVxWorks是一种嵌入式的实时操作系统,所谓嵌入式系统就是用户自己开发设计板子,板子上通常有一颗CPU,VxWorks支持32位的CPU,包括Intel公司的x86、Motorola 公司的68k和PowerPC、MIPS、ARM、Intel公司的i960、Hitachi公司的SH。
我们设计的板子通常没有软件的自开发能力,所以我们需要一台通用机来辅助开发,这台通用机可以是PC或工作站,我们称辅助我们软件开发的通用机为宿主机(Host),用户自己开发的板子为目标机(Target)。
宿主机上要有一个集成开发环境(IDE)来辅助我们的软件开发,这套集成开发环境可以运行在Windows95/NT或UNIX下,包括交叉编译器(Cross Compiler)和交叉调试器(Cross Debugger),所谓交叉编译器就是在宿主机上编译生成可以在目标机上运行的代码IMAGE,交叉调试器就是通过宿主机和目标机之间的某种耦合方式实现前后台调试。
我们称宿主机上的这套集成开发环境为Tornado,编译生成的目标机上的可执行代码IMAGE为VxWorks。
在系统安装的时候,集成调试环境和VxWorks的原材料(一些obj文件)都安装到宿主机上,编译生成的在目标机上运行的IMAGE内包含操作系统。
二.Tornado II IDE的主要组成Tornado II IDE的主要组成部分有:1.集成的源代码编辑器(可惜不支持汉字输入)。
2.工程管理工具。
3.集成的C和C++编译器和make工具。
4.浏览器,用于收集可视化的资源,*目标系统。
5.CrossWind,图形化的增强型调试器。
6.WindSh,C语言命令外壳,用于控制目标机。
7.VxSim,集成的vxworks目标机仿真器。
8.WindView,集成的软件逻辑分析仪。
9.可配置的各种选项,可以改变归Tornado GUI的外观等。
vxworks命令教程
memShow
显示系统内存使用情况,包括内存分区、空闲内存等信息。
taskShow
显示当前系统中所有任务的状态信息,如任务名、优先级、状态等。
semShow
显示系统中所有信号量的状态信息,如信号量名、计数值等。
系统资源管理和优化
01
02
03
memPartCreate memPartDelete taskSpawn
等。
高级命令探讨
深入探讨一些高级命令和特性,如 系统调试、性能分析等。
命令使用示例
通过具体示例演示如何在实际开发 中使用这些命令。
注意事项和最佳实践
提供一些使用命令行接口时的注意 事项和最佳实践,以帮助开发者避 免常见错误并提高开发效率。
02
VxWorks命令基础
命令格式和约定
01
命令格式
VxWorks命令通常由命令名、 参数和选项组成,格式为“命令
使用`read()`函数从已打开的文件 中读取数据,需要指定缓冲区及 其大小。
使用`write()`函数向已打开的文 件中写入数据,同样需要指定缓 冲区及其大小。
使用`lseek()`函数可以移动文件 指针到指定位置,以便进行随机 访问。
文件属性和权限设置
获取文件属性
使用`stat()`函数获取文件的属性信息, 如文件大小、创建时间等。
执行最近的包含特定字符串的命令。
自定义命令和脚本编写
alias
创建命令别名,例如`alias ll='ls -l'`。
function
定义函数,可以包含一系列命令,例 如`function myfunc { echo "Hello, world!"; }`。
VxWorks 开发简明培训教程Manual
TAO-TAO-LE板级功能测试程序暨VxWorks开发简明培训教程朱海涛2003年11月关于本手册本手册读者须具有基本的Windows操作经验,并且已经参加过03年八月份的培训:“Tornado集成开发环境的操作及基于PowerPC/VxWorks的编程实例”。
没有参加过该次培训的读者,请到/report/jicheng.doc下载相关文档学习,本手册第一章也将对之做一简单复习。
此外,读者最好具有在Windows下架设简单FTP服务的经验。
本手册第一章会简单涉及这些内容。
读者应该仔细阅读本手册后再操作,你碰到的问题很可能是由于疏忽了本手册的某些细节而造成的,以避免浪费不必要的时间。
欢迎指正对本手册的纰漏,提出宝贵意见。
mailto:zhuht@几个关键名词:Host(开发主机):即你的PC机,上面装有用于开发的Tornado,并架设了FTP服务器。
Target(目标机):VxWorks运行的PowerPC,我们目前使用MVME5100。
第一章 PowerPC及VxWorks的配置本章是对培训:“Tornado集成开发环境的操作及基于PowerPC/VxWorks的编程实例”的简单复习。
如果你已对其中内容熟悉,可以跳过本章。
以下的操作都是针对MVME5100而言的。
关于MVME5100的安装设置,请参考其Datasheet:MVME5100 Single Board Computer Installation and Use。
Step 1.准备10M(或100M)网线、串口线(注:串口线必须一端为RJ45接口,另一端为RS232- 9pin接口)各一根。
网线一端接到PowerPC的LAN1口,另一端接到HUB或Switch上;串口线的RJ45端接到PowerPC的DEBUG口,另一端接到自己PC上的RS232口。
如图1 -图 1 - 1注:请勿将串口线的RJ45口接到PowerPC的LAN1口,将网线接到了PowerPC的DEBUG口。
第二讲 嵌入式操作系统VxWorks及其开发工具Tornado(2010)
第二讲:嵌入式操作系统VxWorks及其开发工具Tornado主讲人:办公地址:联系方式:刘利强31号楼222房间82519069上节课主要内容:⏹为什么要学习嵌入式技术⏹嵌入式系统概述⏹嵌入式系统的应用⏹嵌入式实时系统基础132基础知识介绍交叉开发环境的建立方法Tornado 工具及其使用方法4常用的软件调试开发方法⏹什么是VxWorks?⏹为什么VxWorks被广泛采用?⏹VxWorks系统与通用操作系统的对比⏹什么是Tornado?⏹Tornado的工具及其开发环境⏹Tornado的目录结构⏹Tornado的主要目录结构什么是VxWorks?VxWorks操作系统是美国风河公司(Wind River System 公司,WRS)于1983年设计开发的一种运行在目标机上的高性能、可裁减的嵌入式强实时操作系统。
它凭借着良好的可持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据了重要一席。
VxWorks系统具备高可靠性和实时性,目前被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中。
如美国的F-16战斗机、FA-18战斗机、B-2隐形轰炸机、爱国者导弹上、火星探测器等均使用了VxWorks操作系统。
什么是VxWorks?VxWorks的主要组成如下:⏹高性能系统内核Wind➣多任务调度(基于优先级抢占方式的实时调度算法)➣内部任务的通讯⏹其它标准工具➣设备驱动➣文件系统➣I/O系统➣内存管理➣网络协议栈为什么VxWorks被广泛采用?⏹可靠性考虑操作系统的用户希望在一个工作稳定、可以信赖的环境中工作,而稳定、可靠是VxWorks的一个突出优点。
⏹实时性考虑⏹可裁剪性考虑由于存储空间和资源的限制,及提高运行效率考虑,用户在使用嵌入式操作系统时,并不是操作系统的每一个部件都要用到,例如图形显示、文件系统以及一些设备驱动在某些嵌入式系统中往往并不使用。
中文版教程
1-1、什么是TORNADO?Tornado是一个用于开发实时和嵌入式应用程序的集成化环境。
Tornado的主要组件有:1、VxWorks实时操作系统,运行于临界(time-critical)或运行嵌入式的应用程序。
2、用于测试,定时序,调试的集成化工具。
3、支持网络①处理器内部通信②远程文件处理③远程命令/函数执行④通过网络启动1-2、开发工具Tornado开发工具有:1、Launch一Tornado启动工具2、WindSh一与目标进行交互处理的工具3、CrossWind一源代码级调试工具4、Browser一显示系统信息5、Project Facility一配置应用程序或VxWorks6、WindView一分析多任务应用程序工具7、Simulator一在主机上仿真VxWorks目标机工具能够使用TCL进行配置1、增加新的功能2、配置用户的接口3、一些驻留目标机的工具可用大多数Wind River工具可以使用工具命令语言(TCL)(壹种类似于C或外壳式的描述性语言)进行配置。
在John Ousterhout写的Tcl and the Tk ToolKit书中有关于TCL更多的信息。
TCL允许使用者1、增加用户定义的命令2、使用新的菜单条、按钮配置TORNADO的接口界面TORNADO可使用于如下系统:Solaris 2.51, 2.6和2.7; Windows 95, 98和NT;HP-UX 10主机。
有一些界面配置在UNIX和WINDOWS上可能不兼容。
TORNADO内部已绑定了对GNU C++的支持。
1-3、实时系统?实时操作系统允许应用安全地处理临界区(meet critical deadlines)。
多任务地核心:1、实时调度(基于抢先式,优先级)2、任务内部通讯3、互斥运行其他标准工具围绕核心以库的方式建立起来与非实时操作系统的区别:1、基于抢先式优先级的调度2、速度快3、小巧并可配置(微核心结构)1-4、性能增强所有的任务驻留在通常的地址空间所有的任务运行于超级(特权)模式在UNIX/NT中,一个进程的DATA和BSS段拥有自己的内存,但共享TEXT段,用于运行相同的代码。
tornado调试技巧PPT课件
crossWind调试器
常见问题: 1、 如果在taskSpawn的时候选项中设置了 VX_UNBREAKABLE ,那么就不能设置断点 调试。
➢ 2、如果打开了优化开关,O2那么无法单步调 试,代码和汇编对不上。
➢ 3、 编译时没有使用-g编译开关。 会无法设 置断点
➢ lkAddr 察看该地址离哪些符号(函数名,全局变量名)比较近。
➢ lkup 察看变量的地址
注: 符号表是通过symTbl.c链接进来的,只包含了全局 信息。
Windsh-和调试相关
➢ b 设置和显示断点 b就是显示断点,b 地址-设置断点
➢ bd 删除断点 bd 地址
➢ bdall 删除所有断点 ➢ bh 设置硬件断点
Browser-堆栈
➢ 1、察看stack信息 可以察看当前stack使用量 可以察看最大stack的使用量
注意: 如果在taskSpawn的时候选项中设置了
VX_NO_STACK_FILL,那么就无法察看 stack的使用量。
在shell中用checkStack也可以察看stack的使用
Browser-spy
crossWind调试器
➢ 重要步骤 2、Debug->Source search path 中加上你要调试
的原代码的路径。
crossWind调试器-常用功能
➢ breakPoint:设置断点,当任务执行到本断点后会 stop,前提是我们设置了 auto attach to task,在 没有设置此选项的情况下,必须手工attach 到某一任 务。 有全局断点和任务断点
windView
➢ 察看和分析任务执行信息的图型工具。 ➢ 不常用
vxworks基础培训
操作系统的制作与下载
修改Config.h
• 如采用串口调试,可增加下列代码
• • • • • • • • • • #undefWDB_COMM_TYPE #define WDB_COMM_TYPE #undefWDB_TTY_CHANNEL #define WDB_TTY_CHANNEL #undefCONSOLE_BAUD_RATE #define CONSOLE_BAUD_RATE 115200 #undefWDB_TTY_DEV_NAME #define WDB_TTY_DEV_NAME "/tyCo/0" #undefWDB_TTY_BAUD #define WDB_TTY_BAUD /* default baud rate */ WDB_COMM_SERIAL 0
115200
烽火科技
操作系统的制作与下载
Build bootrom • • • • 修改BSP后,应生成对应的bootrom 在Tornado中选Build->Build Boot ROM BSP可选择ads860 Image一般选择bootrom.hex,仿真时选择 bootrom_uncmp
烽火科技
修改Config.h
• 10M网口使用cpm(0,0), 100M网口使用motfec(0,0) • host:后跟VxWorks操作系统在主机的存放路径,h指主机IP 地址,e指目标板IP地址,u指用户名,pwd指密码 • 实例:使用10M网口,VxWorks在主机D:\,主机地址 10.16.17.1,目标板地址10.16.17.2,账号及密码均为 tornado,其代码为: • “cpm(0,0)host:d:/vxWorks h= 10.16.17.1 e= 10.16.17.2 u=tornado pwd=tornado”
Tornado简单入门教程(一)——Demo1
Tornado简单⼊门教程(⼀)——Demo1前⾯的话Demo1是⼀个简单的博客系统(=。
=什么⽹站都叫系统)。
我们从这个简单的系统⼊⼿,去了解P+T+M⽹站的内部逻辑,并记住⼀些“规则”,⽅便我们进⼀步⾃⼰开发。
“规则”这个词特意打上了双引号,⽬的是想借此声明⼀点:本教程内不会将各语句背后的原理逐⼀讲明(事实上我也讲不清楚哈哈)。
我的着重点将在“怎样快速学会使⽤这个‘框架’去搭建我们想要的⽹站”,即“怎样快速上⼿⼀个⼯具”。
由于本⼈在技术上研究不深⼊不细致,所以⽤词或者内容上难免有不规范或错误之处,能理解的就⾃⾏理解哈。
当然愿意斧正的欢迎指出。
对了,本教程默认读者是有web开发基础的,明⽩“渲染”、“get请求”、“post请求”等分别是什么意思。
讲解模式基本的是:列出项⽬⽬录结构展⽰源码,通过部分源码注释(红⾊字)讲解列表项⽬根据⽹站逻辑结合“代码回顾”进⾏讲解希望⼤家复制源码(记得把红字注释删除)根据项⽬⽬录结构创建项⽬,或者直接将附件中的代码包拷到你的项⽬⽬录,跟着讲解⼀步⼀步试验。
OK,开始。
Demo1项⽬⽬录结构demo1demo.py-static-cssstyle.css-imgbg.jpglogo.png-templatesindex.htmlblog.html源码demo.py#!/usr/bin/env python# -*- coding: utf-8 -*-#⽤于规定字符编码,想要中⽂正常最好就加上这句import os.pathimport tornado.authimport tornado.escapeimport tornado.httpserverimport tornado.ioloopimport tornado.optionsimport tornado.webfrom tornado.options import define, options#巴拉巴拉import⼀⼤堆tornado的东西,反正都有⽤,原封不动即可import pymongo#这⾥是导⼊MongoDBdefine(“port”, default=8002, help=”run on the given port”, type=int)#定义监听的端⼝,随便挑个喜欢的数字吧class Application(tornado.web.Application):def __init__(self):handlers = [(r”/”, MainHandler),(r”/blog”, BlogHandler),]settings = dict(template_path=os.path.join(os.path.dirname(__file__), “templates”),static_path=os.path.join(os.path.dirname(__file__), “static”),debug=True,)conn = pymongo.Connection(“localhost”, 12345)self.db = conn[“demo”]tornado.web.Application.__init__(self, handlers, **settings)class MainHandler(tornado.web.RequestHandler):def get(self):self.render(“index.html”,)def post(self):import timetitle = self.get_argument(‘title’, None)content = self.get_argument(‘content’, None)blog = dict()if title and content:blog[‘title’] = titleblog[‘content’] = contentblog[‘date’] = int(time.time())coll = self.application.db.blogcoll.insert(blog)self.redirect(‘/blog’)self.redirect(‘/’)class BlogHandler(tornado.web.RequestHandler):def get(self):coll = self.application.db.blogblog = coll.find_one()if blog:self.render(“blog.html”,page_title = blog[‘title’],blog = blog,)else:self.redirect(‘/’)def main():tornado.options.parse_command_line()http_server = tornado.httpserver.HTTPServer(Application())http_server.listen(options.port)tornado.ioloop.IOLoop.instance().start()if __name__ == “__main__”:main()index.html<!DOCTYPE html><html lang=”zh-CN”><head><meta charset=”utf-8″><title>B06 Innovation Space</title><link rel=”stylesheet” type=”text/css” href=”{{ static_url(“css/style.css”) }}”><script type=”text/javascript”>window.setInterval(function() {go_to();},100);function go_to() {if( document.getElementById(“myArticle”).style.height < (document.getElementById(“myArticle”).scrollHeight – 4 ) + “px”)document.getElementById(“myArticle”).style.height = document.getElementById(“myArticle”).scrollHeight + “px”;}</script></head><body><div class=”main”><img class=”logo” src=”{{ static_url(“img/logo.png”) }}”><div class=”container”><h1>欢迎访问B06创新实验室的博客</h1><div class=”content”><form method=”post”><p>⽂章标题:</p><input type=”text” class=”Title” name=”title” placeholder=”在这⾥输⼊你的标题” /><p>⽂章正⽂:</p><textarea type=”text” class=”Article” id=”myArticle” name=”content” placeholder=”在这⾥输⼊你的正⽂”></textarea> <br/><input type=”submit” class=”Article Button Submit” value=”发布”/></form></div></div></div></body></html>blog.html<!DOCTYPE html><html lang=”zh-CN”><head><meta charset=”utf-8″><title>{{ page_title }}</title><link rel=”stylesheet” type=”text/css” href=”{{ static_url(“css/style.css”) }}”></head><body><div class=”main”><img class=”logo” src=”{{ static_url(“img/logo.png”) }}”><div class=”container”><h1>欢迎访问B06创新实验室的博客</h1><div class=”content”><div class=”Title”><p>{{ blog[‘title’] }}<span class=”Time”>{{ locale.format_date(blog[‘date’], relative=False) }}</span></p></div><div class=”Article”><p>{{ blog[‘content’] }}</p></div></div></div></div></body></html>部署项⽬从头开始说。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式培训专题微迪软件培训中心Tornado &VxWorks培训深圳市微迪软件技术有限公司培训中心嵌入式培训专题微迪软件培训中心实时系统概念•实时系统是对外来事件在限定时间内能做出反应的系统。
•指标–响应时间Response Time–生存时间Survival Time–吞吐量Throughput嵌入式培训专题微迪软件培训中心实时系统与普通系统•在实时计算中,系统的正确性不仅仅依赖于计算的逻辑结果而且依赖于结果产生的时间•对于实时系统来说最重要的要求就是实时操作系统必须有满足在一个事先定义好的时间限制中对外部或内部的事件进行响应和处理的能力•此外作为实时操作系统还需要有效的中断处理能力来处理异步事件和高效的I /O 能力来处理有严格时间限制的数据收发应用嵌入式培训专题微迪软件培训中心实时系统分类•根据不同的分类方法可以分为几种。
–方法一是分为周期性的和非周期性的(p e r i o d i c 和a p e r i o d i c )–方法二是分为硬实时和软实时(h a r d r e a l _t i m e 和s o f t r e a l _t i m e )–专用系统和开放系统–集中式系统和分布式系统嵌入式培训专题微迪软件培训中心实时多任务操作系统与分时多任务操作系统•分时操作系统,软件的执行在时间上的要求,并不严格,时间上的错误,一般不会造成灾难性的后果。
•实时操作系统,主要任务是对事件进行实时的处理,虽然事件可能在无法预知的时刻到达,但是软件上必须在事件发生时能够在严格的时限内作出响应(系统响应时间),即使是在尖峰负荷下,也应如此,系统时间响应的超时就意味着致命的失败。
另外,实时操作系统的重要特点是具有系统的可确定性,即系统能对运行情况的最好和最坏等的情况能做出精确的估计。
嵌入式培训专题微迪软件培训中心实时操作系统中的重要概念•系统响应时间(S y s t e m r e s p o n s e t i m e )系统发出处理要求到系统给出应答信号的时间。
•任务换道时间(C o n t e x t -s w i t c h i n g t i m e )是任务之间切换而使用的时间。
•中断延迟(I n t e r r u p t l a t e n c y )是计算机接收到中断信号到操作系统作出响应,并完成换道转入中断服务程序的时间。
嵌入式培训专题微迪软件培训中心实时操作系统应具有如下的功能•任务管理(多任务和基于优先级的任务调度)•任务间同步和通信(信号量和共享内存等)•存储器优化管理(含R O M 的管理)•实时时钟服务•中断管理服务嵌入式培训专题微迪软件培训中心硬实时、软实时(一)•硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的•软实时则没有那么严,只要按照任务的优先级,尽可能快地完成操作即可•对于软实时系统基于优先级调度的调度算法可以满足要求,提供高速的响应和大的系统吞吐率;而对于硬实时系统则完成t i m e l y r e s p o n s e 是必须的。
这两类系统的区别在于调度算法。
•实时操作系统是保证在一定时间限制内完成特定功能的操作系统。
例如,可以为确保生产线上的机器人能获取某个物体而设计一个操作系统。
在“硬”实时操作系统中,如果不能在允许时间内完成使物体可达的计算,操作系统将因错误结束。
在“软”实时操作系统中,生产线仍然能继续工作,但产品的输出会因产品不能在允许时间内到达而减慢,这使机器人有短暂的不生产现象。
嵌入式培训专题微迪软件培训中心硬实时、软实时(二)•软实时的RTOS 一般应用在消费类电子产品,如手持电脑、个人数字助理(PDA)和机顶盒等消费电子类。
WinCE 。
•硬实时的RTOS 一般应用于通信、控制和航空航天等实时性强和可靠性高的领域。
通信行业使用PSOS 、VxWorks 、VRTX,航天、航空使用VRTX 、VxWorks,工业PC 控制使用QNX 。
嵌入式培训专题微迪软件培训中心实时系统的体系结构设计•实时系统的体系结构必须满足–1.高运算速度–2.高速的中断处理–3.高的I/O 吞吐率–4.合理的处理器和I /O 设备的拓扑连接–5.高速可靠的和有时间约束的通信–6.体系结构支持的出错处理–7.体系结构支持的调度–8.体系结构支持的操作系统–9.体系结构支持的实时语言特性。
–10.系统的稳定性和容错也非常重要–11.还要考虑到实时的分布式应用。
嵌入式培训专题微迪软件培训中心实时进程调度算法(一)•静态的周期性调度–这种调度算法的基本思想是将处理器的时间分为"帧"。
•F I F O–也就是将系统中所有的任务组织成一个队列。
先到先服务•优先级队列算法–种算法从F I F O 发展而来。
给每个任务设定优先级,然后在F I F O 中按照优先级排列。
这种算法保证了高优先级的任务的完成,但是对于低优先级的任务很可能无法满足时间的正确性。
而且对低优先级的任务来说等待的时间是无法预知的。
•以上的调度算法都是独占的–即任务运行时,不允许别的任务抢先。
完成一个任务后才能完成下一个嵌入式培训专题微迪软件培训中心实时进程调度算法(二)•Rate Monatomic/Pacing 算法–此算法是基于静态优先级调度协议的方法。
此算法给系统中每个任务设置一个静态的优先级。
这个优先级的设定是在计算任务的周期性和任务需要满足的deadline 的时间的长短的基础上完成的。
周期越短,d eadline 越紧迫,优先级越高。
•Deadline Driven 算法–Deadline Driven 算法提供动态的优先级。
因为此算法根据任务满足d e a d l i n e 的紧迫性来修改任务的优先级,以保证最紧迫的任务能够及时完成。
•P r i o r i t y C e i l i n g 算法–这种算法用于抢先式多任务的实时操作系统。
该算法的基本思想是在系统中使用优先级驱动的可抢先的调度算法。
也就是系统首先调度高优先级的任务运行。
低优先级的任务在高优先级的任务运行时不能抢先;C P U 由高优先级进程独占。
嵌入式培训专题微迪软件培训中心嵌入式系统概述•嵌入式系统( Embedded Systems ) 是指以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
是将应用程序和操作系统与计算机硬件集成在一起的系统嵌入式培训专题微迪软件培训中心嵌入式硬件•嵌入式硬件包括处理器/微处理器、存储器及外设器件和I /O 端口、图形控制器等•特点:–1)对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核心的执行时间减少到最低限度。
–2)具有功能很强的存储区保护功能。
这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断。
–3)可扩展的处理器结构,以能最迅速地开展出满足应用的最高性能的嵌入式微处理器。
–4)嵌入式微处理器必须功耗很低,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式系统更是如此,如需要功耗只有m W 甚至μW 级。
嵌入式培训专题微迪软件培训中心嵌入式系统发展趋势•嵌入式应用软件的开发需要强大的开发工具和操作系统的支持。
•联网成为必然趋势•支持小型电子设备实现小尺寸、微功耗和低成本•提供精巧的多媒体人机界面嵌入式培训专题微迪软件培训中心实时系统内存管理•预先分配内存。
–在系统构造或编译时为每个任务指定其使用的内存空间。
这种方法对于硬实时系统来说是很合适的。
而且嵌入式实时操作系统很多都是在R O M 中运行,仅仅只有需要变化的数据才放在R A M 中。
这种系统在组成上无疑是静态的。
•虚拟内存–但必须给实时任务提供方法,以便将实时任务“锁”进内存,也就是系统在管理虚拟内存时,不将“锁”住的内存块换出物理内存。
嵌入式培训专题微迪软件培训中心嵌入式系统和实时系统•嵌入式系统经常被误解为就是实时性系统。
其实,多数嵌入式系统并不需要实时性•L i n u x 是嵌入式操作系统,并非实时操作系统。
•V x w o r k 、p S O S 、N e c u l e u s 和W i n d o w s s C E 是嵌入式实时操作系统一、实时多任务嵌入式培训专题微迪软件培训中心嵌入式培训专题微迪软件培训中心任务状态•实时系统的一个任务可有多种状态,其中最基本的状态有四种:–就绪态:任务只等待系统分配CPU 资源;–悬置态:任务需等待某些不可利用的资源而被阻塞;–休眠态:如果系统不需要某一个任务工作,则这个任务处于休眠状态;–延迟态:任务被延迟时所处状态;嵌入式培训专题微迪软件培训中心任务状态迁移就 绪 态延 迟 态悬 置 态休 眠 态最高优先级任务正执行嵌入式培训专题微迪软件培训中心任务状态迁移函数(一)•就绪态----> 悬置态s e m T a k e ()/m s g Q R e c e i v e ()•就绪态----> 延迟态t a s k D e l a y ()•就绪态----> 休眠态t a s k S u s p e n d ()•悬置态----> 就绪态s e m G i v e ()/m s g Q S e n d ()•悬置态----> 休眠态t a s k S u s p e n d ()嵌入式培训专题微迪软件培训中心任务状态迁移函数(二)•延迟态----> 就绪态expired delay •延迟态----> 休眠态taskSuspend()•休眠态----> 就绪态taskResume()/taskActivate()•休眠态----> 悬置态taskResume()•休眠态----> 延迟态taskResume()嵌入式培训专题微迪软件培训中心多任务内核•进行任务管理–任务是竞争系统资源的最小运行单元。
任务可以使用或等待CPU 、I/O 设备及内存空间等系统资源,并独立于其它任务,与它们一起并发运行(宏观上如此)。
VxWorks 内核使任务能快速共享系统的绝大部分资源,同时有独立的上下文来控制个别线程的执行。
•VxWorks 实时内核Wind 提供了基本的多任务环境,系统内核根据某一调度策略让它们交替运行。
•系统调度器使用任务控制块的数据结构(简记为TCB)来管理任务调度功能。
嵌入式培训专题微迪软件培训中心任务控制快(TCB)•任务控制块用来描述一个任务,每一任务都与一个TCB 关联。
•任务控制块里面包含了:–当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针–任务的“上下文”(context)。