已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VxWorks 5 5 开发指南学习笔记开发指南学习笔记 第一章第一章 VxWorks 概述概述 1 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 1IMAGE1 1IMAGE ofof VxWorksVxWorks 1 IMAGE 的结构 IMAGE 可以分为三个层次四个部分 最底层是 BSP 中间层是 VxWorks 其中包含 WindKernel 和 components 两部分 最高层是应用实现层 app 1 BSP BSP 是系统用来管理外设的部分 由两部分组成 初始化 驱动程序 所谓初始化是 指从系统上电复位开始直到 wind kernel 和 usrRoot 根任务启动的这段时间系统的执行过 程 驱动程序就是一些包含 I O 操作的子函数 是对一些调试或加载应用程序所需要的外 设的驱动程序 初始化可分为 3 个过程 CPU Init Board Init System Init CPU Init 初始化 CPU 的内部寄存器 Board Init 初始化智能 I O 的寄存器 将 device 打通 System Init 为系统的运行准备数据结构 进行数据初始化 驱动程序的特点是不能自动 执行 只能被动调用 调用可以有三种方式 任务直接调用 任务调用 System Call 任 务调用服务 具体如下图 1 1 所示 Task subrutine system call service components driver 图 1 1 驱动程序调用关系图 所以驱动程序可以抽象为三个层次 常规操作 与 VxWorks 的接口 与 Component 的接口 常规操作是设备的固有操作逻辑 有两层含义 体现在 I O 编址的含义上微观上表现为 CPU 操作 device 的寄存器 宏观上表现为具体操作的含义 如图 1 2 所示 驱动程序与 VxWorks 的接口 驱动程序与 Component 的接口有三层含义 I O 管理 操作类型规整 参 数规整 register 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 在开发阶段 VxWorkks 数字电路 电 电 I O processor 光 机械 控制电路 Status Address control CPU 可动态地下载目标文件 并与操作系统及其它目标文件动态链接 这与 DOS 的 EXE 文件 相类似 其地址在链接以后是浮动的 只在装载时才与绝对物理地址相对应 VxWorks 成 品阶段是采用静态链接的 Tornado 是一个用于软件交叉开发的集成开发环境 它提供了 一种高效的开发实施嵌入式系统的高效方法 同时与目标机的相关很少 有如下的组成部 分 VxWorks 高效能的操作系统 应用开发工具 集成开发环境 第二章第二章 Vxworks 操作系统操作系统 2 12 1 内存管理内存管理 实时嵌入式操作系统得内存管理与通用操作系统有很大不同 它有一些特殊的要求 快速性 可靠性 高效性 2 1 1 嵌入式系统动态内存分配嵌入式系统动态内存分配 1 基本概念 堆堆 嵌入式系统中 将代码 数据和系统信息等所占的内存之外的部分用于内存的动态分 配这个区域称为堆 内存管理只要是管理对内存的分配与回收 内存单元内存单元 堆一般被分为一些固定大小的单元 单元大小为 2 的乘幂 以 B 为单位 动 态分配程序 malloc 实际分配的内存是内存单元的整数倍 假设内存单元是 4B 请求 分配 101B 则实际分配了 104B 多余的 3B 成为内部内存碎片 内存碎片内存碎片 除过内部内存碎片 还有一类外部碎片 当堆中空闲内存快都小于请求分配的 内存大小时称外部碎片 消除内存碎片的方法是 紧缩 即通过移动空闲内存快只间 的内容是空闲没内存快相邻接合并为较大的内存块 内存对齐内存对齐 内存对齐指的是 在特定体系结构中强加在数据项的内存地址上的限制 很多 处理器不能在任意地址访问多字节的整数项 如整形 内存分配表 内存分配表 良好的内存分配表是获得高效内存管理的关键 它决定了下列内存管理是否 能够快速有效得实现 1 分配内存时确定是否有足够大的空闲块 释放内存时更新内 存管理信息 释放内存时确定当前的内存块是否能与相邻的空闲块合并 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 ADRS RAM LOW ADRS WDB POOL BASE Sysphysmemtop sysMemTop 低端内存区 在低端内存区内通常包含了中断向量表 bootline 系统引导配置 和 exception message 异常信息 等信息 Vxworks 区 系统内存池 2 1 3 实现自己的内存分配管理实现自己的内存分配管理 1 借用消息队列 1 缓冲池的初始化 msgQCreat 创建一个专用的消息队列 其消息长度为 4B 正好等于一个 32b 的地 址指针 消息队列的最大消息数即缓存池可以缓存的区个数 然后动态申请 N 个等长的缓 存区缓存区长度 L 根据系统的需求而定 将 N 个缓存区的地址发送到消息队列中 这样就 借助于消息队列的管理机制实现了自己的内存分配管理 2 内存分配 使用 msgQRecieve 收消息获得缓存区地址 3 释放内存 msgQSend 将内存地址归还到消息队列即可 2 22 2 实时多任务系统实时多任务系统 2 2 1 任务基础任务基础 任务是代码运行的一个映象 从系统的角度看 任务是竞争系统资源的最小运行单元 任 务可以使用或等待 CPU I O 设备及内存空间等系统资源 并独立于其它任务 与它们一 起并发运行 宏观上如此 多任务设计能随时打断正在执行着的任务 对内部和外部发生 的事件在确定的时间里作出响应 VxWorks 实时内核 Wind 提供了基本的多任务环境 从 表面上来看 多个任务正在同时执行 实际上 系统内核根据某一调度策略让它们交替运 行 系统调度器使用任务控制块的数据结构 简记为 TCB 来管理任务调度功能 任务控 制块用来描述一个任务 每一任务都与一个 TCB 关联 TCB 包括了任务的当前状态 优先 级 要等待的事件或资源 任务程序码的起始地址 初始堆栈指针等信息 调度器在任务 最初被激活时以及从休眠态重新被激活时 要用到这些信息 TCB 的主要内容 任务的程序计数器 处理器的通用计数器 浮点寄存器 局部变量和使用函数调用是的堆栈 标准输入输出和错误输出时的重定向 一个延时定时器 一个时间片定时器 内核控制结构 信号处理程序 调试和性能监视 如断点和列表 2 2 2 任务的调度方式任务的调度方式 支持 256 个优先级 0 255 0 最高 255 最小 一般来说 一个任务的优先级在其生 存期内是固定的 但也可以根据需要 调用函数 taskPrioritySet 动态改变任务的优先级 支持两种任务调度算法 基于优先级的抢占式和时间片轮转 基于优先级的抢占式调度算法 一旦一个高优先级的任务进入 ready 状态 将抢占当前运行任务的 CPU 资源 进入运 行状态 如果某个任务在执行过程中不愿意被打断可以屏蔽抢占 tasklock 来关闭抢占 但不能关闭中断 可以暂时关闭中断 同一优先级的时间片轮转算法 2 2 3 任务编程任务编程 1 VxWorks内核的任务管理提供了动态创建 删除和控制任务的功能 具体实现通过如 下一些系统调用 taskInit 创建的任务是挂起的 必须随后调用taskActivate 来激活这个任 务 而taskSpawn 可以同时完成这两部工作 taskInit 须额外给定任务的 TCBzhizhen 和堆栈指针 并且调用成功后返回OK而不是任务ID taskSpawn 创建 产生并激活 新任务 taskInit 初始化一个新任务 taskActivate 激活一个已初始化的任务 任务名和ID管理函数 taskName 由任务ID号得到任务名 taskNameToId 由任务名得到任务ID号 taskIdSelf 得到调用该函数的任务ID 任务信息函数 taskPriorityGet 获得任务的优先级 taskIsSuspended 检查任务是否被悬置 taskIsReady 检查任务是否准备运行 taskTcb 得到一个任务控制块的指针 任务删除 任务可以自行删除 可以使用return语句退出任务或调用exit 函数 删除 其他任务可调用taskDelete 函数 在删除任务是将自动释放其在创建时申请的系统资 源 但不会自动释放堆内存 在删除任务之前应该显式释放堆内存 taskDelete 中止指定任务并自由内存 仅任务堆栈和控制 块 taskSafe 保护被调用任务 taskUnSafe 解除被调用任务保护 任务控制函数 taskSuspend 悬置一个任务 taskResume 恢复一个任务 taskRestart 重启一个任务 taskDelay 延迟一个任务 与任务相关的其他函数 提供钩子函数允许当任务创建 任务被删除或发生上下文切换时 调用附加函数 略 2 可重入代码和任务变量 如果一个子程序可以被多个任务同时调用而不发生冲突 这个程序就是可重入的 而共 享代码必须是可重入的 大部分的 Vxworks 使用下面的重入机制 1 局部变量 2 由信号量保护的全局变量或静态变量 3 任务变量 当多个任务在调用一些程序时 对全局变量和静态变量有不同的要求 所以操作系统提供了任务变量机制 四个字节 允许任务的上下文中申明相同的变 量作为任务变量 每个任务可以把这个变量的内存地址作为自己的私有变量 taskVarlib 库中提供了对任务变量的操作 任务变量在任务切换时要保存和切换 所 以应注意任务变量的大小 3 Task 错误状态与 errono Vxworks 中利用全局变量 errono 来记录当前发生错误的代码 通常情况下 Vxworks 不会主动去清除 errono 的值 所以他的职永远是记录最后发生的 错误编码 在调用其他子程序时发生了错误 记录的就是子程序的错误代码 提供了 printErrno 函数来显示错误代码对应含义的字符串 错误代码有固定的定义格式 2 2 4 系统任务系统任务 主要用于任务的控制和调试 1 根任务 tUsrRoot 内核执行的第一个任务 入口函数是 installDir target config all usrConfig c 中的 usrRoot 该任务完成初始化功能 并负责创建其他必要的系统任务 其初始化的内容包括 I O 系统 设备驱动程序 配置网络等必要配置 同时根据系统的符号表来初始化相应工 具或者资源 并根据需要创建 Shell task 日志任务 异常处理任务 网络任务等 正常情 况下 初始化完成后 tUsrRoot 任务被终止 可以在根任务中添加特殊的初始化代码 2 日志任务 tLogTask 输出系统日志信息的任务 优先级为 0 在其他任务中 可以使用 LogMsg 象 tLogTask 发送日志消息 中断程序中可以使用 LogMsg 但不能使用 printf 3 异常处理任务 tExcTask 提供了异常处理包 完成中断级不能完成的功能 优先级为 0 人物不能被挂起 删除 或被改变优先级 4 网络任务 5 目标代理任务 2 32 3 任务间通信任务间通信 VxWorks支持各种任务间通信机制 提供了多样的任务间通信方式 主要有如下几 种 共享内存 主要是数据的共享 信号量 用于基本的互斥和任务同步 消息队列和管道 单CPU的消息传送 Socket和远程过程调用 用于网络间任务消息传送 二进制信号 用于异常处理 2 3 1 信号量信号量 实现任务互斥 同步操作的主要机制 VxWorks5 x针对不同的应用提供了3种信号量 二进制信号量主要用于同步或互斥 使用最快捷 最广泛 具有两种状态的标志 信号量满时为可用状态 空时为不可用状态 对二进制信号量 的操作有 SEM ID semBCreat int options SEM B STATE initialstae 创建一个二进制信 号量 STATUS semDelete SEM ID semId 删除一个信号量 STATUS semTake SEM ID semId 获取一个信号量 STATUS semGive SEM ID semId 释放一个信号量 STATUS semFlush SEM ID semId 唤醒阻塞在一个信号量上的所有任务 使用二进制信号量实现任务同步与互斥的关键是 创建二进制信号量时的初始状态 任务是否成对调用获取 释放操作函数以及调用顺序 互斥信号量主要用于优先级继承 安全删除和递归访问 是一种特殊的二进制信号量 有两个状态 但是在初始化时被固定为满状态 解决 优先级倒置 删除安全以及递归访问的处理 互斥信号量采用了优先级继承算法 很好的解决了优先级倒置的问题 同时互斥 信号量可以保证占有它的任务不被删除 所以保证了任务的删除安全 互斥信号量支 持占有它的任务反复进行信号量的获取与释放而不会引起该任务的阻塞 计数信号量 类似于二进制信号量 可记录信号量释放的次数 监视同一资源上 的多个实例 VxWorks5 x提供了一套统一的信号量控制函数接口 在semPxLib库中实现 2 3 2 共享内存共享内存 VxWorks5 x 中的任务运行于一个线性地址空间 个个任务可以通过共享内存实现信 息共享和信息传递 共享内存的形式可以是全局变量 数组 链表 环形缓冲以及指针 任务之间如果通过共享内存来共享和传递信息 需要额外的保护措施 如信号量 中断上 锁 任务抢占上锁等 否则会产生访问共享内存这段代码的可重入性问题 VxWorks5 x 提供了两类共享内存机制 双向链表 环形缓冲 2 3 3 消息队列消息队列 提供了一种任务间响应式信息交互方式 多个任务可以操作同一个消息队列 向其发 送或者接受消息 对于 ISR 来说不必等待直接向消息队列发送消息或者从其接收消息 如 果多个任务之间要进行全双工通信最好为每一个任务都创建一个消息队列 消息队列中的 消息排队方式可以根据 FIFO 或者优先级设定的 2 3 4 管道管道 管道机制与消息队列机制比较相似 它创建时也会分配一个消息队列 不同的是 管 道作为一种虚拟 I O 设备 可以由一套标准的 I O 接口来驱动 管理 创建管道时需要给它制定一个名字 同消息队列一样需要设置管道能容纳的消息数和消 息的最大长度 2 3 5 信号信号 信号是一种由事件触发的软中断 它可以异步地改变信号接收任务的执行流程 使其 转而执行对应得信号处理程序 任务或者 ISR 都可以向某个特定任务发出一个信号 信号 接收任务马上进入 ready 状态 当该接收任务被调度为可以再次执行时 他将转而执行对 应得信号处理程序 信号属于任务的上下文 对于信号的设置只对调用任务有效 不会影 响其他的任务 信号机制主要应用于错误处理 异常处理 2 3 6 事件事件 事件机制可以用于任务之间 任务与 ISR 之间 甚至任务与 VxWorks5 x 对象之间进 行通信 一个任务如果需要从一个资源接收事件 那么它必须在这个资源上进行注册 当 资源可用的时候 它通过向已注册任务发送事件来通知任务 在一个资源上只能注册一个 任务 一个任务可以注册多个资源 2 42 4 中断 异常和定时机制中断 异常和定时机制 2 4 1 中断和异常的基础知识中断和异常的基础知识 1 异常 根据触发异常的源可以将异常分为内部异常与异步异常 内部异常 由于内部事 件引发的异常 这个内部事件的出现与当前执行的指令密切相关 例如除零 异步异常 由于外部事件触发 与当前的操作无关 一般来说 这些外部事件 都与某个特定的硬件信号有关 如系统异常复位 2 中断 中段可以说是异步异常的一种特殊情况 CPU 接收来自外设的中断信号 便立 即停止当前执行的指令 保存现场 转而执行指定的 ISR 在 ISR 执行结束后 恢复现场 继续被打断的工作 2 4 2 VxWorks 中断服务中断服务 1 保存现场 保存被中断任务的现场以便执行完 ISR 后返回到原来任务 通常有两种方法 集中式 保存和分散式保存 集中式在内存中专门设置一块中断现场保存堆栈 所有的中断现场信 息都保存在这里 分散式 在每个任务的控制块中设置一个堆栈区 只要处理器的结构允 许 VxWorks 将采用集中式存储 2 中断管理 采用可编程中断控制器管理多个不同优先级的中断源 VxWorks 利用一张中断向量进 行描述 表的结构实际为一个结构数组 每项可记录两个内容 用户中断服务程序入口和 一个参数指针 系统中的每个中断源于先分配一个中断号 每个中断号对应一个中断向量 这个向量实际是中断在中断向量表中的序号或偏移 3 中断服务程序 ISR 的特殊限制 ISR 不能调用可引起阻塞得函数 ISR 不能调用那些可以使用浮点协议处理器的函数 因为在由 intconnect 创建的 驱动代码中不保存和恢复浮点寄存器 ISR 中可以调用 SemGive 来释放一个信号量 4 中断服务程序设置 VxWorks 提供一个 intconnect 函数将用户给定的中断处理函数与给定的中断相关连 存放于中断向量表的对应表相中 函数原型如下 intconnect VOIDFUNCPTR vector VOIDFUNCPTR rountin int parameter 在中断服务程序和用户任务中可以调用中断屏蔽函数以保证受保护的代码执行过程 中不受中断的干扰 但是禁止中断并不会同时禁止任务调度 如果在某个任务中禁止中断 之后 由于任务调度而产生上下文切换 那么中断就会被解禁 所以 在禁止中断之前应 先禁止任务调度 在受保护的代码中不应该进行系统调用 2 4 3 时钟和定时器时钟和定时器 在嵌入式系统中 系统任务或用户任务往往需要在特定的时延之后去执行一个特定的 动作 定时器是 RTOS 中非常重要的组成部分 1 系统时钟 VxWorks 系统时钟的周期称为 tick 大部分与计时相关的函数都是以 tick 为单位的 Tick 的值可以配置并动态改变 系统时钟一般在 BSP 中利用 SYS CLOCK RATE 完成其 初始配置 SYS CLOCK RATE 定义的是 tick 的频率 即每秒 tick 的个数 系统默认的值 为 60 即 tick 的时长为 1 60 秒 只要在工程中定义了 INCLUDE SYSCLK INT 系统就会自动完成系统时钟的初始 化 也就是在 usrconfig c 中的 usrRoot 函数种 首先调用 SysClkConnect 来完成系统时钟 ISR 的连接 然后再通过调用 SysClkRateSet 来设置系统时钟每秒中断的次数 最后调用 SysClkEnable 是能对系统时钟的中断响应 2 系统时钟使用和配置的工程中应注意 1 Tick 频率不宜过高 否则会因为频率处理 tick 引起的中断系统操作占用过多的 CPU 时间 2 一般来说 无需特殊要求没必要替换 ISR 3 看门狗定时器 在系统时钟的基础上 VxWorks 提供了一种看门狗定时器机制 允许用户编写的函数 与一个特定的时间延迟相联系 任何一个任务都可以创建看门狗定时器并指定超时后执行 的例程 这个例程在时钟中断处理上下文中执行 因此也有优先级 第第 3 章章 Tornado 开发环境开发环境 3 13 1 TornadoTornado 概述概述 Tornado集成环境提供了高效明晰的图形化的实时应用开发平台 它包括一套完整的 面向嵌入式系统的开发和调测工具 Tornado环境采用主机 目标机交叉开发模型 应用 程序在主机的Windows环境下编译链接生成可执行文件 下载到目标机 通过主机上的目 标服务器与目标机上的目标代理程序的通信完成对应用程序的调测 分析 它主要由以下 几部分组成 VxWorks 高性能的实时操作系统 应用编译工具 交互开发工具 WindSh CrossWind Browser WindConfig Target Server Editor Application VxWorks Target Agent TARGET SYSTEM TORNADO DEVELOPMENT ENVIRONMENT PC Tornado 下面对Tornado集成环境的各组件功能分别介绍 Tornado开发环境 Tornado是集成了编辑器 编译器 调试器于一体的高度集成的窗口环境 同样也可以从 Shell窗口下发命令和浏览 WindConfig T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专案组工作制度汇编
- 不动产中心工作制度
- 值班室保密工作制度
- 乡镇未保站工作制度
- 办公区保安工作制度
- 劳务输出科工作制度
- 北京开斋节工作制度
- 区领导接访工作制度
- 医务科保密工作制度
- 医疗安全办工作制度
- 合肥蜀山区五校联考2026年初三3月第一次模拟考试英语试题试卷含解析
- 湖北省武汉市2026届高三下学期三月调研考试 数学试卷 含答案
- 公共卫生(MPH)硕士26届考研复试高频面试题包含详细解答
- 2026青岛事业编考试试题
- 公司计量监督考核制度
- 越野车用轮胎越野性能评价规范
- 国网公司竞聘笔试题库
- 光的直线传播课件:苏科版(2024)八年级上册
- 内蒙美食课件
- 兴奋躁动状态的治疗及护理
- 穿越机无人机课件
评论
0/150
提交评论