VxWorks基础知识
- 格式:doc
- 大小:33.50 KB
- 文档页数:9
嵌入式实时操作系统VxWorks入门VxWorksVxWorks操作系统是美国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应用开发的思路,任务调度及任务同步、中断与任务的同步机制。
以上各章中将贯穿着许多实例,由于本文定位于入门级教程,所以文中的实例都将十分简单。
下面我们进入第一章内容的讲解。
嵌入式系统的调试调试方法一般为通过PC(宿主机)上的集成开发环境交叉编译针对特定电路板(目标机)的程序,然后将程序通过目标板的JTAG、串口或网口等途径下载到目标板上运行。
因此,为了构造一个嵌入式系统的学习环境,拥有一块包含CPU、存储器及I/O 电路(构造计算机系统)的目标电路板往往是必要的。
虽然许多集成开发环境附带模拟软件,但仅限于指令集的模拟,均无法模拟物理的目标机硬件平台,因而在其上只能进行应用程序的象征性模拟开发。
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 操作系统学习笔记1. VxWorks 任务任务:在执行时每个程序都被称之为任务。
VxWorks操作系统中,任务可以直接地或者以共享方式访问大多数系统资源,为了维护各自的线程,每个任务必须保持有足够的上下文环境。
(1) 任务状态:就绪(READY):该状态时任务仅等待CPU的状态,不等待其他任何资源。
阻塞(PEND):任务由于一些资源不可用而被阻塞时的状态。
睡眠(DELAY):出于睡眠的任务状态。
挂起(SUSPEND):该状态时任务不执行,主要用于调试用。
挂起仅仅约束任务的执行,并不约束状态的转换,因此pended-suspended状态时任务可以解锁,delayed-suspended状态时任务可以唤醒。
DELAY+S:既处于睡眠又处于挂起的任务状态。
PEND+S:既处于阻塞又处于挂起的任务状态。
PEND+T:带有超时值处于阻塞的任务状态。
PEND+S+T:带有超时值处于阻塞,同时又处于挂起的任务状态。
state+I:任务处于state且带有一个继承优先级。
------------------------------------------------------------------------| ready | ——> | pended | semTake () / msgQReceive () || ready | ——> | delayed | taskDelay () || ready | ——> | suspended | taskSuspend () || pended | ——> | ready | semGive () / msgQSend () || pended | ——> | suspended | taskSuspend () || delayed | ——> | ready | expired delay || delayed | ——> | suspended | taskSuspend () || suspended | ——> | ready | taskResume () / taskActivate () || suspended | ——> | pended | taskResume () || suspended | ——> | delayed | taskResume() |------------------------------------------------------------------------(2) Wind任务调度在Wind内核中,默认算法是基于优先级的抢占式调度算法,也可以使用轮转调度算法。
VxWorks基础知识收藏1.多任务:允许一个实时应用作为一系列独立任务来运行,各任务有各自的线程和系统资源。
3.任务切换之前要保存上下文。
4.优先级是动态的0~255,0级最高。
5.Wind内核taskLock()和taskUnlock()禁止和解除抢占,但对中断不起作用。
6.异常处理:VxWorks异常处理包,一般是将引起异常的任务休眠,保存任务在异常出错处的状态值。
内核和其它任务继续执行。
7.为什么要共享存储区:任务间通信的最简单的方法是采用共享存储区,也即相关的各个任务分享属于它们的地址空间的同一内存区域。
8. 为什么要互斥:当某一地址空间用于数据交换时,为了避免冲突,对于内存的锁定是非常重要的。
一般来说,关中断是最有效的解决互斥的方法。
但这对于实时应用来说,它阻止系统对外部事件的响应,无法满足实时性的要求。
同样,中断延迟也是不能接受。
因为它们没有实时性。
所以要用信号量来完成互斥,主要是二进制信号量,并且二进制信号量不仅能完成互斥而且能完成同步!,但是关中断应该用到程序的初始化过程中。
9.信号量:VxWorks信号量提供最快速的任务间通信机制,它主要用于解决任务间的互斥和同步。
针对不同类型的问题,有以下三种信号量:⊙二进制信号量使用最快捷、最广泛,主要用于同步或互斥;⊙互斥信号量主要用于优先级继承、安全删除和回溯;⊙计数器VxWorks还提供POSIX信号量和多处理器上信号量的应用。
10.消息队列,任务之间利用消息队列发送和接收消息。
11.管道:管道是一种灵活的消息传送机制,它比消息队列强在有一个select()12.信号量的创建与删除:semBCreate() 创建(产生并激活)一个二进制信号量semMCreate() 创建(产生并激活)一个互斥信号量semCCreate() 创建(产生并激活)制一个计数信号量semDelete() 中止并自由信号量semTake()获得信号量semGive() 给出信号量semFlush() 解锁所有正等待某一信号量的任务13.消息队列的创建与删除:msgQCreate() 创建(产生并激活)消息队列msgQDelete() 中止并自由信号量msgQSend() 向消息队列发送消息msgQReceive() 从消息队列接收消息14.网络通讯:与其它主机进行通信。
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 5.5开发指南学习笔记第一章VxWorks概述1.绪论VxWorks是一种嵌入式的实时操作系统,所谓嵌入式操作系统就是我们自己设计开发一块可以实现某种功能的板子,一般的功能板上都有一个cpu,嵌入式实施操作系统就是运行于这个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内包含操作系统。
下面我们分别来介绍这两部分内容。
1.1IMAGE of VxWorks1.IMAGE的结构IMAGE可以分为三个层次四个部分,最底层是BSP,中间层是VxWorks其中包含WindKernel 和components两部分,最高层是应用实现层app。
1)BSPBSP是系统用来管理外设的部分,由两部分组成:初始化、驱动程序。
所谓初始化是指从系统上电复位开始直到wind kernel和usrRoot根任务启动的这段时间系统的执行过程。
vxworks7编程指南摘要:1.VxWorks7 简介2.VxWorks7 编程基础3.VxWorks7 编程进阶4.VxWorks7 编程实例5.VxWorks7 编程总结正文:【VxWorks7 简介】VxWorks7 是一款实时操作系统(RTOS),广泛应用于各种实时控制系统和嵌入式系统中。
其强大的功能和良好的性能使其成为众多开发者的首选。
本指南将为您提供VxWorks7 编程的基本知识和进阶技巧。
【VxWorks7 编程基础】在开始VxWorks7 编程之前,您需要了解一些基本概念。
首先,VxWorks7 的任务调度采用优先级调度策略,任务根据优先级分为不同等级。
此外,VxWorks7 还提供了丰富的同步和通信机制,如信号量、互斥锁和消息队列等,以确保实时性能和系统稳定性。
【VxWorks7 编程进阶】在熟悉基本概念后,您可以深入学习VxWorks7 的编程技巧。
本节将介绍如何使用VxWorks7 提供的API 进行任务管理、内存管理和设备驱动等操作。
此外,还将学习如何调试和优化VxWorks7 应用程序,以提高系统性能。
【VxWorks7 编程实例】为了帮助您更好地理解和应用VxWorks7 编程知识,本节将通过一个实际案例进行讲解。
实例为一个简单的嵌入式控制系统,包括一个主任务和两个子任务。
主任务负责接收用户输入,子任务分别负责控制两个电机。
通过这个实例,您将了解如何编写和调度VxWorks7 任务,以及如何使用同步和通信机制实现任务间的协作。
【VxWorks7 编程总结】在本指南中,我们为您介绍了VxWorks7 编程的基本知识和进阶技巧。
通过学习,您应该已经掌握了如何在VxWorks7 环境下编写实时应用程序,并了解了如何使用同步和通信机制实现任务间的协作。
VxWorks操作系统基础1 实时操作系统概述31.1 实时操作系统31.2 基本概念32 VxWorks的系统综述42.1 VxWorks 42.2 Tornado 63 VxWorks操作系统基础73.1 VxWorks的任务73.1.1 多任务73.1.2 任务的状态迁移83.1.3 Wind内核的任务调度93.1.4 任务控制93.1.5 任务扩展性123.1.6 任务错误状态:errno 133.1.7 任务异常处理143.1.8 共享代码和代码重入143.1.9 VxWorks的系统任务173.2 任务间通信183.2.1 共享数据结构183.2.2 互斥183.2.3 信号量Semaphores 193.2.3.1 二值信号量203.2.3.2 互斥信号量223.2.3.3 计数信号量233.2.3.4 信号量的特殊参数243.2.4 消息队列243.2.5 管道263.2.6 跨网络的任务间通信263.2.7 信号263.3 中断服务代码273.3.1 应用代码与中断连接273.3.2 中断堆栈283.3.3 ISRs的一些特殊限制283.3.4 中断级别的异常283.3.5 保持高中断级别293.3.6 对高中断级别的ISRs的一些附加限制29 3.3.7 中断与任务间的通信293.4 看门狗计时器Watchdog Timers 294 VxWorks中的函数库:304.1 TaskLib: 304.2 ErrnoLib: 304.3 SigLib: 314.4 LstLib: 314.5 MemLib: 321 实时操作系统概述1.1实时操作系统在计算的早期开发的操作系统的最原始的结构形式是一个统一的实体(monolithic)。
在这样的系统中,提供的不同功能的模块,如处理器管理、内存管理、输入输出等,通常是独立的。
他们在执行过程中并不考虑其他正在使用中的模块,各个模块都以相同的时间粒度运行,即严格按时间片分时方式运行。
VxWorks基本OS介绍这里我就偷点懒,直接复制粘贴文档了。
可能会有一些图片无法显示,可以直接管我索要文档。
每一个被切换的程序实体就是“任务”。
每一个任务都有其自己的上下文——所谓上下文就是指任务在每一次被核心调度时所需要的CPU环境、系统资源。
在上下文的切换过程中,每一个任务的上下文被存在该任务的任务控制块中(TCB)。
◆执行的线程,也就是任务程序计数器;◆ CPU寄存器的内容和浮点寄存器中的内容;◆动态变量和程序调用所使用的堆栈;◆标准输入输出的I/O分配和错误;◆延时计时器;◆时间片计时器;◆核心控制结构;◆信号处理句柄;◆调试和性能监视值。
wind核心中使用了基于优先级抢占式的任务调度策略,但是用户也可以选择优先级轮转调度策略。
1.优先级抢占策略通过使用优先级抢占策略,每一个任务都会拥有一个优先级,这样内核就会确信将CPU资源分给了优先级最高的就绪任务。
这种方法之所以叫做抢占式的,是指任何运行的任务会被一个变成就绪状态而且优先级更高的任务打断,这时系统会保存当前任务的上下文并立即切换到高优先级的任务上下文,并且开始执行这个任务。
在图14.2所示的任务优先级抢占图中给出了优先级抢占的例子,例子中任务t1被优先级较高的任务t2抢占,而更高优先级的任务t3则抢占了t2的执行,当t3执行完后,t2开始继续执行,接下来t1在t2完成之后从被打断处继续执行。
VxWorks的wind内核支持256级优先级,由高到低分别是0到255。
任务创建的同时也就同时被赋予了相应的优先级,但是在任务执行的过程中,同样可以通过系统函数taskPrioritySet()设置某一个任务的优先级。
在VxWorks系统中,所有应用程序任务的优先级应该在100~250之间;至于驱动程序创建的任务的优先级可以位于51~99之间,系统网络任务tNetT ask的优先级默认值为50。
2.时间片轮转的调度策略如果没有时间片轮转任务调度策略,那么当同优先级的一个任务获得了CPU资源之后,它就会一直占用CPU资源直到完成执行,相同优先级的任务就会因为得不到CPU资源而不得不阻塞。
VxWorks基础知识收藏1.多任务:允许一个实时应用作为一系列独立任务来运行,各任务有各自的线程和系统资源。
3.任务切换之前要保存上下文。
4.优先级是动态的0~255,0级最高。
5.Wind内核taskLock()和taskUnlock()禁止和解除抢占,但对中断不起作用。
6.异常处理:VxWorks异常处理包,一般是将引起异常的任务休眠,保存任务在异常出错处的状态值。
内核和其它任务继续执行。
7.为什么要共享存储区:任务间通信的最简单的方法是采用共享存储区,也即相关的各个任务分享属于它们的地址空间的同一内存区域。
8. 为什么要互斥:当某一地址空间用于数据交换时,为了避免冲突,对于内存的锁定是非常重要的。
一般来说,关中断是最有效的解决互斥的方法。
但这对于实时应用来说,它阻止系统对外部事件的响应,无法满足实时性的要求。
同样,中断延迟也是不能接受。
因为它们没有实时性。
所以要用信号量来完成互斥,主要是二进制信号量,并且二进制信号量不仅能完成互斥而且能完成同步!,但是关中断应该用到程序的初始化过程中。
9.信号量:VxWorks信号量提供最快速的任务间通信机制,它主要用于解决任务间的互斥和同步。
针对不同类型的问题,有以下三种信号量:⊙二进制信号量使用最快捷、最广泛,主要用于同步或互斥;⊙互斥信号量主要用于优先级继承、安全删除和回溯;⊙计数器VxWorks还提供POSIX信号量和多处理器上信号量的应用。
10.消息队列,任务之间利用消息队列发送和接收消息。
11.管道:管道是一种灵活的消息传送机制,它比消息队列强在有一个select()12.信号量的创建与删除:semBCreate() 创建(产生并激活)一个二进制信号量semMCreate() 创建(产生并激活)一个互斥信号量semCCreate() 创建(产生并激活)制一个计数信号量semDelete() 中止并自由信号量semTake()获得信号量semGive() 给出信号量semFlush() 解锁所有正等待某一信号量的任务13.消息队列的创建与删除:msgQCreate() 创建(产生并激活)消息队列msgQDelete() 中止并自由信号量msgQSend() 向消息队列发送消息msgQReceive() 从消息队列接收消息14.网络通讯:与其它主机进行通信。
15. 套接口Sockets:套接字(sockets)来实现Vxworks系统和网络协议的接口.套接口是通讯的基础,应用程序一般仅在同一类的套接口间通讯。
主要的两种套接口:流套接口(采用TCP协议)和数据报套接口(采用UDP协议),两者都是双向传输,且流套接口提供有序和无重复的数据流服务,虽然数据报套接口没有提供有序和无重复的数据流服务,但是它的最大的特点是记录边界。
16.套接口(socket)通信的最大优点是:过程间的通信是完全对等的,不管网络中过程的定位或主机所运行的操作系统。
17.套接口Socket的函数:socket() 创建一个套接口bind() 给套接口分配名称listen() 打开TCP套接口连接accept() 完成套接口间连接connect() 请求连接套接口shutdown() 关闭套接口间连接send() 向TCP套接口发送数据recv() 从TCP套接口接收数据select() 完成同步I/O传输read() 从套接口读取信息write() 向套接口写入信息ioctl() 完成对套接口的控制close() 关闭套接口前面四个函数相当于网络驱动。
18. 实时系统中硬件中断处理是至关重要的,因为它是以中断方式通知系统外部事件的发生。
为了快速响应中断,中断服务程序ISR运行在特定的空间,有自己的上下文。
不同于其它任何任务,因此中断处理没有任务的上下文切换。
中断函数:intConnect() 将C函数和中断向量联结intCount() 得到当前中断套叠深度intLevelSet() 设置程序中断级别intLock() 使中断禁止(关中断)intUnlock() 开中断intVecSet() 设置异常向量intVecGet() 得到异常向量在程序中用的最多的就是关开中断了,intLock()和intUnlock().所有的中断服务程序使用同一中断堆栈,它在系统启动时就已根据具体的配置参数进行了分配和初始化,必须保证它的大小,以使它能满足最坏的多中断情况。
因此在程序设计初,即程序入口处就要设定中断堆栈的大小,而这个大小没有什么的定的公式可循,只能依据经验。
中断也有缺陷:ISR不运行在常规的任务上下文,它没有任务控制块。
对于ISR的基本约束就是它们不能激活那些可能使调用程序阻塞的函数,例如,它不能获取信号量,因如果该信号量不可利用,内核会试图让调用者切换到悬置态。
然而,ISR能给出信号量。
因为调用者就是ISR,是中断被悬置,这是很不好的。
不过这只是它为了满足实时性的一个约束条件。
不能算是缺陷哈。
19.ISR到任务的通讯和同步:Ж. ISR很少作为信息的接收者,它不可以等待接收信息包或事件.ISR通常作为通信或同步的发起者,它通常返回一个信号量、向队列发送一个信息包或事件给一个任务。
Ж. ISR内的系统调用总是立即返回ISR本身。
例如,即使ISR通过发送信息包唤醒了一个很高优先级的任务,它也首先必须返回ISR。
这是因为ISR必须先完成。
20. 时钟管理功能:┓维护系统日历时钟;┓在任务等待消息包、信号量、事件或内存段时的超时处理;┓以一定的时间间隔或在特定的时间唤醒或发送告警到一个任务。
┓处理任务调度中的时间片轮循。
这些功能都依赖于周期性的定时中断,离开实时时钟或定时器硬件就无法工作。
时钟管理的系统调用有:tickAnnounce() 通知系统内核时钟“滴答”tickSet() 设定内核时钟计数器值tickGet() 得到内核时钟计数器值timer_create() 创建时钟timer_gettime() 获得时钟器给定值的当前剩余值timer_settime() 设定时钟值timer_connect() 联系用户函数和时钟信号timer_cancel() 取消一个时钟sysClkRateSet() 系统时钟速率设置21.看门狗Watch Dog的作用:VxWorks看门狗定时器作为系统时钟中断服务程序的一部分,允许C语言函数指明某一时间延迟。
(我还以为只是有关safe(看门)的作用呢:))。
被看门狗定时器激活的函数运行在系统时钟中断级。
然而,如果内核不能立即运行该函数,函数被放入tExcTask工作队列中。
在tExcTask工作队列中的任务运行在最高优先级0。
看门狗定时器调用函数:wdCreate() 分配并初始化看门狗定时器wdDelete() 中止并解除看门狗定时器wdStart() 启动看门狗定时器wdCancel() 取消当前正在计数的看门狗定时器22.Tanado集成开发环境:Tornado环境采用主机--目标机交叉开发模型,应用程序在主机(的Windows环境)下开发(编译链接生成可执行文件),在目标机上调试(下载到目标机,通过主机上的目标服务器与目标机上的目标代理程序的通信完成对应用程序的调测、分析)。
即应用程序在主机上开发,在目标机上调试~!23. Tonado个集成组件的功能:⊙Tornado开发环境:Tornado是集成了编辑器、编译器、调试器于一体的高度集成的窗口环境,同样也可以从Shell窗口下发命令和浏览。
⊙WindConfig:Tornado系统配置通过WindConfig可选择需要的组件组成VxWorks实时环境,并生成板级支持包BSP的配置。
⊙WindSh:Tornado外壳WindSh是一个驻留在主机内的C语言解释器,通过它可运行下载到目标机上的所有函数,包括VxWorks和应用函数。
Tornado外壳还能解释常规的工具命令语言TCL。
⊙浏览器Tornado浏览器可查看内存分配情况、系统目标(如任务、消息队列、信号量等)。
这些信息可周期性地进行更新。
⊙CrossWind:源码级调试器——提供交叉调试源码级调试器CrossWind提供了图形和命令行方式来调试,可进行指定任务或系统级断点设置、单步执行、异常处理。
⊙驻留主机的目标服务器目标服务器管理主机与目标机的通信,所有与目标机的交互工具都通过目标服务器,它也管理主机上的目标机符号表,提供目标模块的加载和卸载——在主机与目标机通讯时使用。
⊙Tornado注册器所有目标服务器注册其提供的服务在注册器中。
注册器映射用户定义的目标名到目标服务器网络地址——应需提前设置。
⊙VxWOrksTornado包含了VxWorks操作系统。
⊙目标代理程序目标代理程序是一个驻留在目标机中的联系Tornado工具和目标机系统的组件。
一般来说,目标代理程序往往是不可见的。
23. 系统启动:在实时应用系统的开发调测阶段,往往采用以PC机作为目标机来调测程序。
主机PC和目标机PC之间可采取串口或是网口进行联结。
由于大多数目标已配有网卡,网络联结成为最简单快速的连接方式。
串口联结虽通信速率不高,也有它自己的优点,系统级任务调试(如中断服务程序ISR)需使通信方式工作在Polled 模式,网口联结就不支持。
因此就有两种通讯方式下的启动方式来制作Vxworks启动盘,它和Windows系统不同的,Vxworks操作系统是需要定制的,裁掉不需要的系统,这样可以使系统更小,满足目标板的内存约束。
24. 串口通信时目标机VxWorks系统启动盘的制作步骤:1.修改通用配置文件\\Tornado\target\config\pc486\config.h.在config.h文件中加入以下宏定义:#undef WDB_COMM_TYPE#define WDB_COMM_TYPE WDB_COMM_SERIAL#define WDB_TTY_CHANNEL 1#define WDB_TTY_BAUD 9600并且修改#define DEFAULT_BOOT_LINE中vxWorks为vxWorks.st。
2.在Tornado集成环境中点取Project菜单,选取Make PC486,选择Common Tar get,先进行clean操作;再选择 Boot Rom Target,进行bootrom_uncmp操作;再选择VxWorks Target,进行vxworks.st操作。
3.拷贝\\Tornado\target\config\pc486\bootrom_uncmp至\\Tornado\host\bin下;4.重命名文件bootrom_uncmp为bootrom;5.准备一张已格式化的空盘插入软驱;6.在目录\\Tornado\host\bin下执行命令mkboot a: bootrom ;7.拷贝\\Tornado\target\config\pc486\VxWorks.*至软盘;8.将系统制作盘插入目标机软驱,加电启动目标机即载入VxWorkst系统。