VxWorks嵌入式操作系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Note:任务调用标准的I/O函数打开、读出、写入管道
VxWorks Kernel
通信、同步和互斥机制(网络通信) VxWorks提供了如下一些网络工具完成信息传送

Sockets 完成运行在VxWorks系统或其它系统 之间任务的消息传送;
远程过程调用(RPC)允许任务调用另一主机( 运行的系统为VxWorks或是其它)上的过程。
Wind 消息队列管理: msgQCreate() msgQDelete() msgQSend() msgQReceive()
创建(产生并激活)消息队列 中止并自由信号量 向消息队列发送消息 从消息队列接收消息
VxWorks Kernel
通信、同步和互斥机制(管道)
管道是用VxWorks的I/O系统提供一种灵活的消息传 送机制,它是受驱动器pipeDrv(VxWorks所提供) 管理的虚拟I/O设备
任务管理(调度策略)
Wind内核采用基于优先级(0~255)的抢占式调度法作为它的缺省
策略,同时它也提供了轮转调度法
VxWorks Kernel
任务管理(优先级反转)
•优先 级
•时间
•客观上造成优先级低的进程T2抢占优先级高的进程T1 •Vxworks解决方案: • 优先级继承,在T1阻塞时,T3继承T1的优先级
为设备初始化数据结构、信号量和硬件等
基本I/O功能
xxOpen() xxRead() xxWrite() xxIoctl()
中断服务例程xxInterrupt( )
应用软件开发指导
任务划分要合理
功能内聚性 时间紧迫性 周期执行原则
防止死锁、饥饿和优先级翻转 函数的可重入性(Reentrancy)正确运
传送; 二进制信号,用于异常处理。 在多处理器之间的任务也可采用共享内存对象来
实现任务间通信,只是在系统配置上有所不同 通过组件支持COM/DCOM
VxWorks Kernel
通信、同步和互斥机制(共享内存)
任务间通信的最简单的方法是采用共享存储区 ,也即相关的各个任务分享属于它们的地址空 间的同一内存区域。因为所有任务都存在于单 一的线性地址空间,任务间可以共享数据。
全局的变量、线性队列、环形队列、链表、指针 都可被运行在不同上下文的代码所引用.
但保证互斥使用是用户的任务.
VxWorks Kernel
通信、同步和互斥机制(互斥)
关中断 抢占禁止(taskLock) 信号量锁定资源等方法
一般来说,关中断是最有效的解决互斥的方法 。但这对于实时应用来说,它阻止系统对外部 事件的响应,无法满足实时性的要求。同样, 中断延迟也是不能接受。

Tornado开发环境
Tornado开发环境
Tornado开发环境
Tornado开发环境
Tornado开发环境
BSP(Board Support Package)
BSP在系统中的位置
BSP
BSP的作用 为各种目标板的硬件功能提供了统一的软件 它们包括:
硬件初始化 中断处理和产生 硬件时钟和定时器管理 内存映射和分配
VxWorks的组成
VxVWoxrkWs内o核rk(swKinedr)n的el基本功能可以分为如
下几大类: 任务管理 事件和异步信号服务 信号量服务 消息队列服务 内存管理 中断服务程序 时钟管理和定时器服务 出错处理
VxWorks Kernel
任务管理(state)
•等待资源 而阻塞
设备驱动程序(I/O结构)
•APP •IOLib •I/O子系统 •Device Driver
•对所支持的设备 •VxWorks标准接口
设备驱动程序
驱动初始化例程xxDrv( )
安装驱动、分配数据结构、连接中断服务例程、初始 化硬件
设备创建xxDevCreate( )
给驱动增加一个设备,参数包括缓冲区大小、设备地 址等
恢复一个任务
taskRestart()
重启一个任务
taskDelay()
延迟一个任务
VxWorks Kernel
通信、同步和互斥机制 VxWorks支持各种任务间通信机制,提供了多样
的任务间通信方式,主要有如下几种:
共享内存,主要是数据的共享; 信号量,用于基本的互斥和任务同步; 消息队列和管道,单CPU的消息传送; Socket和远程过程调用,用于网络间任务消息
剩余值 timer_settime() 设定时钟值 timer_connect() 联系用户函数和时钟信号 timer_cancel() 取消一个时钟 sysClkRateSet() 系统时钟速率设置
Tornado开发环境
集成环境 高效明晰的图形化的实时应用开发平台 完整的面向嵌入式系统的开发和调测工
远程文件存取 VxWorks任务可采用NFS、RSH、 FTP、TFTP等方式远程存取主机文件。
VxWorks Kernel
通信、同步和互斥机制(网络通信组件)
VxWorks Kernel
通信、同步和互斥机制(Sockets)
VxWorks Kernel
中断服务程序
intConnect() intCount() intLevelSet() intLock() intUnlock() intVecSet() intVecGet()
VxWorks Kernel
通信、同步和互斥机制(信号量)
VxWorks信号量提供最快速的任务间通信机制,它主 要用于解决任务间的互斥和同步。针对不同类型的问 题,有以下三种信号量:
二进制信号量
使用最快捷、最广泛,主要
用于同步或互斥;
互斥信号量 主要用于优先级继承、安全删除和 回溯;
计数器 资源分配
taskIsSuspended() 检查任务是否被悬置
taskIsReady()
检查任务是否ຫໍສະໝຸດ Baidu备运行
taskTcb()
得到一个任务控制块的指针
taskDelete()中止指定任务并释放内存(仅任务堆栈和控制块)
taskSafe()
保护被调用任务
taskSuspend()
悬置一个任务
taskResume()
将C函数和中断向量联结 得到当前中断套叠深度
设置程序中断级别 使中断禁止 开中断 设置异常向量 得到异常向量
VxWorks Kernel
时钟管理 时钟管理提供以下功能:
维护系统日历时钟;
在任务等待消息包、信号量、事件或内存 段时的超时处理;
以一定的时间间隔或在特定的时间唤醒或 发送告警到一个任务。
•Note:任务在任意 状态均可被删除
•等待CPU
•被延时
•不被调度
•就绪态->
悬置态
semTake()/msgQReceive()
•就绪态-> 延迟态 taskDelay()
•就绪态-> 休眠态 taskSuspend()
•悬置态-> 就绪态 semGive()/msgQSend()
•悬置态-> 休眠态 taskSuspend()
F-16、FA-18 战斗机、B-2 隐形轰炸机和 爱国者导弹上,甚至连1997年4月在火星 表面登陆的火星探测器上也使用到了 VxWorks
VxWorks简介
何谓实时?
对于给定一个时间约束量ε> 0,如果 系统S在T1时刻接受到输入,在T2时刻 给出合理的输出,且使T2-T1<ε。则称 系统S满足要求时间ε的实时性,通常 称系统S为实时系统。
Note:VxWorks还提供POSIX信号量和多处理器上信号 量的应用。
VxWorks Kernel
通信、同步和互斥机制(信号量 API)
semBCreate()创建(产生并激活)一个二进制信号量
semMCreate()创建(产生并激活)一个互斥信号量
semCCreate()创建(产生并激活)制一个计数信号量
处理任务调度中的时间片轮循。
VxWorks Kernel
时钟管理(API) tickAnnounce() 通知系统内核时钟“滴答” tickSet() 设定内核时钟计数器值 tickGet() 得到内核时钟计数器值 timer_create() 创建时钟 timer_gettime() 获得时钟器给定值的当前
VxWorks Kernel
任务管理(禁止调度)
Wind内核可通过调用taskLock()和
taskUnlock()来使调度器起作用和失效。
当一个任务调用taskLock()使调度器失效, 任务运行时没有基于优先级的抢占发生。然而 ,如果任务被阻塞或是悬置时,调度器从就绪 队列中取出最高优先级的任务运行。当设置抢 占禁止的任务解除阻塞,再次开始运行时,抢 占又被禁止。这种抢占禁止防止任务的切换, 但对中断处理不起作用。
“正确、但迟后的结果也是错误的”
VxWorks的特点
可靠性
实时性
可裁减性
VxWorks 由一个体积很小的内核及一些可以根据需要进行定制的 系统模块组成(400多个)。VxWorks 内核最小为 8kB,即便加上 其它必要模块,所占用的空间也很小,且不失其实时、多任务的 系统特征。
多任务支持(丰富的IPC机制) 优秀的开发环境
用 用户任务优先级确定
BSP及驱动开发指导
了解硬件及其操作
根据BSP或驱动模板编写 对VxWorks支持的I/O,采用VxWorks标准接

对VxWorks不支持的I/O,编写自己的用户接 口(xxOpen,xxRead,xxWrite,xxIoctl,xxISR…) 回调机制,动态加载
VxWorks Kernel
任务管理(API)
taskSpawn()
创建(产生并激活)新任务
taskInit()
初始化一个新任务
taskActivate() 激活一个已初始化的任务
taskName()
由任务ID号得到任务名
taskNameToId() 由任务名得到任务ID号
taskPriorityGet() 获得任务的优先级
BSP还包括boot Rom和其它启动机制 sysLib和sysALib库是VxWorks可移植的核心
BSP
BSP初试化一般过程
BSP初试化一般过程
BSP初试化一般过程
设备驱动程序
SIO (Serial I/O) END (Enhanced Network Driver) ttyDrv Terminal driver ptyDrv Pseudo-terminal driver pipeDrv Pipe driver memDrv Pseudo memory device driver nfsDrv NFS client driver netDrv Network driver for remote file access ramDrv RAM driver for creating a RAM disk scsiLib SCSI interface library Other hardware-specific drivers
semDelete() 中止并删除信号量
semTake()
获得信号量
semGive()
释放信号量
semFlush()
解锁所有正等待某一信号量的任务
VxWorks Kernel
通信、同步和互斥机制(消息队列 )
单处理器中任务间消息的传送采用消息消息队列。消息机制使用 一个被各有关进程共享的消息队列,任务之间经由这个消息队列 发送和接收消息。
VxWorks嵌入式操作系统
主要内容
VxWorks简介 Tornado开发环境 BSP设计 设备驱动程序
VxWorks简介
美国WindRiver公司于1983年设计开发 良好的持续发展能力 高性能的内核 友好的用户开发环境 良好的可靠性和卓越的实时性
VxWorks简介
广泛地应用在通信、军事、航空、航天 等高精尖技术及实时性要求极高的领域 中,如卫星通讯、军事演习、弹道制导 、飞机导航等
•延迟态-> 就绪态 expired delay
•延迟态-> 休眠态 taskSuspend()
•休眠态-> 就绪态 • taskResume()/taskActivate() 休眠态-> 悬置态 taskResume() •休眠态-> 延迟态 taskResume()
VxWorks Kernel
相关文档
最新文档