




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
symbian与uiq开发教程 完整版symbian是智能手机中的操作系统在目前手机操作系统的争夺中,Symbian市场占有率达到了70%,是当之无愧的老大,而微软的windowsmobile和其他操作系统一共只有30%的份额。而当前最有潜力的市场就是智能手机市场无论是开发还是其它方面所以与其学会vc让别人挑三捡四一个月7800的工资打发跟民工差不多还不如学习symbian一个月拿个78k最不济也可以自己开发symbian上的共享软件谋生目前,全球主流手机操作系统争夺主要有三种:1.Symbian操作系统:按持股比例多少,由诺基亚、爱立信、索尼爱立信、松下、三星、西门子共6家厂商顺序组成的Symbian联盟把持。优点是价格适中,对手机要求较低,缺点是开发人员少。2.windows mobile操作系统:优点在于可以方便地和PC上的windows进行互通,开发人员多,但缺点是授权费最高,对手机要求也高。3.Linux:全球开放的系统,任何厂家和开发商均可使用,优点是价格最低,对手机要求最低,缺点也很明显,厂家各自为营,手机之间的互通性差symbian公司的历史与构成symbian是由手机界诺基亚、爱立信、moto、松下、三星、西门子五大巨头与pison联合起来为了反对微软的进攻而成立的一个公司开发自己的智能手机操作系统后面由于其它变化moto减少持股同时pison离开索爱加入但是仍是这几家大公司持股当symbian成立后ms也推出了smartphone操作系统准备进攻移动手机市场但现在以失败告终而symbian随着手机的发展得到了越来越多的市场UIQ:UIQ是在symbian之上工作的一层包装它对界面进行了包装同时增加了一些常用的应用程序现在索爱的p800,p910就是使用uiq下面是uiq与symbian的关系但是具体来说界面包装并没有改变太多只是为了方便重定义了自己的图形类代替symbian中相同功能的类相当于普通操作系统上的theme(主题)一样你可以选择使用这个theme并在它之上开发theme只是进行了简单包装并改变了显示方式安装这里介绍的是UIQ也就是索爱P800系列的开发所以可以先从网上下载UIQ的安装文件及安装不合适当然如果有钱那可以买codewarrior这是支持最好的具体的安装下载后直接点安装就可以了安装在c:盘c:symbian安装到其它盘可能会有问题symbian有两类分支一类是nokia的s系列如s60,s80,s90,另一类是索爱的uiq这两个只是界面库的不同它们在symbian的基础上加上自己的界面库这个库只是附加的你当然可以使用symbian的api来画界面但是使用uiq或是s系列的接口然后运行在对应的手机上视觉效果会更好(索爱的手机视图与诺基亚的界面效果是有很大不同的)具体的不同后面会再补充随着.com与java后移动开发将会是下一轮开发中的主流技术当前pc的软件已经足够多要完成相同功能的软件你最少可以找到十个不同的厂家的实现但是在移动领域你想实现某个功能基本上找不到相关的好用的软件所以在这里开发你的市场机会会更大并且竞争对手会更少所以移动开发将会是更有前途的行业而symbian以自己70%的市场占有量更应该是这个开发的首选symbian开发介绍:symbian操作系统与普通pc的不同是:symbian上内存不够多,并且cpu速度慢,所以开发的话需要考虑到节省内存的原则另外就是分配内存失败时的处理在这点pc基本上不用考虑因为有真实内存加上虚拟内存够用的symbian操作系统可能运行好几个月但是你的程序随时可能因为异常而退出退出时释放程序使用的内存及其它相关资源就相当重要界面开发最简单的方法是使用c+把相关的图形操作使用类来封装,所以symbian的sdk以c+类库形式提供如果你还是使用c那还是赶紧学习c+由于symbian运行的环境有限,所以为了提高性能减少资源使用symbian对标准c+进行了一定的修改,其中最明显的是去掉了异常处理机制另一个就是对模板进行了简化当然模板方面在语言开发中不会有不同只是修改了它的实现这个可以不用管只是像c+中的模板一样使用好了symbian在语言级不支持异常,但是以库与宏的形式来提供对导常的支持throw对应于User:Leave或是leave相关函数trycatch(.)对于于TRAP和TRAPD宏TRAPD宏与TRAP只是增加了变量定义过程这两个没有区别另外由于资源有限,所以有些程序可能因为不正常的使用资源而死掉或是因为资源使用完而无法正常执行这时虽然可以自己增加错误处理过程但是这样的过程太多了如内存分配每次分配完都要检查是不是成功没有成功就释放资源程序退出这样代码量就很大而在实时系统中需要的是代码少而精所以symbian提供了cleanupstack(清除堆栈)机制当你申请了资源后把它Push到cleanupstack中那后面如果某个申请失败了可以直接调用User:Leave退出程序操作系统会自动帮你释放你申请的资源这样代码量就减少如果已经成功的使用完资源了需要自己释放那就调用PopAndDestroy手动释放它为了保证程序退出时用户申请的资源全部释放(主要是内存)所以sy mbian同时提供了heap marking机制,程序开始时标记当前堆信息退出时检查并释放没有释放的堆总之就是symbian开发中需要自己处理下面的事情:trap harness,cleanup stack,leave,heap marking其实跟c+比起来symbian对释放资源的操作通过cleanupstack进行了支持只是需要自己手动的把资源放到cleanupstack中这样可以认为是c+的手动管理资源与java的自动资源管理的一个折中第一个控制台下的hello world程序很多语言都是从hello world开始学习symbian也不例外下面从一个简单的hello world程序开始介绍symbian的特点CODE/hellotext.cpp#include#include LOCAL_D CConsoleBase*gConsole;/Real main function void MainL()TBuf helloWorld(_L(hello);helloWorld.Append(_L(World);gConsole-Printf(helloWorld);/可以把上面三句改成gConsole-Printf(_Lhello world);/Console harness void ConsoleMainL()gConsole=Console:NewL(_L(Hello Text),TSize(KConsFullScreen,KConsFullScreen);CleanupStack:PushL(gConsole);MainL();User:After(5000000);CleanupStack:PopAndDestroy(gConsole);GLDEF_C TInt E32Main()_UHEAP_MARK;CTrapCleanup*cleanupStack=CTrapCleanup:New();TRAPD(error,ConsoleMainL();_ASSERT_ALWAYS(!error,User:Panic(_L(SCMP),error);delete cleanupStack;_UHEAP_MARKEND;return 0;编译与运行symbian的编译要求比较奇怪它需要一个bld.inf文件与一个mmp文件bld.inf声明build的相关信息通常只包括这次build会引用到的mmp文件.mmp文件保存工程与makefile相关的信息用于具体的build过程它也叫makmakefile project,也就是创建makefile的文件bld.inf的文件名是固定的.mmp文件的文件名则根据不同的工程而起不同的名字下面是hellotext工程中这两个文件的内容CODE/BLD.INF PRJ_MMPFILES hellotext.mmp CODE/hellotext.mmp TARGET HelloText.exe TARGETTYPE exe SOURCEPATH.UID 0SOURCE hellotext.cpp USERINCLUDE.SYSTEMINCLUDEepoc32include LIBRARY euser.lib把上面两个文件保存到与hellotext.cpp相同的目录下编译过程:1打开一个dos窗口2 cd到hellotext.cpp所在目录3运行下面命令bldmake bldfiles abld build wins udeb运行完后你就可以到epoc/release/wins/udeb目录下查找hellotext.exe文件/BLD.INF PRJ_MMPFILES hellotext.mmp bld.inf只是声明这个build需要调用hellotext.mmp模块CODE/hellotext.mmp TARGET HelloText.exe生成的应用程序名是hellotext.exe TARGETTYPE exe生成的应用程序类型是exe类型,在symbian上可运行的程序类型有exe与app,另外还支持生成其它类型文件,如dll SOURCEPATH.在哪里查找源文件这里指示是在当前目录下UID 0对exe程序不需要指定,这里写0 SOURCE hellotext.cpp生成应用程序需要的源文件,这里是hellotext.cpp可以有多个source一直照这样的格式写就可以USERINCLUDE.用户自定义的头文件在哪里查找这里是当前目录SYSTEMINCLUDEepoc32include系统头文件在哪里查找一般都是这个值LIBRARY euser.lib需要链接的库这是euser.lib symbian的开发环境是使用perl开发的所以需要有一个确定的文件名声明工程内容这就是bld.inf bldmake编译时先读bld.inf看需要哪个文件指导编译过程然后对mmp文件进行转换,生成makefile及其它相关的编译规则文件同时在当前目录下生成abld.bat文件后面就是使用abld进行具体编译bld.inf意义就是build info.编译信息mmp文件就是makmake file bldmake就是build make info bldmake bldfiles创建build files abld build wins udeb创建win simulator unicode debug版本另外可能用的其它两个命令是bldmake clean清除生成的build file,这在改变mmp文件后应该做abld reallyclean清除生成的目标文件(.o)这在改变源文件内容后使用symbian模拟器样子在命令行下输入epoc得到如果没钱买智能手机如p910那可以拿这个来体会一下效果刚才编译好的程序的运行运行epoc/release/wins/udeb/hellotext.exe看到没有抓图工具无法上传代码说明因为手机上没有dos或是xterm窗口,所以需要声明一个console类,打开一个控制台窗口LOCAL_D CConsoleBase*gConsole;/Real main function void MainL()控制台打印gConsole-Printf(_Lhello world);/Console harness void ConsoleMainL()NewL类似标准c中的new由于symbian中没有异常,使用leave trapd代替标准c+中throw catch,所以如果函数可能会leave的话函数名后会加上一个L gConsole=Console:NewL(_L(Hello Text),TSize(KConsFullScreen,KConsFullScreen);symbian中为了避免资源泻漏使用cleanupstack把需要释放的内容放到cleanupstack中,当程序非法退出时symbian操作系统会自动通过cleanupstack来对资源进行释放保证资源的释放放是重要的因为symbian可用的资源并不多内存现在最多也就16M而它可能一直运行好几个月(想看如果你不常关机的话)CleanupStack:PushL(gConsole);调用自己的函数MainL();停止5秒让你看到屏幕显示User:After(5000000);手动释放刚才申请的资源CleanupStack:PopAndDestroy(gConsole);symbian中exe程序的入口定义如下GLDEF_C TInt E32Main而不是标准C中的的main可以认为symbian自己定义了main函数,然后在里面进行自己的初始化初始化完后再调用E32main(在psos下开发时也是这样psos的入口函数是root在其它实时系统开发与普通系统不同因为可能需要特殊的初始化)GLDEF_C TInt E32Main()_UHEAP_MARK;定义堆保护保证程序退出时会释放资源创建清除堆栈类CTrapCleanup*cleanupStack=CTrapCleanup:New();TRAPD(error,ConsoleMainL();这个相当于标准c+中的catch(.)_ASSERT_ALWAYS(!error,User:Panic(_L(SCMP),error);delete cleanupStack;_UHEAP_MARKEND;堆保护完成在这里释放掉所有内存return 0;结合上面的代码看symbian提供的机制Leave,trap,cleanupstack,heapmarking都存在了这是一个典型的symbian程序都会使用到的功能函数是不是会Leave这个在symbian中是以函数名的形式提供函数名后面是L的表示它会Leave函数名后面是LC的表示它会Leave,并且已经把指针push到cleanupstack中了leave的情况:是不是任何情况都会Leave呢当然不是只有资源申请失败或是操作失败时时会Leave在系统库提供的函数是这样的一般它也会提供不Leave的相同功能的函数如Defined in TDesC8:看TDesc8的类说明Alloc(),AllocL(),AllocLC(),Compare(),CompareC(),CompareF(),Find(),Find(),FindC(),FindC(),FindF(),FindF(),Left(),Length(),Locate(),LocateF(),LocateReverse(),LocateReverseF(),Match(),MatchC(),MatchF(),Mid(),Mid(),Ptr(),Right(),Size(),operator!=(),operator(),operator=(),operator=(),operator(),operator=(),operator()这里提供了Alloc()和AllocL()看它们的说明Alloc()HBufC8*Alloc()const;Description Creates anew 8bit heap descriptor and initialises it with acopy of this descriptors data.Return value HBufC8*A pointer to the new 8bit heap descriptor,if creation is successful.NULL,if creation of the descriptor fails.-AllocL()HBufC8*AllocL()const;Description Creates anew 8bit heap descriptor and initialises it with acopy of this descriptors data.The function leaves,if creation of the descriptor fails.Return value HBufC8*A pointer to the 8bit heap descriptor,if creation is successful.See also:Creating aheap descriptor AllocLC()HBufC8*AllocLC()const;Description Creates anew 8bit heap descriptor and initialises it with acopy of this descriptors data The function leaves,if creation of the descriptor fails.Return value HBufC8*A pointer to the 8bit heap descriptor,if creation is successful.The pointer is also put onto the cleanup stack.对其它函数也一样可以根据自己的需要来调用带L或是不带L的函数必然会有不带L的函数可能有带L的相同功能函数其实上面还有一个特殊的符号那就是_L在symbian中是使用描述符的概念,与普通c/c+程序中字符串的概念不一样后面会介绍它下面介绍symbian的系统结构/=/第二部分:系统结构/=CODE在symbian os上运行的四种软件应用程序服务引擎内核symbian系统使用活动对象与客户-服务器对事件处理系统进行了优化硬件资源:一个cpu,32位arm一个rom(只读存储器),里面有操作系统与内建的中间件和应用程序ROM盘被映射到z:盘,所有的文件都可以通过Z:盘访问。系统RAM.系统RAM用于两个方面,一是被当前活动的程序和系统核心使用,另一个是当成C盘的磁盘空间。这两个部分的大小是变化的,不可以保留某个的大小。由于RAM通常只有8MB到16MB,所以内存可能用完,因此经常出现内存越界错误或是(写文件时)磁盘已满错误IO设备,包括带数字笔输入的触摸屏,键盘,记忆卡(被当成D盘),rs232串口,红外口,蓝牙。电源,包括电池与外接电源symbian os与pc系统的区别如下:资源限制:cpu太慢与太少内存没有硬盘,不能使用写到硬盘的虚拟内存,不能保证有足够的空间保存程序或是数据文件电源条件严格.symbian软件环境如下:server|server|Application|Application|Application Dll|-boundary|Enghine|Engine-Privilege boundary Kernel kernel工作在高级别,管理机器所有硬件资源。对其它软件模块提供访问这些硬件资源的接口其它应用程序工作在用户模式上面如果理解普通操作系统如linux的话,那跟普通操作系统没有区别应用程序是一个有用户界面的程序,在独立的进程中运行这与普通操作系统也没有区别服务是没有用户界面的程序.服务管理一个或多个资源,并提供api,让客户可以访问它的服务.服务的客户可以是一个程序或是其它服务.每个服务也运行在独立的进程空间中。在symbian中,使用服务的形式提供类似其它操作系统上用驱动程序或是内核程序提供的功能。如文件系统的访问也是客户/服务类型的。(微内核:P)引擎是一个应用程序中操作数据而不是与用户交互的部分.通常你可以把一个程序分成引擎部分和一个GUI部分,多部symbian内带的程序都是这样做的。一个应用程序引擎可以是一个独立的代码模块或是一个独立的dll,或是几个dll.引擎和应用程序间的边界是模块或dll的边界。所以在symbian中有四个组件类型与三个边界类型。dll或是模块组件对交叉引用来说很方便。它们使系统模块化与保持封装。权限边界对交叉引用比较费资源,但是保证系统对用户太程序隐藏内核与设备进程边界是所有的交叉中最昂贵的,它们保证在ram中分开每个程序CODE可执行文件的格式在symbian中有两种类型的可执行文件:exe,每个程序都有一个主入口E32main()(看上面的例子),它在独立的进程中运行dll,提供多个入口,由系统或是已存在的线程(进程)调用有两种类型的dll,共享库dll,为一个或多个程序提供固定的api,这些dll多数后缀是.dll,当程序启动时就被读到内存中。多态dll,这些dll实现抽象的api,如一个打印机驱动,socket协议或是一个应用程序。它们的扩展名多不是.dll,而是.prn或.prt或.app等。它们从与dll相关的类继承,并通常只有在程序需要它们时才读入。从技术上看起来与普通系统上动态库的静态载入与动态载入没有区别但是从功能上看就不一样了,一种是实现某种特殊功能的,从某个相关类继承的dll,另一个是普通dll代码执行如果程序代码在rom上,则直接执行,不然需要读到ram中(与普通操作系统不同,普通操作系统都需要读到ram中不能直接在硬盘上执行)可执行代码包括三种类型的二进制数据:程序代码只读静态数据可写静态数据在symbian中对待.exe与.dll是不同的由于.exe是不可共享的,如果它在ram中执行,那与普通pc系统没有区别,如果在ram中执行,那它在ram中为可写静态数据分配内存而.dll是共享的,当dll首次读入内存中时,它被分配到一个特殊的地址,第二个线程需要这个dll时它只要访问已经存在的这份copy就可以。在所有使用它的进程中dll的地址都是相同的。symbian系统维护一个引用计数,当没有其它线程引用时才将它unload.在rom上的dll像rom上的exe一样直接在rom上执行为了对dll的大小进行优化,symbbian进行如下操作;多数系统支持通过名字与通过数字访问dll提供的入口,由于名字太长,浪费空间,所以symbian只提供通过数字访问,当然在link时可以通过名字link.也就是说在.dll中没有名字访问办法,在.lib(引导库,引导linker正确的link这个dll,这个是在windows中使用的概念,在win下每创建一个dll都会创建一个用户引导链接的同名.lib)中有,你的程序link时link的是.lib,link完成后编译器会自动把引用dll的代码变成数字引用如果dll被读到ram,那重定位信息(把dll load到什么地址)也必须包含在可执行文件格式中,这个的影响就是你不能把一个在rom中执行的程序放到ram中执行的程序.(rom中执行的多是oem厂家,所以普通开发者多不用关心)多数应用程序有自己有exe来创建进程,其它的程序使用动态库(DL)L的形式,在主服务线程中调用自己的线程多数gui程序都是多态(polymorphic)dll,有一个主入口点NewApplication(),这个入口点创建并返回一个继承自CEikAppication的对象.这样的程序被apprun.exe调用,app文件名为参数传入。电源管理电源必须高效使用在系统已经关机时,确定程序仍然可以运行。如闹钤,关机后,到时时仍然可以开机电源突然关掉时,关键数据应该可以保存设备驱动虽然一般不会了解它,但是理解一下还是很有用的设备驱动工作在两个级别第一个是中断服务程序(ISR),ISR必须很短,并且不能做很多事情,因为它可能在任何时间出现,甚至在内核服务中。通常它只是通知设备产生了中断并设置一个标志,要求内核为第二阶段的处理运行一个延迟的函数调用(delayed function call DFC)在方便的时候内核调度DFC.DFC可以使用多数的核心api,通常只是工作了后向用户线程通知io操作已经完成定时器内核支持真机上64hz的时钟与模拟器上10hz的时钟时钟中断是最高优先级中断,它可以通过User:After或是RTime:After访问。时钟中断在关机时停止,所以如果你请求5s后的定时操作,然后跑2s,关机,再开机时它也要等3s内核同时支持日期/时间时钟,你可以使用User:At或是RTime:At。这个定时器很准确。在关机时,如果时间到了,那它会开机,这对闹钟很合适。内存symbian使用内存管理单元(memory management unit MMU)管理内存ROM被映射到z:盘,被映射到一个固定的地址。物理RAM被MMU分在4k的页,每个物理页可以用于:用户进程的虚地址空间。内核服务的虚地址空间ram盘,盘符是c:,ram盘只可通过文件服务进程访问如果dll不在rom中,那它被读到ram,dll被读到ram里面后页面标记为只读只读的。MMU的页面转换表.如果想理解的话学习一下操作系统原理自由页表第一部分总结上面介绍了基本的入门程序与symbian的结构从基本的入门程序中可以看到一个程序的基本结构那就是从E32main开始使用cleanupstack保护要执行的代码相对于c+而言语言级不支持throw和catch,所以定义了函数User:Leave与宏trap保护并且使用cleanupstack保证程序退出时资源的正确释放第二部分介绍了symbian的结构与设备特点后面会继续介绍另外nokia的ng也是使用symbian操作系统使用的是s60系统后面会介绍到它的不同如果高兴的话可以买个s60回来自己给它写游戏symbian相关学习的代码安装uiq sdk(最新版是2.1可以从免费下载)后下载它们解压到一个目录然后在有bld.inf的目录下开始执行bldmake bldfiles abld build wins udeb(这些命令的语法已经在上面说明过一次)wins表示是创建windows模拟器对应的还有armi结构这是表示生成真机上可执行文件udeb表示是unicode的debug版对应的有urel表示unicode的release版另外上面是symbian mobile:c+program的例子在前一页提供一个链接可以下载第一章可以拿来看看/=/可执行文件格式/=可执行文件的格式在symbian中有两种类型的可执行文件:exe,每个程序都有一个主入口E32main()(看上面的例子),它在独立的进程中运行dll,提供多个入口,由系统或是已存在的线程(进程)调用有两种类型的dll,共享库dll,为一个或多个程序提供固定的api,这些dll多数后缀是.dll,当程序启动时就被读到内存中。多态dll,这些dll实现抽象的api,如一个打印机驱动,socket协议或是一个应用程序。它们的扩展名多不是.dll,而是.prn或.prt或.app等。它们从与dll相关的类继承,并通常只有在程序需要它们时才读入。从技术上看起来与普通系统上动态库的静态载入与动态载入没有区别但是从功能上看就不一样了,一种是实现某种特殊功能的,从某个相关类继承的dll,另一个是普通dll代码执行如果程序代码在rom上,则直接执行,不然需要读到ram中(与普通操作系统不同,普通操作系统都需要读到ram中不能直接在硬盘上执行)可执行代码包括三种类型的二进制数据:程序代码只读静态数据可写静态数据在symbian中对待.exe与.dll是不同的由于.exe是不可共享的,如果它在ram中执行,那与普通pc系统没有区别,如果在ram中执行,那它在ram中为可写静态数据分配内存而.dll是共享的,当dll首次读入内存中时,它被分配到一个特殊的地址,第二个线程需要这个dll时它只要访问已经存在的这份copy就可以。在所有使用它的进程中dll的地址都是相同的。symbian系统维护一个引用计数,当没有其它线程引用时才将它unload.在rom上的dll像rom上的exe一样直接在rom上执行为了对dll的大小进行优化,symbbian进行如下操作;多数系统支持通过名字与通过数字访问dll提供的入口,由于名字太长,浪费空间,所以symbian只提供通过数字访问,当然在link时可以通过名字link.也就是说在.dll中没有名字访问办法,在.lib(引导库,引导linker正确的link这个dll,这个是在windows中使用的概念,在win下每创建一个dll都会创建一个用户引导链接的同名.lib)中有,你的程序link时link的是.lib,link完成后编译器会自动把引用dll的代码变成数字引用如果dll被读到ram,那重定位信息(把dll load到什么地址)也必须包含在可执行文件格式中,这个的影响就是你不能把一个在rom中执行的程序放到r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电器具生产过程中的能源管理考核试卷
- 稀土金属冶炼与冶炼设备出口策略考核试卷
- 设备噪声控制与振动分析考核试卷
- 如何设计整个系统架构
- 环保职业卫生课件
- 企业资产管理软件操作教程课件
- 医院病案管理模板
- 2019-2025年标准员之专业管理实务提升训练试卷B卷附答案
- 2025年特种装备电缆合作协议书
- 2025年年快手短视频合作协议书
- 个人阅兵申请书
- 颈椎病课件完整版
- 2025年国家药监局医疗器械技术审评检查大湾区分中心事业编制人员招聘5人历年高频重点提升(共500题)附带答案详解
- 巡逻盘查培训课件
- GB/T 39733-2024再生钢铁原料
- 《工业机器人现场编程》课件-任务3.涂胶机器人工作站
- 程序设计高级应用(Java程序设计)知到智慧树章节测试课后答案2024年秋山东劳动职业技术学院
- 2025年教师资格考试高级中学学科知识与教学能力物理试题与参考答案
- 安徽工业大学《工程经济与项目管理》2022-2023学年第一学期期末试卷
- 西华师范大学《景观生态学》2022-2023学年第一学期期末试卷
- 肠瘘 课件教学课件
评论
0/150
提交评论