




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 VxWorks 操作指南 项目 子项目名称 3G BTS 平台分系统 拟制部门 科技发展部 拟制日期 2000 2 28 2 目录目录 1 实时嵌入式操作系统 VXWORKS 3 2 VXWORKS和 TORNADO 4 3 TORNADO的配置 5 3 1 主机的设置 Tornado Register 5 3 2 目标的设置 6 4 TORNADO开发工具的使用介绍 7 4 1 Editor 7 4 2 Projects Tornado 2 0版本特有 7 4 3 Shell 8 4 4 Debugger 9 4 5 Browser 10 4 6 GNU工具 10 4 7 Target Server 11 5 VXWORKS的启动过程及相关例程 12 5 1 VxWorks 启动的一般原理 12 5 2 MSDOS 的启动过程 13 6 VXWORKS的多任务管理 14 6 1多任务 14 6 2任务状态转换 14 6 3 wind任务的排序 scheduling 机制 14 6 4 任务控制 15 6 5 任务的删除和删除安全 15 6 6 任务异常处理 16 6 7 VxWorks系统任务 16 7 任务间通信 原语消息的传递 16 7 1 概述 16 7 2 互斥 17 7 3 同步 18 7 4 删除安全 19 7 5 中断和任务间的通信 19 8 应用程序的加载 19 3 1 实时嵌入式操作系统实时嵌入式操作系统 VxWorks VxWorks 操作系统是一种应用广泛的嵌入式实时多任务操作系统 其内核 WIND 具有强占式优先级排序的多任务处理能力 提供了任务间同步和通信的机制 支持中 断处理 看门狗定时器和内存管理功能 VxWorks 的开发环境是 Tornado 应用程序的 开发语言是 ANSI C 和 C VxWorks 的开发体系是代理 服务器 Agent Server 结构 体系 即驻留在主机 Host 的开发工具 Tornado 通过目标服务器 Target Server 指 示目标上的目标代理 Target Agent 进行目标板上的操作并将结果返回给主机 主机 和目标间通常是通过网络 也可以通过串口线 进行通信的 两者间的交互关系如下图 示 图 1 目标服务器和目标代理间的交互关系 VxWorks 操作系统实时性体现在较低的中断时延 其嵌入性体现在程序代码的动态加载 VxWorks 的主要特性和功能为 I O 系统 VxWorks 提供了快速 灵活的与 ANSI C 兼容的 I O 系统 包括 UNIX 标准缓存 I O 和 POSIX 标准异步 I O VxWorks 主要包括网络驱动器 用于以太网 SCSI 驱动器和并行口驱动器 对于 x86 板支持包 BSP 还包括键盘 显示 磁盘驱 动器 本地文件系统 VxWorks 支持主要两种文件系统 一种是与 MS DOS 兼容的 dosFs 另一种是与 RT 11 兼容的文件系统 网络工具 VxWorks 通过 BSD 套接字兼容的编程接口提供对其它用 TCP IP 连网 的 VxWorks 系统的透明接入 它同时提供了远过程调用 RPC 远程文件存取等网 络功能 所有的 VxWorks 网络功能都符合标准的 Internet 协议 实用工具库 VxWorks 提供了扩展的工具例程库 包括中断处理 看门狗定时器 内存分配 字符串格式 线形和环形缓存区操作以及 ANSI C 例程库 目标代理 目标代理允许一个 VxWorks 应用程序使用 Tornado 开发工具远程调 试 板支持包 板支持包 BSPs 是用于特定处理器模块板的例程集 提供了硬件初 始化 中断设置 定时器设置 内存映射等功能 HOSTTARGET NETWORK Ethernet etc Target Server VxWorks OS Communica tion Driver Target Agent T1T1 4 2 VxWorks 和和 Tornado Tornado 是一个软件交叉开发的集成环境 提供了一种高效的最小干预目标系统的 实时嵌入式开发手段 它包含了 VxWorks 操作系统和生成应用程序的工具 Tornado 运行于主机 对远程目标系统提供基于主机的动态链接器和符号表 例程名称和变量 名的集合 的接入 Tornado 提供的交互式开发工具包括 集成源代码编辑器 应用程序生产工具 汇编器和相应的程序 用户定制的项目管理工具 集成的 C C 汇编器和生成器 Brower 可视化目标系统监视器 Debugger 增强的图形化源级调试器 WindSh 控制目标的 C 语言外壳程序 WindConfig VxWorks 特性配置图形化工具 通常 Tornado 驻留的宿主机和运行 VxWorks 的目标机是通过 Ethernet 或串行口 连接的 应用程序在主机上编辑 编译生成 o 文件 然后由 Tornado 工具将其加载到 目标机系统运行 同时可以在 Debugger 下进行源级调试 Tornado 支持多个主机对一 个目标机和多个主机对多个目标机的操作模式 其核心是目标服务器 Target Server 和目标代理器 Target Agent 一一对应的关系 每个主机的 Tornado 工具都通过一个 特定的目标服务器和对应的目标代理器操控相应的目标机系统 我们通过选择使用 Target Server 来选择使用目标机 共享 Target 还牵涉到一个东西 那就是 Tornado Registry 要做到真正的共享 必 须要正确理解和正确使用它 Tornado Registry 就是一个 Target Server 的注册器以及命 名器 当每个 Target Server 程序启动时 Target Server 程序向这个程序注册 告诉注 册器它已经启动了 Registry 接受注册并给这个 Target Server 赋予唯一的标识名 然 后其他 Tornado 工具就可以使用这个标示名来选择使用不同目标机 一台宿主机可以 使用运行在远程宿主机上的 Tornado Registry 来进行对目标的操纵 最有效的共享目标机的计算机间的连接图如图 2 所示 在宿主机服务器上运行着 一个 Tornado Registry 以及多个 Target Server 在安装 TORNADO 过程中 这台计算 机应该使用 Install Tornado Registry locally in the Startup group 选项安装 Registry 在 其他的宿主机上只运行 TORNADO 开发环境以及 TORNADO 工具 在安装 TORNADO 过程中 这台计算机应该使用 Configure to use a remote Tornado Registry 选 5 项安装 Registry 并设置好运行 Registry 的宿主机的地址 这些宿主机都通过使用这个 TORNADO Registry 来使用运行在宿主机服务器上的 Target Servers 这样任意一个用 户可以使用任意一台目标机 提供了最大限度的自由 另外还可以限制某些用户只能 使用某些 Target Server 从而提供了全方位的控制 图 2 目标机共享连接示意图 3 Tornado 的配置的配置 3 1 主机的设置 主机的设置 Tornado Register Tornado Server 注册器 Register 是一种跟踪 Target Server 并提供主机接入的服务 注册器必须始终运行 否则 Terget Server 不能与目标及通信 下图是注册器启动后的情况 其中 wtxregd 是注册器得执行文件 hogback 是驻留在主机的目标服务器的标识名 6 图 3 Tornado Register 但安装完 Tornado 后你可以通过选项 Option 窗口选择使用不同的注册器 3 2 目标的设置目标的设置 下面给出了目标的配置两个的典型情况 图 4 最小的 Tornado 配置 对于这种通过串行连接主机和目标板的配置可以采用简单的不需要网络支持的启动机 制 如用超级终端充当目标服务器 另一种典型的联网配置起况为 图 5 具有网络连接的 Tornado 配置 7 其中文件服务器是 VxWorks 的二进制程序文件驻留的场所 通常就是宿主机的磁盘 当你通过网络启动 引导 VxWorks 时 这也使目标机默认的启动配置 你必须在存有 VxWorks 映像的宿主机上开启 FTP Server FTP Server 必须设置用于 VxWorks Target 标识 自己的用户标识和口令 这通常在 FTP Server 程序中添加设置 如下图示 图 6 FTP Server 添加用户设置 此外还需要开启一个应用程序 portmap 用于主机和目标机的通信端口映射 它只在 Tornado 1 01 中存在 4 Tornado 开发工具的使用介绍开发工具的使用介绍 4 1 Editor Editor 是用来生成 VxWorks 源文件的工具 其特性有 C C 关键字加亮显示 Debugger 集成 可以通过 editor 跟踪代码的执行 编译器的集成 可以通过编译器的消息链接到编辑器 如通过双击编译结果错 误提示行跳到源程序对应处 4 2 Projects Tornado 2 0 版本特有 版本特有 项目机制是 Tornado 集成开发环境的重要元素 它提供了图形化和自动化机制用于生 成可加载到目标板的应用程序 向 VxWorks 内核加入客户要求的特性 以及生成目标启动 后可以和 VxWorks 内核链接的应用程序 Tornado 的项目组织结构与 VC 的项目组织很 相似 项目机制主要提供如下工具 管理构成项目的文件 把相关项目合并到工作空间 定制和裁减 VxWorks 向 VxWorks 加入应用程序初始化代码 定义不同的 Build 选项 8 生成应用程序和 VxWorks 映像 下载应用程序可执行代码到目标 使用项目机制配置 VxWorks 的方法与以前有很大不同 在 Tornado1 01 版本中通常在 BSP 板支持包 的配置文件 config h 或 configAll h 中改变 VxWorks 参数 而在 Tornado2 0 版本中大部分的参数配置更改都可以在项目中完成 通常在你第一次生成项目时会提示你选择一种项目类型 如下所示 图 7 项目类型提示窗 可启动的 VxWorks 映像 bootable VxWorks image 是指包含链接到 VxWorks 内核的 应用程序 VxWorks 映像可以通过包含或不包含操作系统部件来配置 如果可启动的 VxWorks 映像没有应用程序代码那么它就是一个纯粹的 VxWorks 内核映像 可下载的应用程序模块 downlable application module 是指在目标启动加载完操作系 统映像后可以动态的从宿主机上下载到目标板上的可执行代码 可下载应用程序的启动运 行可以在 Shell 或 Debugger 下调用相应的命令来实现 工作空间 Workspace 是一个逻辑的 图形化包容器 它可以包含一个或多个项目 它提供了有用手段用于把为特定产品开发的可下载应用程序 VxWorks 系统映像和可启动 应用程序联系起来 它还可以在开发人员间共享项目 工具链 Toolchain 是一种交叉开发工具用于生成特定处理器的应用程序 4 3 Shell Tornado 的外壳工具 WindShell 允许你加载应用程序 调用 VxWorks 和项目模块的子 例程 WindShell 可以解释执行大部分 C 语言表达式 例如键入 printf Hello world n 你会在目标机显示器上或者虚拟显示器上看到显示结果 WindShell 的操作过程与 Tornado 系统的三个部件有关 如下图示 9 图 8 Shell 执行示意 然而 在通常的应用程序开发调试阶段 Debugger 的图形化调试开发手段更为常用 4 4 Debugger Tornado 调试器 CrossWind 的设计综合了图形和命令行接口的最佳特性 最常用的调 试活动例如设置断点 控制程序的执行都可以通过点击接口来实现 如下图示 图 9 调试工具栏 Tornado 2 0 调试工具栏的具体解释和操作可参考 Tornado 2 0 的帮助 按照默认的设置 在 Tornado 下你一次只能调试一个任务 任务或者通过 运行 对 话框生成的任务选项来选择或者通过 Attach 对话框来调试已经存在的任务 当调试器被附 着 attached 在一个任务上时调试器的命令只影响该任务本身 例如断点仅应用于该任务 当任务到达一个断点时只有该任务而不是整个系统停下来 这种调试模式称为任务模式 与它相对应的是系统级调试模式 即任务只能被生成 当任务被中断时整个系统都停下来 你可以通过 Tornado 开发集成环境下的面板上的按键 见图 9 启动诸如 Debugger 加载模块 Download 运行任务和设置中断 你也可以使用菜单栏的 Debugger 下选项进 行调试 下面仅给出常用的调试命令的使用方法 详细的说明参见帮助手册 加载模块 Downloading a Module 一旦 Debugger 运行起来后你可以通过单击 Download 选择加载到目标用于调试的模块 Attach 当任务加载运行时你可以把调试会话附着在它上面 即选择当前调试的 任务 Attach 显示目标上运行的任务列表 通过它你可以选择调试任务 卸载模块 Unload 与 Download 相对应 你可以在 Debugger 命令行方式下使 用 Unload 命令从目标上卸载动态链接的模块 设置断点 你可以在 Tornado 编辑器中源文件的任意位置设置断点 方法是用鼠 标选中设置断点的行 然后在工具栏单击设置断点的命令图标 Debugger 也提供了命令行方式 只在 Tornado1 01 中提供 完成必要的操作 如加载 程 序到目标 写在程序 运行某例程 删除该例程 load xxx o unload xxx o 10 run someroutine td someroutine 当加载程序运行时结果不正确需要修改时应按照以下步骤来进行 1 在 Debugger 行编辑窗口中执行 td someroutine 如果该例程是死循环没有结束 的话 2 把该加载程序卸载 unload xxx o 3 在 Editor 中进行必要的源程序修改 4 删除旧的生成文件即 o 文件 5 在 Project 下调用 Make Currunt Source File 命令生成新的 xxx o 6 再次加载 xxx o 到目标机上运行 4 5 Browser Tornado Browser 提供了 详细的目标运行状态的信息 通过 Browser 你可以检查 详细的任务信息 信号灯 semphore 消息队列 内存分配 目标上所有任务的 堆栈使用情况 目标模块的结构和 符号 中断矢量等 图 10 Browser 启动窗口 4 6 GNU 工具工具 Tornado 集成开发环境提供了一系列 GNU 工具用于生成特定 CPU 的可执行应用程序 这些工具包括 GNU compiler GNU assembler GNU linker Tornado 提供给用户一个简单的接 口由 Tornado 内部潜入的 GNU 工具自动化的批处理完成 这个接口就是在 Project 下的 Make 命令 Tornado1 01 对于 Tornado2 0 生成 o 文件是在项目管理器中通过单击右键选 择来完成 如下图示 11 图 11 项目管理器 4 7 Target Server 目标服务器 Target Server 是运行在主机上管理 Tornado 宿主机上的工具和目标系统 间的通信 Target Server 包括了符号表和对象模块装载器用于把应用程序模块装载到运行 的目标系统 其关系结构如下图示 图 12 Host 和 Target 关系示意图 在 Tornado1 01 版本下 Target Server 由工具栏下的 Target Server Lancher 和 Target Server Management 进行启动和管理 通常当你启动目标机引导操作系统后可以通过 Target Server Lancher 对话框来启动目标服务器 而后才可以启动 Torando 其他的开发工具 如 Shell Debugger Browser 等 图 13 Target Server Lancher 对话框 当目标级系统促县故障或以外关节而造成 Target Server 与目标系统失去联系需要关闭 12 时应采取以下步骤来进行 a 用 quit 命令退出 Shell 和 Debugger 如果他们仍在运行需先用 Ctrl Break 命令暂 停 b 打开 Target Server Management 对话框选择 kill 命令关掉 target server c 重新 Lanch Target Server 5 VxWorks 的启动过程及相关例程的启动过程及相关例程 下面以 PC104 模块的 VxWorks 启动顺序为例介绍 VxWorks 的启动原理 5 1 1 VxWorksVxWorks 启动的一般原理启动的一般原理 Intel x86 体系的目标板上有一块 BIOS ROM 存有系统设置和装载引导程序的程 序代码 BIOS ROM 并不被 VxWorks 覆盖 在开发主机上生成的 VxWorks 可执行文件 如 vxworks st 和 bootrom uncmp 由标准的 PC 自举机制装载到目标机 RAM 中 再由该 引导程序从主机或本地装载 VxWorks 系统映像到内存完成引导过程 5 2 2 MSDOSMSDOS 的启动过程的启动过程 通常 PC BIOS 启动进程工作顺序为 1 BIOS 引导进程在第一个软盘 A 的引导扇区寻找装载程序 2 如果装载程序不在 A 上 引导进程在第一个硬盘 C 的引导扇区寻找 3 装载程序被装入内存并执行 4 典型情况下 装载程序从磁盘装载操作系统并执行它 从而完成引导进程 5 5 3 3 VxWorksVxWorks 初始化顺序初始化顺序 对于 VxWorks 启动顺序除第四步外与 PC BIOS 启动顺序一致 VxWorks 装载程 序装载并执行系统文件 bootrom sys 为生成 VxWorks 引导盘 软盘或硬盘 你必须 用 VxWorks 装载程序代替标准的装载程序 即把 VxWorks 装载程序写入磁盘引导扇 区并生成合适的引导映像 bootrom sys bootrom sys 可以从以下 VxWorks 映像中得到 bootrom uncmp 最小的引导程序 vxworks 可自启动的 VxWorks 操作系统映像 vxworks st 可自启动 内置 Shell 的 VxWorks 操作系统映像 VxWorks 系统映像装入内存后 BOOT ROM 把控制权交给 VxWorks 启动进入点 sysInit 它完成诸如关闭所有中断 初始化寄存器等工作并激活 usrInit UsrInit 例程 保存了关于启动类型的信息 处理所有的必须在内核被实际启动前执行的初始化工作 并且接下来由它来启动内核的执行 它也是 VxWorks 中运行的第一块 C 代码 UsrInit 例程仅仅为生成系统初始任务而做必要的准备工作 这个初始任务是 usrRoot 由它来 完成系统启动 下表给出了 VxWorks 运行时系统初始化的一般顺序及所完成的功能 13 序号例程完成工作位置 1SysInit 关中断 清悬挂中断 各种初始化工作 调用 usrInit 指定启动类型 SysALib s 2UsrInit bss 段置零 在 sysStartType 中保存启动类型 调用 excVecInit 初始化所有系统和默认的中断矢量 调用 sysHwInit usrKernelInit 及 kernelInit 例程 UsrConfig c 3UsrKernelInit配置常量初始化 UsrKernel c 4KernelInit 初始化并启动内核 调用 intLockLeveSet 从内存池 顶部生成根堆栈和 TCB 为 usrRoot 调用 taskInit 和 taskActivate 调用 usrRoot KernelLib c 5UsrRoot 初始化 I O 设备 安装驱动器 生成 configAll h 和 config h 中指定的设备 初始化设备 调用 wdbConfig 配置和初始化目标代理 若目标驻留 shell 配置则启 动运行 UsrConfig c 表 1 VxWorks 运行时系统初始化的一般顺序 6 VxWorks 的多任务管理的多任务管理 通常 一个应用程序被组织成许多独立的但相互合作的程序 这些执行中的程序 称为任务 在 VxWorks 中 任务对系统资源具有立即的 共享接入 同时对线程具 有充分的独立控制 6 1 多任务多任务 多任务提供了应用程序对外部多个离散事件控制和响应的基本机制 VxWorks 实 时内核 wind 提供了基本的多任务环境 每个任务都有自己的上下文 即每次由内核 调用时所见的 CPU 环境和系统资源 任务切换时 该任务的上下文被保存在任务控 制块 TCB 中 6 2 任务状态转换任务状态转换 任务在同一时间只能处于下面四种状态之一或它们的组合 Ready 准备由 CPU 处理 Pended 由于某些资源得不到而阻塞 Delayed 任务休眠一段时间 Suspended 任务不能执行 主要用于调试时 内核在系统中保持任务的当前状态 当被生成时 任务进入 suspended 状态 然 后生成的任务需要一个激励来进入 ready 状态 替代这一过程的是使用 spawning 原语 即用一个函数使任务进入 ready 状态 任务可以在任何阶段被删除 14 6 3 wind 任务的排序 任务的排序 scheduling 机制 机制 多任务处理需要一种 scheduling 算法来协调任务间操作 Wind 默认的排序算法 是基于优先级的抢占式算法 Preempive Priority Based algorism 其典型的控制任务 排序例程有 kernelTimeSlice Control round robin scheduling 循环排序 taskPrioritySet Change the priority of a task taskLock Disable task rescheduling taskUnlock Enable task rescheduling 抢占式优先级排序是指任何任务都具有一定的优先级 优先级高的任务可以中断 正在执行的低优先级的任务 执行完毕后再把 CPU 控制权交给先前的任务 Wind 内 核共有 256 个优先级 0 为最高优先级 255 为最低优先级 任务执行时也可以动态 改变其优先级来反映外部事物优先级的变化 对应的例程为 taskPrioritySet 作为抢占式优先级排序算法是循环排序算法 该算法为同等优先级的任务公平的 分配 CPU 所有权 它可以用例程 kernelTimeSlice 来开启 6 4 任务控制任务控制 VxWorks 基本的任务控制例程包含在 taskLib 库中 这些例程提供了任务的生成 控制和信息 最基本的任务生成例程是 taskSpawn 其调用形式为 id taskSpawn name priority options stacksize main arg1 arg10 其中 id 是生成的新任务的标识 函数具体说明如下 int taskSpawn char name name of new task stored at pStackBase int priority priority of new task int options task option word int stackSize size bytes of stack needed plus name FUNCPTR entryPt entry point of new task 新任务的进入点 int arg1 1st of 10 req d task args to pass to func int arg10 tenth of req d task args to pass to func 任务的选项 option 可以为 VF FP TASK VX NO STACK FILL VX PRIVATE ENV 和 VX UNBREAKABLE 其具体含义见 VxWorks 编程手册 例如 生成一个包含浮点操作的任务 tid taskSpawn tMyTask 90 VX FP TASK 20000 myFunc 2387 0 0 0 0 0 0 0 0 0 15 6 5 任务的删除和删除安全任务的删除和删除安全 删除一项任务通常执行如下例程 Call Description exit Terminate the calling task and free memory task stacks and task control blocks only Memory that is allocated by the task during its execution is not freed when the task is terminated taskDelete Terminate a specified task and free memory task stacks and task control blocks only taskSafe Protect the calling task from deletion taskUnsafe Undo a taskSafe make the calling task available for deletion Exit 调用用于任务自删除 即退出 而 taskDelete 调用用于删除其他任务 TaskSafe 用于保护任务不被意外的删除 通常它与 taskUnsafe 成对使用 用 于保护临界区代码的执行 这种保护操作只作用于调用的例程 删除保护经常和互 斥信号量 mutual exclusion semaphore 一起使用 下面给出了常用的框架结构 taskSafe 任务保护 semTake semId WAIT FOREVER 阻塞直到得到信号量 Block until semaphore available critical region 临界区 semGive semId 释放信号量 Release semaphore taskUnsafe 取消任务保护 wind 还提供了一种功能对任务操作进行扩展 当任务生成 切换 或删除的时候 可以回调某一完成特定工作的例程 这是由 taskHookLib 库中的例程来实现的 通常 任何与内核无关的例程都可以被任务回调 6 6 任务异常处理任务异常处理 应用程序中的代码和数据错误通常会造成硬件的异常情况 例如 非法的指令 总线或地址错误 被零除等等 VxWorks 异常处理包用于处理这些异常 异常处理器 挂起引起异常的任务 保存异常点的任务状态 内核和其他任务继续执行 异常的描 述被传递给 Tornado 开发工具 由它来检查该异常情况 任务也可以通过信号 signal 机制把用户定义的例程附在异常处理器上 信号机制既可以处理软件异常 又可以处理硬件异常 这些例程在 sigLib 库中定义 6 7 VxWorks 系统任务系统任务 VxWorks 系统任务主要包括 根任务 tUsrRoot 内核中第一个被执行的任务 其进入点位于 usrConfig c 源文件的 usrRoot 例程 主要工作是初始化 VxWorks 各种设施 16 facility 生成其他系统任务 异常处理任务 tExcTask 网络任务 tNetTask 目标代理任务 tWdbTask 7 任务间通信 原语消息的传递 任务间通信 原语消息的传递 7 1 概述概述 消息是一组数据结构 用于在用户进程 模块和驱动程序间传送数据 状态和控 制信息 多任务间的原语消息的传递是通过任务间通信设施 facility 来实现的 VxWorks 提供了丰富的任务间通信机制 主要包括 共享内存 用于简单的数据共享 信号量 semphore 用于互斥和同步 消息队列和管线 pipeline 用于同一 CPU 内任务间消息的传递 套接字 socket 和远过程调用 RPC 用于网络透明的任务间通信 消号 signal 用于异常处理 下面针对 BTS 平台协议软件实现的需求重点介绍信号量 消息队列和管线等消息 传递机制 7 7 2 2 互斥互斥 最简单的进程间数据交换是通过共享数据结构即全局变量进行 但是它不能避免 同时访问内存的冲突 这需要一种机制来解决 获得资源的独享方法主要有关中断 关强占和用信号量对资源加锁 最有效的互斥方法是关中断 这种加锁保证了对 CPU 的独享 下面的进程用一对例程来实现这种互斥 funcA int lock intLock 不能被中断的代码段 intUnlock lock 这种方法的缺点是增加了中断时延 不适合实时性要求很高的情况 另一种互斥方法是关强占 disabling preemptive 其实现方式和特点与关中 断类似 采用如下的实现方式 funcA 17 taskLock 不能被中断的代码段 taskUnlock 一种更好的实现机制是采用信号量 semaphores VxWorks 信号量是高度优化的 提供最快的任务间通信的机制 它也是基本的互斥和任务同步的手段 最快 最常用的信号量类型是二进制 Binary Wind 信号量提供了一致的控制接口 其控制例程如下表所示 Call Description semBCreate Allocate and initialize a binary semaphore semMCreate Allocate and initialize a mutual exclusion semaphore semCCreate Allocate and initialize a counting semaphore semDelete Terminate and free a semaphore semTake Take a semaphore semGive Give a semaphore semFlush Unblock all tasks that are waiting for a semaphore 其中 semBCreate semMCreate and semCCreate 例程调用返回用于后续信 号量控制例程使用的句柄 具体的使用方法参考帮助文件 当一个任务准备访问共享资源时它必须先调用 semTake 获得信号量 其它任 务在执行访问这段资源时遇到阻塞 只有当前一个任务调用 semGive 释放信号量 时被阻塞的任务才能访问共享资源 下面给出了使用信号量控制例程的例子 includes include vxWorks h include semLib h SEM ID semMutex Create a binary semaphore that is initially full Tasks blocked on semaphore wait in priority order semMutex semBCreate SEM Q PRIORITY SEM FULL semTake semMutex WAIT FOREVER 临界区 一次只能被一个任务访问 semGive semMutex 7 7 3 3 同步同步 当用于同步时一个信号量代表一个任务等待的条件或事件 起初信号量是得不到 的 为空 一个任务或中断服务例程通过给出信号量指示事件的发生 另一个任务通 过调用 semTake 等待该信号量 并处于阻塞状态直到该事件发生 给出信号量为止 18 须指出的是用于互斥的信号量和用于同步的信号量是不同的 前者信号量初始时为满 每个任务先占用后释放 后者信号量初始时为空 一个任务等待另一个任务给出信号 量 在下面的例子中 init 例程生成二进制信号量并把中断服务例程附在一个事 件上 而后生成处理该事件的任务 例程 task1 运行到 semTake 它在该点阻 塞直到一个事件引起中断服务例程 ISR 调用 semGive 当 ISR 结束时 task1 处理该事件 Example 2 4Using Semaphores for Task Synchronization This example shows the use of semaphores for task synchronization includes include vxWorks h include semLib h include arch arch ivarch h replace arch with architecture type SEM ID syncSem ID of sync semaphore init int someIntNum connect interrupt service routine intConnect INUM TO IVEC someIntNum eventInterruptSvcRout 0 create semaphore syncSem semBCreate SEM Q FIFO SEM EMPTY spawn task used for synchronization taskSpawn sample 100 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年男士护理项目立项申请报告范文
- 月光下的古镇夜晚写景演讲稿(5篇)
- 2025-2026学年四川省绵阳市部分学校高一上学期开学分班检测英语试题(解析版)
- 2025安徽芜湖市国有资本投资运营有限公司招聘10人模拟试卷及答案详解(名师系列)
- 鲁滨逊漂流记的启示与勇气7篇
- 2025广东惠州市惠阳区教育局选调下属事业单位工作人员15人考前自测高频考点模拟试题及完整答案详解一套
- 循环经济领域资源回收承诺书7篇
- 先进技术运用服务保障承诺书9篇
- 咖啡烘焙品质保障承诺书4篇
- 古董修复技术保证承诺书(6篇)
- 客运管理工作
- 人教版小学三年级数学上册各单元测试卷含答案全套
- 初中地理跨学科主题学习设计与实施
- 人教版一年级上册数学期中试卷(共5套-可直接打印)
- CVD 碳化硅涂层产品技术要求
- 2024版以房抵债协议范本
- 马克思主义制度经济理论知到智慧树章节测试课后答案2024年秋上海财经大学
- 【部编】人教版六年级上册道德与法治全册知识点总结梳理
- 社区居家养老服务设计方案范文
- JT-T-1180.2-2018交通运输企业安全生产标准化建设基本规范第2部分:道路旅客运输企业
- 中国省市县行政区划
评论
0/150
提交评论