好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

VxWorks 5.5 学习笔记.doc

13页
  • 卖家[上传人]:工****
  • 文档编号:558775737
  • 上传时间:2024-04-06
  • 文档格式:DOC
  • 文档大小:397.01KB
  • / 13 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 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 VxWorks 1.IMAGE的结构 IMAGE可以分为三个层次四个部分,最底层是BSP,中间层是VxWorks其中包含WindKernel 和components两部分,最高层是应用实现层app1) BSPBSP是系统用来管理外设的部分,由两部分组成:初始化、驱动程序所谓初始化是指从系统上电复位开始直到wind kernel和usrRoot根任务启动的这段时间系统的执行过程驱动程序就是一些包含I/O操作的子函数,是对一些调试或加载应用程序所需要的外设的驱动程序初始化可分为3个过程:CPU Init、Board Init、System InitCPU Init初始化CPU的内部寄存器Board Init初始化智能I/O的寄存器,将device打通System Init为系统的运行准备数据结构,进行数据初始化。

      驱动程序的特点是不能自动执行,只能被动调用调用可以有三种方式:任务直接调用、任务调用System Call、任务调用服务具体如下图1-1所示 Task subrutine system call serviceVxWorkks+ components driver 图1-1驱动程序调用关系图所以驱动程序可以抽象为三个层次:常规操作、与VxWorks的接口、与Component的接口常规操作是设备的固有操作逻辑,有两层含义:体现在I/O编址的含义上微观上表现为CPU操作device的寄存器、宏观上表现为具体操作的含义,如图1-2所示驱动程序与VxWorks的接口、驱动程序与Component的接口有三层含义:I/O管理;操作类型规整;参数规整。

      数字电路 电 电I/O processor 光 机械 …控制电路 registerStatusAddresscontrol CPU r/w 图1-2驱动程序常规操作含义图 驱动程序与VxWorks的接口使Driver具有更好的层次性,驱动程序与Component的接口使Driver具有更好的抽象性2.IMAGE的执行过程 在初始化过程中,是由底层到高层的一个执行过程,而运行是由高层到底层的一个执行过程3.IMAGE在Memory中的位置VxWorks对内存的使用采用的是Flat Mode:静态分配的IMAGE占用空间(.code、.data、.bss)、系统的动态空间(wind kernel创建的REGION#0)、用户的动态空间如下图1-3是内存区域划分图IMAGE可以被动态或静态链接,VxWorks在开发阶段可动态地下载目标文件,并与操作系统及其它目标文件动态链接。

      这与DOS的*.EXE文件相类似,其地址在链接以后是浮动的,只在装载时才与绝对物理地址相对应;VxWorks成品阶段是采用静态链接的 Tornado是一个用于软件交叉开发的集成开发环境它提供了一种高效的开发实施嵌入式系统的高效方法,同时与目标机的相关很少有如下的组成部分:l VxWorks,高效能的操作系统l 应用开发工具l 集成开发环境 第二章Vxworks操作系统2.1内存管理实时嵌入式操作系统得内存管理与通用操作系统有很大不同,它有一些特殊的要求:l 快速性:l 可靠性:l 高效性2.1.1嵌入式系统动态内存分配1.基本概念堆:嵌入式系统中,将代码、数据和系统信息等所占的内存之外的部分用于内存的动态分配这个区域称为堆内存管理只要是管理对内存的分配与回收内存单元:堆一般被分为一些固定大小的单元,单元大小为2的乘幂(以B为单位),动态分配程序malloc()实际分配的内存是内存单元的整数倍假设内存单元是4B,请求分配101B,则实际分配了104B,多余的3B成为内部内存碎片内存碎片:除过内部内存碎片,还有一类外部碎片:当堆中空闲内存快都小于请求分配的内存大小时称外部碎片消除内存碎片的方法是“紧缩”,即通过移动空闲内存快只间的内容是空闲没内存快相邻接合并为较大的内存块。

      内存对齐:内存对齐指的是,在特定体系结构中强加在数据项的内存地址上的限制很多处理器不能在任意地址访问多字节的整数项(如整形)内存分配表:良好的内存分配表是获得高效内存管理的关键,它决定了下列内存管理是否能够快速有效得实现分配内存时确定是否有足够大的空闲块;释放内存时更新内存管理信息;释放内存时确定当前的内存块是否能与相邻的空闲块合并2.1.2Vxworks动态内存管理 在Vxworks5.x中,有两个内存池用于动态内存分配:系统内存池和Target Server内存池系统内存池面向目标板内存的使用,其管理在目标板上进行Target Server 内存池在宿主机上进行1. 管理内存区的数据结构 mempart系统初始化时创建系统内存分区,,管理整个系统内存池中的内存用户也可以通过memPartlib库中的函数实现自己的分区分区中所有的空闲内存块通过memPartlib.h中的mempart数据结构在系统初始化时形成一个双向的链表2. 动态内存分配在内存分配时,每个块前面会有一个头用于内存的回收、合并、分配实际占用的内存大小是分配请求的内存大小与头之和分配函数返回的地址是所获可用内存的起始地址。

      Malloc()函数会自动边界对齐,有可能造成内存碎片3. 动态内存的释放内存释放时,根据块头的信息判断相邻的内存块是否空闲,如果是将进行合并,并修改空闲块长如果不是将释放的内存插入空闲链表,紧接块头的8个字节用于存放指针用于指向其他的空闲块4. Vxworks5.x动态内存管理的局限性由于系统内存分区属于一种临界资源,由信号量保护,使用malloc()会导致当前程序阻塞,因此不能在ISR中使用会导致大量的内存碎片,系统会不稳定2.1.2Vxworks内存布局Vxworks5.x的内存按照装载的内容不同可以分为5个区:低端内存区、Vxworks区、Target Server内存池、系统内存池和用户保留区用户保留区系统内存池Target Server内存池Vxworks区低端内存区LOCAL-MEM-LOCAL-ADRSRAM-LOW-ADRSWDB-POOL-BASESysphysmemtop()sysMemTop()l 低端内存区在低端内存区内通常包含了中断向量表、bootline(系统引导配置)和exception message(异常信息)等信息l Vxworks区l 系统内存池2.1.3实现自己的内存分配管理 1.借用消息队列1)缓冲池的初始化 msgQCreat()创建一个专用的消息队列,其消息长度为4B,正好等于一个32b的地址指针,消息队列的最大消息数即缓存池可以缓存的区个数。

      然后动态申请N个等长的缓存区缓存区长度L根据系统的需求而定将N个缓存区的地址发送到消息队列中这样就借助于消息队列的管理机制实现了自己的内存分配管理2)内存分配使用msgQRecieve()收消息获得缓存区地址3)释放内存:msgQSend(),将内存地址归还到消息队列即可2.2实时多任务系统2.2.1 任务基础任务是代码运行的一个映象,从系统的角度看,任务是竞争系统资源的最小运行单元任务可以使用或等待CPU、I/O设备及内存空间等系统资源,并独立于其它任务,与它们一起并发运行(宏观上如此)多任务设计能随时打断正在执行着的任务,对内部和外部发生的事件在确定的时间里作出响应VxWorks实时内核Wind提供了基本的多任务环境从表面上来看,多个任务正在同时执行,实际上,系统内核根据某一调度策略让它们交替运行系统调度器使用任务控制块的数据结构(简记为TCB)来管理任务调度功能任务控制块用来描述一个任务,每一任务都与一个TCB关联TCB包括了任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息调度器在任务最初被激活时以及从休眠态重新被激活时,要用到这些信息TCB的主要内容:任务的程序计数器处理器的通用计数器,浮点寄存器局部变量和使用函数调用是的堆栈标准输入输出和错误输出时的重定向一个延时定时器一个时间片定时器内核控制结构信号处理程序调试和性能监视,如断点和列表。

      2.2.2任务的调度方式支持256个优先级(0-255,0最高,255最小)一般来说,一个任务的优先级在其生存期内是固定的,但也可以根据需要,调用函数taskPrioritySet()动态改变任务的优先级支持两种任务调度算法:基于优先级的抢占式和时间片轮转l 基于优先级的抢占式调度算法一旦一个高优先级的任务进入ready状态,将抢占当前运行任务的CPU资源,进入运行状态如果某个任务在执行过程中不愿意被打断可以屏蔽抢占tasklock()来关闭抢占,但不能关闭中断,可以暂时关闭中断l 同一优先级的时间片轮转算法2.2.3任务编程1.VxWorks内核的任务管理提供了动态创建、删除和控制任务的功能,具体实现通过如下一些系统调用:taskInit()创建的任务是挂起的,必须随后。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.