




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统第一部分嵌入式系统基础
1.3嵌入式系统软件基础嵌入式软件分类嵌入式软件体系结构嵌入式软件开发嵌入式软件开发实例嵌入式软件分类嵌入式软件单线程程序循环轮询系统有限状态机事件驱动程序中断驱动系统多任务系统单机多任务系统分布式系统操作系统:Linux、μC/OS-II/III、VxWorks、Android、IOS、WinCE硬件平台:ARM、单片机、FPGA、DSP、POWERPC、XScale编程语言:C、C++、Object-C、Java、汇编分支多技术差异大嵌入式软件体系结构常见的嵌入式软件可分为无操作系统和有操作系统的体系结构。无操作系统的嵌入式软件体系结构
对于一些功能有限的系统,可以使用一些简单的结构来实现。越简单的系统往往响应速度越快。轮询结构带有中断的轮询结构函数队列调度结构有限状态机巡回服务结构前后台结构基于硬件抽象层的分层体系结构嵌入式软件体系结构无操作系统的体系结构--轮询结构
轮询结构是最简单的结构,程序一次检查每个I/O设备,并且为需要服务的设备提供服务。特点:没有中断,没有共享数据,无须考虑延迟时间。例如在数字万用表中用于连续的测量并可改变显示的内容。缺点:如果一个设备需要比微处理器在最坏情况下完成一个循环的时间更短的响应时间,那么这个系统将无法工作。当有冗余的处理时,系统也会工作不好。这种结构很脆弱,一旦增加一个额外的设备或者发生故障,就有可能让系统崩溃。嵌入式软件体系结构无操作系统的体系结构--轮询结构
有n个设备,CPU按照一定周期定时查询设备状态,根据设备状态进行处理。目前,在一些嵌入式周期性采集系统中,常常会使用这种程序结构,而操作系统中的时间片轮询也是采用这一机制。
需要定时器以保证周期控制。
轮询案例.docx嵌入式软件体系结构无操作系统的体系结构--带有中断的轮询结构
在这种结构中,中断程序处理硬件特别紧急的需求,然后设置标志,主循环轮询这些标志,然后根据需求进行后续处理。优点:相对于单纯的轮询结构,可对优先级进行更多的控制。中断程序可以获得更多的响应,因为硬件的中断信号会使微处理器停止正在执行的任何操作,而去执行中断程序。实质上,中断程序中的所有操作拥有比主程序中的任务代码更高的优先级。缺点:所有的任务代码以同样的优先级来执行。嵌入式软件体系结构无操作系统的体系结构--函数队列调度结构
在这种结构中,中断程序在一个函数指针队列中添加一个函数指针,以供程序调用,主程序仅需要从该队列中读取相应的指针并且调用相关的函数。优点:该结构没有规定主程序必须按中断程序发生的顺序来调用函数,主函数可以根据任何达到目的的优先级方案来调用函数,这样人和需要更快响应的任务代码都可以被更早地执行。缺点:若某个较低优先级的运行时间较长,就有可能影响较高优先级函数的响应时间。无操作系统的体系结构--有限状态机
(FSM,FiniteStateMachine)
控制门状态的有限状态机示意图:优点:对小系统便于编程和理解。以快速执行。只是通过改变输出功能来改变机器的响应。缺点:应用领域有限。不能保证确定性。对大的应用系统,难以调试。嵌入式软件体系结构无操作系统的体系结构--巡回服务结构
如果嵌入微处理器/微控制器的中断源不多,增加中断源需要硬件,成本高。那么一般采用软件巡回服务系统。这种结构一般是轮训结构和函数队列调度的结合。巡回服务系统的程序结构如下:main(){ /*TODO系统初始化*/ while(1) { action_1(); /*巡回检测事件1,并处理事件*/ action_2(); /*巡回检测事件2,并处理事件*/ …
action_n(); /*巡回检测事件2,并处理事件*/ }}嵌入式软件体系结构无操作系统的体系结构--巡回服务结构普通巡回服务系统的缺点:处理器全速运行,开销大-功耗高-电池供电系统。降低处理器的工作事件—基于定时器的巡回服务系统。嵌入式软件体系结构
一般,在巡回服务系统中处理器总是处于全速运行状态,当处理器开销较大、带来高能耗的问题时,可采用基于定时器的巡回服务结构。它是在处理器中加入一个定时器,根据外部事件发生的频率,设置合适的定时器中断的频率。其软件由主程序和定时器中断服务程序构成。无操作系统的体系结构--巡回服务结构基于定时器的巡回服务系统的程序结构如下://主程序//定时器中断服务例程main(){Isr_timer(){/*定时器中断服务程序/*TODO系统初始化*/ action_1();/*执行事件1的处理*//*TODO设置定时器*/action_2();/*执行事件2的处理*/while(1){…/*其他代码*/action_n();/*执行事件n的处理*/
enter_low_power();}}}嵌入式软件体系结构嵌入式软件体系结构无操作系统的体系结构--前后台结构
也称中断(事件)驱动结构,包括主程序和中断服务程序两部分。
主程序完成系统的初始化工作,例如硬件的初始化。主程序包括一个无限循环,巡回地执行多个事件,完成相应的操作,这部分软件成为后台。
中断服务程序处理异步事件,这一部分可以看做前台。每当外部事件发生时,相应的中断服务程序激活,执行相关处理。
后台称为任务级,前台称为中断级。这种结构一般是轮询结构和带有中断轮询结构的结合或带有中断轮询结构与函数队列调度结构的结合。嵌入式软件体系结构无操作系统的体系结构--前后台结构前后台结构的特点实时性问题:中断服务程序提供的数据(实时性数据)只有在后台轮询到的时候才能得到运行。应用于低功耗/事件驱动的小系统,如微波炉/电话机/玩具等。嵌入式软件体系结构无操作系统的体系结构—基于硬件抽象层的分层体系结构当系统任务较多时,常常采用分层体系结构。当系统的硬件设备较多时,为了提高嵌入式软件的可移植性和扩展性,常常采用基于硬件抽象层的分层体系结构。(1)无硬件抽象层的分层体系结构(2)基于硬件抽象层的分层体系结构嵌入式软件体系结构无操作系统的体系结构—基于硬件抽象层的分层体系结构硬件抽象层的特点:硬件抽象曾具有与硬件密切相关性;硬件抽象层具有与操作系统无关性;接口定义的功能应包含硬件或系统所需硬件支持的所有功能;接口定义简单明了,太多接口函数会增加软件模拟的复杂性;具有可测性的接口设计有利于系统的软硬件测试和集成。嵌入式软件体系结构无操作系统的体系结构—基于硬件抽象层的分层体系结构硬件抽象层设计方法和原则:软件硬件并行、协同设计;分析接口的数据传输特性(双向/单向数据传输,字节型/数据帧型传输模式);分析接口配置属性;定义接口所需的相关函数。嵌入式软件体系结构有操作系统的体系结构—基于分时操作系统的软件结构
分时操作系统使用定时器和任务调度管理器来管理任务的执行,如Linux操作系统。
其缺点是无法体现任务的重要性,即优先级。这种系统无法保证事务处理的优先级,适合不需要实时处理的应用,如PDA等应用。任务1任务2任务3任务4任务调度器定时器操作系统嵌入式软件体系结构有操作系统的体系结构—基于实时操作系统的软件结构
实时操作系统把系统处理的事件根据轻重缓急进行分类,并赋予不同的优先级。
非抢占式操作系统总是从最高优先级的任务开始执行,直到放弃处理器。
非抢占式调度的特点如下:系统总是运行最高优先级的任务;低优先级的任务运行时,高优先级的任务不能中断低优先级的任务;系统简单,操作系统的开销小。嵌入式软件体系结构有操作系统的体系结构—分布式嵌入式软件系统结构Peer-to-Peer结构B/S结构嵌入式软件体系结构有操作系统的体系结构基于嵌入式操作系统的分层体系结构基于操作系统抽象层的软件分层体系结构嵌入式软件体系结构软件体系结构仓库体系结构模型/视图/控制器(MVC)客户/服务器(C/S)对等体系结构管理和过滤器体系结构每个子系统只依赖于数据仓库中心数据结构,而数据仓库并不知其他子系统。控制器通过收集来自用户的输入并发消息给模型,模型保持中心数据结构,视图显示模型,每当模型发生变化时得到通知(通过签署/通知协议)。对等体可以向其他对等体请求服务,也可以向它们提供服务。一个过滤器可以有多个输入和输出,一个管道将某个过滤器的输出和另一个过滤器的输入连接起来。嵌入式软件开发嵌入式软件开发模式特点:软硬件协同开发原因:嵌入式系统传统的先硬件后软件的系统设计模式需反复修改、反复试验,整个设计过程很大程度上依赖于设计者的经验,设计周期长、开发成本高,在反复修改过程中,常常会在某方面背离原始设计要求。若软硬件分开设计,在系统优化时,由于设计空间的限制,只能改善硬件与软件各自的性能,不可能对系统做出较好的综合优化,得到的最终设计结果很难充分利用软硬件资源,难以适应现代复杂的、大规模的系统设计任务。嵌入式软件开发嵌入式系统开发过程系统定义系统总体设计硬件设计开发软件设计开发软硬件集成功能性能测试符合要求产品嵌入式软件开发嵌入式系统开发过程系统总体设计系统总体框架软硬件划分处理器选定操作系统选定开发环境选定嵌入式软件开发软件概要设计软件详细设计软件实现软件测试嵌入式系统开发过程软件设计开发硬件概要设计硬件详细设计硬件制作硬件测试硬件设计开发嵌入式软件开发嵌入式系统开发过程处理器及硬件开发平台的选择依据:应用的类型及I/O接口;主频及功耗;对不同类型存储器的支持;封装;产品生命力、厂家实力、技术支持和第三方软件支持;硬件开发平台的选择。嵌入式软件开发嵌入式系统开发过程操作系统的选择依据:选择嵌入式OS的必要性;自建、购买或使用开源软件;对嵌入式OS的功能、性能要求;与硬件平台和开发工具的关系;行业标准;技术支持;版税或服务费。嵌入式软件开发嵌入式系统开发过程操作系统与硬件平台的关系:操作系统应支持选定的硬件平台;若不支持,需考虑移植工作:不同类型嵌入式微处理器之间的移植:
任务上下文切换、时钟、中断等;同类型微处理器但不同类型硬件板之间的移植:
硬件接口及设备驱动程序。嵌入式软件开发嵌入式系统开发过程操作系统与开发工具的关系:
工具是否能为基于特定操作系统的应用开发提供最大支持:运行库和OS相结合;提供应用工程创建和管理功能,构件基于特定操作系统的应用框架;对操作系统的剪裁和配置;提供高级调试功能;提供配套的应用逻辑分析工具、覆盖测试工具等。嵌入式软件开发嵌入式系统开发过程开发环境和工具的选定:对硬件平台的支持;支持所使用的编程语言:C/C++,JAVA,汇编等;与嵌入式OS的关系。嵌入式软件开发嵌入式软件开发工具
嵌入式软件开发工具的集成度和可用性将直接关系到嵌入式系统的开发效率。
根据不同的阶段,嵌入式软件开发工具可分为:
①需求分析工具;
②软件设计工具;
③编码、调试工具;
④测试工具;
⑤配置管理工具、维护工具等。嵌入式软件开发嵌入式软件开发工具周期TAUObjectGeodeRationalRoseRealTimeRhapsodyTornadopRISM+SpectraWinCEPlatformBuilderCodeWarriorXrayDebuggerLogiscopeCodeTESTLambdaTOOL需求分析软件设计软件实现软件测试软件发行嵌入式软件开发嵌入式软件开发工具嵌入式软件开发分类:简单的板级测试软件,主要是辅助硬件调试;基本的驱动程序;特定嵌入式操作系统的驱动程序(板级支持包BSP);嵌入式系统软件,如嵌入式OS等;应用软件。嵌入式软件开发嵌入式软件开发工具根据上述嵌入式软件开发分类来看,嵌入式软件开发工具又可以分为:与嵌入式OS相关的开发工具,用于开发:基于嵌入式OS的应用;部分驱动程序等。与嵌入式OS无关的开发工具,用于开发:基本的驱动程序;辅助硬件调试程序;系统软件等。嵌入式软件开发嵌入式软件的交叉开发环境交叉开发环境是指用于嵌入式软件开发的所有工具软件的集合,一般包括:文本编辑器交叉编译器交叉调试器仿真器下载器等。交叉开发环境由宿主机和目标机组成,宿主机和目标机之间在物理连接的基础上建立起逻辑连接。嵌入式软件开发嵌入式软件的交叉开发环境宿主机硬件宿主机OS运行库宿主机开发环境--编辑--编译--连接--调试目标机硬件调试代理目标机应用系统--应用软件--应用中间件--目标机OS下载交叉开发环境开发平台(Host)运行平台(Target)嵌入式软件开发嵌入式软件的交叉开发环境宿主机(Host):用于开发嵌入式系统的计算机,一般为PC机(或工作站),具备丰富的软硬件资源,为嵌入式软件的开发提供全过程的支持。目标机(Target):即所开发的嵌入式系统,是嵌入式软件的运行环境,其应用软件是为特定应用定制的。
在开发过程中,目标机端需接收和执行宿主机发出的各种命令,如设置断点、读内存、写内存等,并将结果返回给宿主机,配合宿主机各方面的工作。嵌入式软件开发嵌入式软件的交叉开发环境物理连接:宿主机与目标机通过物理线路连接在一起,连接方式主要有三种:串口、并口;以太网口;OCD(OnChipDebug)方式,如:JTAG,BDM等,主要用于调试。逻辑连接:宿主机与目标机之间按某种通信协议建立起来的通信连接,目前已经逐步形成了一些通信协议标准。两者关系:物理连接是逻辑连接的基础。嵌入式软件开发嵌入式软件的交叉开发环境嵌入式软件实现阶段的开发过程软件生成:主要是在宿主机上进行,利用各种工具完成对应用程序的编辑、交叉编辑和链接工作,生成可调式或固化的目标程序。交叉调试:通过交叉调试器完成软件的调试工作。调试完成后还需要进行必要的测试工作。固化运行:先用一定的工具将应用程序固化到目标机上,然后启动目标机,在没有任何工具干预的情况下应用程序能自动启动运行。嵌入式软件开发嵌入式软件的交叉开发环境嵌入式软件实现阶段的开发过程—软件生成三个子过程:源代码程序的编写;编译成各个目标模块;链接成可供下载调试或固化的目标程序。交叉编译:将在宿主机上编写的高级语言程序编译成可在目标机运行的代码。嵌入式软件开发嵌入式软件的交叉开发环境嵌入式软件实现阶段的开发过程—交叉调试交叉调试器:是指调试程序和被调试程序运行在不同机器上的调试器。调试器通过某种方式能控制目标机上被调试程序的运行方式,通过调试器能查看和修改目标机上的内存、寄存器以及被调试程序中的变量等。嵌入式软件开发嵌入式软件的交叉开发环境嵌入式软件实现阶段的开发过程—交叉调试交叉调试非交叉调试调试器和被调试程序运行在不同的计算机上调试器和被调试程序运行在同一台计算机上可独立运行,无需操作系统支持需要操作系统支持被调试程序的装载由调试器完成被调试程序的装载由专门的Loader程序完成需要通过外部通信的方式来控制被调试程序不需要通过外部通信的方式来控制被调试程序可以直接调试不同指令集的程序只能直接调试相同指令集的程序嵌入式软件开发嵌入式软件的交叉开发环境嵌入式软件实现阶段的开发过程—交叉调试调试方式:CrashandBurnRomMonitorRomEmulatorInCircuitEmulator(ICE)OnChipDebugging(OCD)嵌入式软件开发嵌入式软件的交叉开发环境嵌入式软件实现阶段的开发过程—交叉调试调试方式:CrashandBurnRomMonitorRomEmulatorInCircuitEmulator(ICE)OnChipDebugging(OCD)嵌入式软件开发嵌入式软件的交叉开发环境CrashandBurn—最早的嵌入式应用软件调试方式嵌入式软件开发嵌入式软件的交叉开发环境ROMMonitor:是指被固化且运行在目标机上的一段程序,负责监控目标机上被调试程序的运行,与宿主机端的调试器一起完成对应用程序的调试。调试器与ROMMonitor之间的通信遵循远程调试协议。PC机等硬件Windows或其他桌面OS调试器嵌入式硬件监控程序ROMMonitor被调试程序宿主机目标机逻辑连接物理连接嵌入式软件开发嵌入式软件的交叉开发环境ROMMonitor工作原理在目标机上电或复位后首先执行ROMMonitor,它会对目标机进行一些必要的初始化:初始化所要求的外围设备,如最基本的串口和用于内存刷新的系统计时器芯片;初始化用于下载镜像的内存系统;初始化中断控制器和安装中断处理程序;初始化自己的程序空间;等待宿主机端的命令。嵌入式软件开发嵌入式软件的交叉开发环境ROMMonitor工作原理ROMMonitor能配合调试器完成:程序镜像下载;对目标机系统内存的读写;设置和清除不同类型的断点;单步执行指令;复位系统等调试功能。嵌入式软件开发嵌入式软件的交叉开发环境ROMMonitor调试过程启动目标机,监控器Monitor掌握对目标机的控制,等待和调试器建立连接;启动调试器,并和监控器建立起通信连接;使用调试器将应用程序下载到目标机上的RAM空间中;使用调试器进行调试,发出各种调试命令,监控器解释并执行这些命令,通过目标机上的各种异常来获取对目标机的控制,将命令执行结果回传给调试器;如果程序有问题,在调试器的帮助下定位错误;修改之后再重新编译链接并下载程序,开始新的调试,如此反复直至程序正确运行为止。嵌入式软件开发嵌入式软件的交叉开发环境ROMMonitor的优点:提高调试程序的效率,缩短开发周期,降低成本;简单、方便;可扩展性强,可支持许多高级调试功能;成本低廉,不需专门的调试硬件支持;几乎所有的交叉调试器都支持这种方式。ROMMonitor的缺点:需要用CrashandBurn方法开发;当ROMMonitor占用CPU时,应用程序不响应外部的中断,因此不便调试有时间特性的程序;某些调试功能依赖于CPU硬件的支持(如硬件断点功能);ROMMonitor要占用目标机一定数量的资源,如CPU、RAM、ROM和通信设备等资源;调试环境不同于实际目标环境。嵌入式软件开发嵌入式软件的交叉开发环境仿真开发方式
嵌入式应用的开发经常会遇到缺少目标机环境、缺乏目标机芯片等资源问题,而开发过程又不可能停止,因此自然就提出了根据不同的应用需求,利用仿真器件、仿真环境进行开发的方法。仿真开发方式包括:硬件仿真开发:ROMEmulator、ICE、OCD软件仿真开发嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式--ROMEmulatorROMEmulator是一种用于替代目标机上的ROM芯片的设备,即ROM仿真器。利用这种设备,目标机可以没有ROM芯片,但目标机的CPU可以读取ROMEmulator设备上ROM芯片的内容:ROMEmulator设备上的ROM芯片的地址可以实时地映射到目标机的ROM地址空间,从而仿真(Emulation)目标机的ROM。
ROMEmulator的调试方式是一种不完全的调试方式:ROMEmulator设备只是为目标机提供ROM芯片和在Target和Host间建立一条高速的通信通道,因此它经常和前面两种调试方式结合起来形成一种完备的调试方式。
ROMEmulator的典型应用就是和ROMMonitor的调试方式相结合。嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式--ROMEmulator优点:目标机可以没有ROM芯片、可以使用ROMEmulator提供的ROM空间且不需要用别的工具来写ROM。缺点:目标机必须能支持外部ROM存储空间,而且由于其通常要和ROMMonitor配合使用,因此它拥有ROMMonitor的所有缺点。嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式—ICE(In-CircuitEmulator)ICE是一种用于替代目标机上CPU的设备,即在线仿真器。
它比一般的CPU有更多的引出线,能够将内部的信号输出到被控制的目标机。ICE上的Memory也可以被映射到用户的程序空间,这样即使目标机不存在的情形下也可以进行代码的调试。嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式—ICE(In-CircuitEmulator)
连接ICE和目标机时,一般是将目标机的CPU取下,而将ICE的CPU引出线接到目标机的CPU插槽。用ICE进行调试时,在Host端运行的调试器通过ICE来控制目标机上运行的程序。目标平台ICE宿主机开发平台ICE调试结构嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式—ICE(In-CircuitEmulator)
功能特点:同时支持软断点和硬件断点的设置;设置各种复杂的断点和触发器;实时跟踪目标程序的运行,并可实现选择性的跟踪;支持“TimeStamp”;允许用户设置“Timer”;
提供“ShadowRAM”,能在不中断被调试程序的运行下查看内存和变量即非干扰调试查询。嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式—ICE(In-CircuitEmulator)
适用于:调试实时的应用系统;调试设备驱动程序;对硬件进行功能和性能的测试;实时性能分析。缺点:价格太昂贵,不利于团队开发;所仿CPU有限。嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式—OCD(On-ChipDebugging)
OCD是CPU芯片提供的一种调试功能(片上调试),可以认为是一种廉价的ICE工:OCD的价格只有ICE的20%,但提供了ICE80%的功能。嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式—OCD(On-ChipDebugging)OCD调试结构嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式—OCD(On-ChipDebugging)调试方法:将CPU的模式分为一般模式和调试模式;一般模式下,CPU从内存读取指令执行;调试模式下,CPU首先从调试端口读取指令,通过调试端口可以控制CPU进入和退出调试模式;Host端的调试器可以直接向目标机发送要执行的指令,读写目标机的内存和各种寄存器,控制目标程序的运行以及完成各种复杂的调试功能。嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式—OCD(On-ChipDebugging)优点:不占用目标机的资源;调试环境和最终的程序运行环境基本一致;支持软硬断点、Trace功能;精确计量程序的执行时间;提供时序分析功能。缺点:调试的实时性不如ICE;不支持非干扰调试查询;CPU必需具有OCD功能。嵌入式软件开发嵌入式软件的交叉开发环境硬件仿真开发方式—OCD(On-ChipDebugging)实现方式BDM(BackgroundDebuggingMode)JTAG(JointTestAc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高速公路智能交通系统2025年智能交通系统与智慧交通应用报告
- 基于5G商用深化2025年边缘计算行业应用案例分析报告
- 烧烤场地外租赁合同协议
- 消防验收咨询费合同范本
- 闲置水泥仓收购合同范本
- 猫咪寄养健康协议书模板
- 铸造承包合同协议书范本
- 长期合作的物流合同范本
- 项目部采购护栏合同范本
- 生物质燃料采购合同协议
- 2025-2030中国1,6-己二醇行业市场发展趋势与前景展望战略研究报告
- 沉淀池斜管安装施工方案
- 老人躺卧后的安全检查
- 三菱燃气轮机培训手册
- 《基因与出生缺陷》课件
- 面向I3型卓越人才培养的嵌入式人工智能实验教学探索
- 酒类代理合同范本
- 2025年中国航空航天新材料行业市场运行态势及投资前景展望报告
- DB3308T 137-2023 全域白蚁防治技术规程
- 有创血压监测操作流程、评分标准
- GB/T 44951-2024防弹材料及产品V50试验方法
评论
0/150
提交评论