Vxworks基础
VxWorks任务基础
任务优先级
从0(最高)到255(最低) 程序员可以动态地对优先级进行操作 – taskPriorityGet (tid, &priority) – taskPrioritySet (tid, priority) 使用这些函数会使得程序分析起来比较困难,不 建议使用
任务堆栈(stack)
什么时候会发生上下文切换
任务在执行过程中会发生同步上下文切换 – 任务自身发生阻塞、延时、挂起等状态变化 – 当一个优先级高的任务准备运行 – 降低任务的优先级或任务退出执行(不常发生) 当有中断ISR到来时会发生异步上下文切换 – 使得一个优先级高的任务准备运行 – 挂起当前的任务或降低它的优先级(不常发生) 同步上下文切换比异步上下文切换要保存的寄 存器少,因此切换速度快
任务控制
(2)任务挂起/恢复(suspend/resume) taskSuspend(tid) 使任务不能够执行 可以被增加阻塞和睡眠状态 一个任务可以安全地挂起自己 taskResume(tid) 取消挂起 通常taskSuspend()和taskResume()被用于调试 和开发的目的
任务控制
(3)任务睡眠(delayed) 使任务睡眠一定的系统时钟周期 – STATUS taskDelay(ticks) 每隔1/7秒进行轮询 FOREVER{ taskDelayed( sysClkRateGet()/7); … } 使用sysClkRateSet()改变时钟频率
4.5.3 代码重入(Reentrancy)
代码重载是指同一段代码可以被多个任务调用, 而且不出错。 代码内应该无全局变量或静态变量;代码不修 改自身。 VxWorks使用下面的机制来实现重入 – 动态堆栈变量 – 由信号量保护的全局或静态变量 – 任务变量
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基础培训
烽火科技
VxSim的HelloWorld(四)
• 最后:查看新弹出的对话框(VxWorks Simulator),^_^ ,可以看到输出的 Hello World
•
此时,还会弹出了一个VxSim Launch的界面,这是主机用来连接目标机的。 点击OK。如果正确安装Tornado并配置正确的话,此时桌面右下角会出现 的图标(如果出现问题,会出现 的图标),点击它可以看到Target Server是 否正常工作。
烽火科技
开发板开发嵌入式程序
• 操作系统的制作与下载
– – – – – – 修改Config.h 制作BSP及bootrom 制作操作系统 配置FTP Server 启动超级终端 引导和下载操作系统
• 应用程序的编制和调试
烽火科技
操作系统的制作与下载
修改Config.h
• VxWorks的缺省配置参数由tornado\target\config\all目录中 的configAll.h决定,如第528行开始通信路径的配置 • 对于某一目标板特定的配置参数,如ads860,使用 tornado\target\config下相应目录中的config.h,下面以 ads860板为例 • 如果没有相应目录,可定制,如建立8240目录,其文件代 码由BSP开发人员编写
• WindShell
– 允许用户调用内存中的应用程序模块或是 VxWorks模块中的任何例程
烽火科技
创建任务
• 在usrAppInit函数中添加函数userMain( ),作为自己应用程序的入口函数。
•
编写一个C文件(uesr.c),内容如下:
烽火科技
编译代码及运行
• 选择Add Files,添加uesr.c到工程中:
Vxworks基础
为各种目标板的硬件功能提供了统一的软件接口 它们包括: 硬件初始化 中断处理和产生 硬件时钟和定时器管理 内存映射和分配 BSP还包括boot Rom和其它启动机制 sysLib和sysALib库是VxWorks可移植的核心
Vxworks操作系统将一切与硬件有关的功能模块都放在BSP库中。该BSP库是硬件与软件的接口,处理硬件的初始化、中断处理与产生、硬件时钟与定时管理、局部和总线内存空间的映射、内存大小定义,等等。能够自行启动目标机、初始化目标机、能够与host通信以下载Vxworks核、把控制权交给Vxworks核来调用用户应用程序等功能。
Tornado 系统结构
POSIX Library
Real-Time Embedded Application
Host
VxSim
Debug Agent
Tornado Plug-ins
Target
Target Server
Launcher
Core OS
BSP
Ethernet
Serial Line
板支持包(BSP)
VxWorks的特点--高度伸缩性的环境
Stand-alone kernel up to full featured OS
0
100
200
300
400
500
Maximum Equipped
File System
Networking
O.S.
m
Memory Requirements (Kbytes)
VxWorks (1)
Vxworks提供了一套丰富的任务间通信机制,包括: ●内存共享(Shared memory):简单的数据共享方法 ●信号量(Semaphore):用于基本的互斥及同步 ●消息队列(Message queues)和管道(pipe): 用于同一CPU上任务间消息的传递 ●套接口(Socket)和远程程序调用(RPC): 用于网络上任务间的通信 ●信号(Signal):用于异常处理 此外,Vxworks提供了三种共享内存的对象(shared-memory objects) 来实现运行在不同CPU上的任务间的高速同步和通信。 ●共享信号量(shared semaphores):有二进制,记数型两种 ●共享消息队列(shared message queues) ●共享内存分区(shared-memory partitions):有系统类型和用户类型
VxWorks读书笔记
第二章VxWorks基础1 任务产生Table 2-3: Task Creation RoutinesCall Description @ …taskSpawn( ) !!&Spawn (create and activate) a new task.taskInit( ) Initialize a new task. & 】taskActivate( ) #,;Activate an initialized task.id = taskSpawn ( name, priority, options, stacksize, main, arg1, arg10 ),VxWorks习惯用ID号为0的任务作为调用发出的任务阻塞,是指进程因某个事件不能使程序继续运行下去,如要对某I/O操作时!简单的说:阻塞,指进程在主存中并等待一个事件的完成~在虚拟内存中,当主存中没有处于就绪状态的进程时操作系统就把被阻塞的进程换出到磁盘中的挂起队列,挂起的原来就差不多是这样,挂起需要和阻塞或就绪结合,简单的说,就是进程在辅存中并等待一个事件。
任务控制块(WIND_TCB)多任务设计能随时打断正在执行着的任务,对内部和外部发生的事件在确定的时间里作出响应。
VxWorks实时Wind内核提供了基本的多任务环境。
从表面上来看,多个任务正在同时执行,实际上,系统内核根据某一调度策略让它们交替运行。
系统调度器使用任务控制块的数据结构(TCB)来管理任务调度功能。
任务控制块用来描述一个任务,每一任务都与一个TCB关联。
TCB包括了任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。
调度器在任务最初被激活时以及从休眠态重新被激活时,要用到这些信息,TCB使多个任务得以独立运行,如表1-1所示任务控制块TCB。
表1-1 任务控制块TCB为了便于调试,每个任务都有一个独一无二的字符串表示的名称,在任务被创建时由用户程序指定或者系统默认生成。
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基础命令
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、8memShow 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 statisticsnetStackSysPoolShow - show network stack system pool statisticsrouteShow - 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基础知识(互联资料)
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应用基础Bootrom和Boot image的区别,Boot image和VxWorks image的联系和区别bootrom 是指on-chip bootrom,在CPU芯片内部,内嵌有小的boot程序(bootloader),类似于PC机主板上的BIOS的存储区域。
和boot image不是一回事。
VxWorks文档中的bootrom区是指boot image存放的位置。
boot image的作用是把VxWorks image 加载到主板。
boot image只初始化很少的硬件系统如串口,网口等。
为加载VxWorks image做准备,当VxWorks系统下载完毕后,b oot image的作用也就完成了。
VxWorks image含有完整的VxWorks OS.是真正运行于目标板上的操作系统。
应用程序运行于VxWorks系统之上。
boot image 和VxWorks image生成在使用BSP文件上的区别在于:在启动顺序中Bootrom调用bootConfig.c,而VxWorks调用usrConfig.c.在ROM中VxWorks运行的方式(和bootrom编译到一起还是单独固化到ROM中),在ROM中的内存分配?VxWorks加载到主板运行,分不同的情况,如果VxWorks是压缩的,加载时解压到RAM的RAM_HIGH_ADRS.如果是ROM based VxWorks,VxWorks image的data段复制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中执行。
既不压缩又不ROM based的VxWorks直接copy到RAM_LOW_ADRS运行。
若在config.h中修改系统设置,如增加网卡等,是否需要重新烧bootrom?如果增加其他oem产品呢?如果主板中有Boot image存在则不需要重新烧,用FTP等download加载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、8memShow 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 IP icmpstatShow - show statistics for ICMParpShow - show a list of known ARP entriesmbufShow - show network stack data pool statisticsnetStackSysPoolShow - show network stack system pool statisticsrouteShow - display all IP routes (summary information)mRouteShow - display all IP routes (verbose information)routestatShow - display routing statisticsrouteAdd "destaddr","gateaddr" - add route to route table routeDelete "destaddr","gateaddr" - delete route from route table说明:上述大多数命令都可以在help、netHelp中查到。
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操作系统基础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任务基础解读
在任务被创建时从系统内存池中分配 任务创建后堆栈的大小就固定了 内存在堆栈中预留了一些空间,使得实际可用 的堆栈空间比申请的堆栈空间要小 超过堆栈大小(stack crash)会导致系统不可 预见行为
任务选项(options)
在任务创建时,可以按位“与”或者“或”同 时使用 – VX_FP_TASK 增加对浮点的支持 – VX_NO_STACK_FILL 不使用0xee填充stack – VX_UNBREKABLE 禁止断点 – VX_DEALLOCATE_STACK 当任务退出时对 stack和TCB进行回收 使用taskOptionGet()来查询任务的option 使用taskOptionSet()来设置或复位option
VxWorks应用设计
中科信软培训中心
四、VxWorks任务基础
4.1 VxWorks的实时多任务简介
实时性使得一个控制系统能够及时响应对该系统 的控制。 如果一个系统的响应时间是可以预测的,则它 就是一个具有确定性的系统。 从一个事件发生到它被响应之间的时间称为 Latency。 确定性恢复(suspend/resume) taskSuspend(tid) 使任务不能够执行 可以被增加阻塞和睡眠状态 一个任务可以安全地挂起自己 taskResume(tid) 取消挂起 通常taskSuspend()和taskResume()被用于调试 和开发的目的
任务名
为方便人们理解而设置 – 通常在开发过程中在Shell中使用 – 在程序中使用task id 为了方便起见,起任务名时一般以t作为开头; 由系统所起的默认的任务名为t后面带一个顺序 增加的数字 任务名不一定是唯一的(但通常都是唯一的) 相关的taskLib例程有 – taskName() 从tid得到任务名 – taskNameToId 从任务名得到tid
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基本OS介绍
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基础知识
RAM
VxWorks
Local_MEM_Local_ADRS RAM_LOW_ADRS FREE_RAM_ADRS
RAM_HIGH_ADRS
Boot Programs
附表
VxWorks映象类型说明:
二、基于ROM的VxWorks映象 这是一种运行于RAM,但起初存放于ROM中的VxWorks映象。即该映象 需要和搬移程序一起固化在BOOT中。该映象可分为:压缩的和未压缩的
最小BSP系统的串口
一般而言,从程序调试来看,可以不用仿 真器来调试。在汇编最开始的地方,就将 串口初始化好,通过从串口打印字符。这 种方式是最好。
嵌入式操作系统VxWorks
最小BSP系统的网口
该部分所要做的,也就是需要配置 1.连接中断 2.在sysEnd.c文件的sysLanPciInit()文
虚拟 内存
多任务 处理
操作系统 模块
Wind 内核
目标开发 工具
嵌入式操作系统VxWorks
VxWorks
I/O子 系统
基
本
体
系
网络子 系统
结
构
嵌入式操作系统VxWorks
wind :VxWorks 的核心,被称作 wind,包括多任务调度(采用优先 级抢占方式),任务间的同步和进程间通信机制,以及中断处理, 看门狗定时器和内存管理机制。
附表
Bootrom类型说明:
用于可加载VxWorks映象的Bootrom包含两部分:起始引导程序 (BootStrap Programs)和ROM引导程序(ROM Boot Programs)。 起始引导程序驻留在ROM中 , ROM引导程序起初存放在ROM中,初始化时 被拷贝到RAM中
VxWorks基础及开发实例-VxSim软件仿真实例
VxWorks基础及开发实例-VxSim软件仿真实例1 VxWorks软件仿真实验集成仿真⼯具(VxSim)是⼀个软件原型仿真器,主要是使开发者在⽆实际⽬标硬件情况下,先进⾏原型级应⽤程序的开发,包括⽹络设计和基于多处理器的设计。
VxSim还可使开发者在开发周期中较早地进⾏⼤部分的应⽤软件测试,从⽽能够以较⼩的代价纠正错误。
本实验的⽬的是使读者在不使⽤实际⽬标硬件的情况下,了解VxWorks软件仿真⼯具VxSim 的使⽤⽅法,并了解Tornado中各种辅助调试⼯具的使⽤⽅法。
1.1 编写、编译程序⾸先参照下⾯的步骤建⽴⼀个基于VxSim的⼯程:1.新建⼀个可启动的⼯程demoTornado采⽤⼯作区(Workspace)和⼯程(Project)的模式来管理应⽤程序,⼀个⼯程可以包含源代码⽂件以及与该⼯程相关的设置信息等;⽽⼯作区就好⽐⼀个容器,可以容纳多个⼯程。
选择File→New Project来启动新⼯程的创建过程,如图1-2所⽰。
创建⼯程时有两种不同类型的⼯程可供选择:可启动的⼯程(a bootable vxWorks image)和可下载的⼯程(downloadable application modules)。
图1-2 创建新⼯程可启动的⼯程:是⼀个链接到VxWorks映象的应⽤程序。
该⼯程中不仅包括应⽤程序的代码,还包括VxWorks内核代码。
在⼯程管理器中可以⾮常地添加或删除⼀些内核组件,(如操作系统中的ANSI C组件和POSIX组件等),从⽽调整VxWorks内核的特征。
通过组件的添加或删除,⼀⽅⾯可根据需要调整VxWorks内核的代码⼤⼩(嵌⼊式系统的资源都是⾮常有限的,保持内核的⾼度精简很必要);另⼀⽅⾯还可保证整个系统运⾏所需的组件都包含在所⽣成的⽬标代码中。
当⽬标机启动后,该应⽤程序会被⾃动加载且运⾏。
图1-3 输⼊新建⼯程的详细信息可下载的⼯程:是指该⼯程所编译的⽬标代码是⼀种可重定位的代码。
VxWorks任务基础解析
基于优先级的调度
不同的应用应该有不同的优先级,这一点应该在CPU的 分配中得到体现。 抢占调度是基于任务的优先级,该优先级的选择反应了 任务的重要性。默认情况下相同优先级的任务之间不会 发生抢占 系统内核一旦发现有一个优先级比当前正在运行的任务 的优先级高的任务处于Ready状态,内核就立即保存当 前任务的上下文切换,将当前任务变为pended状态,并 切换到该高优先级任务的上下文执行。 下列情况在任何时候断(例如系统时钟中断) 上下文的切换不会延迟到下一个系统时钟中断。
VxWorks应用设计
中科信软培训中心
四、VxWorks任务基础
4.1 VxWorks的实时多任务简介
实时性使得一个控制系统能够及时响应对该系统 的控制。 如果一个系统的响应时间是可以预测的,则它 就是一个具有确定性的系统。 从一个事件发生到它被响应之间的时间称为 Latency。 确定性响应是实时系统性能关键因素。
任务名
为方便人们理解而设置 – 通常在开发过程中在Shell中使用 – 在程序中使用task id 为了方便起见,起任务名时一般以t作为开头; 由系统所起的默认的任务名为t后面带一个顺序 增加的数字 任务名不一定是唯一的(但通常都是唯一的) 相关的taskLib例程有 – taskName() 从tid得到任务名 – taskNameToId 从任务名得到tid
基于轮转的调度
任务间平等地占用CPU时间 轮转调度机制使得具有相同优先级地任务公平地分享 CPU 轮转调度使用时间片来实现相同优先级任务对CPU的公 平分配。 时间片设置 – KernelTimeSlice(ticks) (当ticks=0时,时间片设置被关 闭) 基于优先级的调度总是优先的 – 基于轮转的调度仅仅用于具有相同优先级的任务 基于优先级的重新调度可以在任何时间发生 – 基于轮转的调度要以系统的ticks为间隔
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最成功的实时操作系统 1981,Windriver,嵌入式咨询公司 TCP/IP,NFS工具集 WIND内核 1995,tornado集成开发环境 收购SDS、DIAB、pSOS
BC NG V xWo r ks ( 1)
Vxworks操作系统是一个嵌入式实时操作系统(RTOS)。
V x WVBCoxwrNkoGsrk(s提2 )供了一套丰富的任务间通信机制,包括:
●内存共享(Shared memory):简单的数据共享方法 ●信号量(Semaphore):用于基本的互斥及同步 ●消息队列(Message queues)和管道(pipe):
用于同一CPU上任务间消息的传递 ●套接口(Socket)和远程程序调用(RPC):
SERVER
ቤተ መጻሕፍቲ ባይዱ
RS232
VxWorks目标板
Ethernet AGENT
目标CPU:Vxworks 在其上运行 的一个单板计算机 Tornado PC主机:有一根串行线与目标机相连(初始化时主机作为终端用)
Vxworks核二进制文件驻留在其盘上,核的下载及运行Tornado 工具 通过以太网口进行
VBC xNGworks/Tornado开发方式
BTCo rNnGad o ( 1) To r n a d o 提 供 了 V x w o r k s 系 统 开 发 的 集 成 开 发 环 境 , 其 中 To r n a d o 源代码编辑器包括下列特性:
●标准文本控制能力
●C和C++ 语法元素用不同颜色
●调制集成:编辑窗口跟踪代码的执行
●编译集成:项目管理将编译警告和编译错误
目标CPU:
Vxworks 在其上运行 的一个单板计算机;
Tornado PC主机:Tor有nad一o主根机 串行线与目标机相连(初始化时主机作 为终
上,核
端用),Vxworks核二进制文件驻留在其盘
RS232
VxWorks目标板
行。
的下载及E运the行rneTt ornado 工具通过以太网口进
SERVER
AGENT
BTCo rNnGad o 开 发 环 境
BTCo nNaGd o 开 发 环 境 ( 续 )
BTCo rNnGad o 开 发 环 境 ( 续 )
BC NG
板支持包(BSP)
Vxworks操作系统将一切与硬件有关的 功能模块都放在BSP库中。该BSP库是硬件 与软件的接口,处理硬件的初始化、中断处 理与产生、硬件时钟与定时管理、局部和总 线内存空间的映射、内存大小定义,等等。 能够自行启动目标机、初始化目标机、能够 与host通信以下载Vxworks核、把控制权交 给Vxworks核来调用用户应用程序等功能。
CPU 上电复位 基本配置初始化
ROM 拷贝到 RAM 并跳到 RAM 入口
硬件初始化 包括通信口
初始化 Vxworks 核 启动 Vxworks 核
重新执行目标机 的硬件初始化
执行用户程序
BC NG
BTCoNGrnado&VxWorks框架
BC NG
Vxworks
应用广泛的嵌入式实时操作系统
Vxworks与其它实时OS一样,基于以下两个重要机制: * 多任务环境及任务间通信 * 硬件中断处理
Vxworks多任务内核完成的功能是:实时调度,任务间通信及互斥。 其它功能则作为系统库围绕在内核周围,它们可根据需要进行剪裁。
Vxworks与非实时系统的不同之处在于: Vxworks的优先抢占机制基于调度, Vxworks对外部事件的反应和处理快, Vxworks容量小并且可配置(微内核结构)
BTCo rNnGad o ( 2)
• Tornado集成开发环境由以下几个部分组成:
Tornado开发环境(PC)
WindSH
CrossWind Editor
Browser
WindCodig
Target Server
目标系统
应用程序
VxWorks Target Agent
BC NG
Tornado主机
VxWorks的整体构架
BC NG
Hardware Independent Software Applications
I/O System
VxWorks libraries
File System
Wind microKernel
TCP/IP
SCSI Driver
Hardware Abstraction Layer
VBC xNGWorks的特点
微内核设计
MicroKernel Size<10K ; 功能模块化; 高可靠设计; 快速多任务切换、响应时间短 中断延时小,满足实时要求;
VBC xNGWorks的特点
对硬件不做假设。
硬件设计电路可完全自定义;支持各种或自定义 的外设;
支持的CPU构架包括: Intel x86 i960 StrongARM Motorola 68K CPU32 Coldfire Mcore PowerPC ARM 7, 8, StrongARM MIPS R3K, R4K, R5K Hitachi SH1, SH2, SH3 NEC V83x, V85x SPARC, UltraSPARC Seimens SA Hitachi SH Mitsubishi M32RD
Flash Driver
MMU Driver
Cache Driver
Serial Driver
Ethern et
Driver
Other Driver
s
Hardware
BVCxNwG o r k s 特 点
• WIND微内核 • 硬件支持广(BSP) • 较好的兼容性,POSIX1003.1.b • 良好的可裁减性 • 很好的开发环境:tornado • 动态连接和下载 • 多处理器、网络协议,图形界面支持
用于网络上任务间的通信 ●信号(Signal):用于异常处理
此外,Vxworks提供了三种共享内存的对象(shared-memory objects) 来实现运行在不同CPU上的任务间的高速同步和通信。 ●共享信号量(shared semaphores):有二进制,记数型两种 ●共享消息队列(shared message queues) ●共享内存分区(shared-memory partitions):有系统类型和用户类型