版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第5章章 C/C+语言程序设计语言程序设计2内容提要:内容提要:n C55x C/C+语言概述语言概述n C55x C/C+语言编程基础语言编程基础n C55x C/C+编译器的使用编译器的使用n TMS320C55x的的C代码优化代码优化3l C/C+语言基本特点:语言基本特点:u语言简洁、紧凑,使用方便、灵活语言简洁、紧凑,使用方便、灵活u运算符丰富,表达式类型多样化运算符丰富,表达式类型多样化u数据结构类型丰富数据结构类型丰富u具有结构化的控制语句具有结构化的控制语句u语法限制不太严格,程序设计自由度大语法限制不太严格,程序设计自由度大uC/C+语言允许访问物理地址,能进行位操作,能
2、语言允许访问物理地址,能进行位操作,能实现汇编语言的大部分功能,能直接对硬件进行操实现汇编语言的大部分功能,能直接对硬件进行操作作5.1 C55x C/C+语言概况语言概况4lC55x C/C+编译器全面支持编译器全面支持ANSI C/C+语言标准,能语言标准,能够把按照标准够把按照标准ANSI C/C+规范编写的源程序进行全面优规范编写的源程序进行全面优化,编译成化,编译成C55x 汇编语言源程序。汇编语言源程序。lC55x C/C+编译器工具拥有完整的运行库编译器工具拥有完整的运行库,所有的库函数所有的库函数均符合均符合ANSI库标准。库标准。 库函数包括标准输入输出、串操作、动态内存分配
3、、数库函数包括标准输入输出、串操作、动态内存分配、数据转换、三角函数、指数函数、双曲函数等,但是不包含据转换、三角函数、指数函数、双曲函数等,但是不包含信号处理函数,因为它们涉及到目标系统的具体特性信号处理函数,因为它们涉及到目标系统的具体特性.5.1 C55x C/C+语言概况语言概况5lC55x C/C+编译器输出文件的特性。编译器输出文件的特性。C55x C/C+编译器生成的汇编语言便于查看,使编译器生成的汇编语言便于查看,使用户能够看到产生自用户能够看到产生自C/C+源程序的代码。源程序的代码。 COFF文件允文件允许用户在链接时定义自己的系统存储许用户在链接时定义自己的系统存储器配置
4、,器配置,使用户可以把代码和数据链接进特定的内存使用户可以把代码和数据链接进特定的内存区域,以最大限度地提高程序性能。区域,以最大限度地提高程序性能。 COFF文件支持源程序级的调试。文件支持源程序级的调试。5.1 C55x C/C+语言概况语言概况6n数据类型数据类型n关键字关键字 n寄存器变量和参数寄存器变量和参数nasm指令指令nPragma指令指令 n标准标准ANSIC语言模式的改变语言模式的改变(-pk,-pr和和-ps选项选项)n存储器模式存储器模式n存储器分配存储器分配n中断处理中断处理n运行时间支持算法及转换程序运行时间支持算法及转换程序n系统初始化系统初始化5.2 C55x
5、C/C+语言编程基础语言编程基础5.2 C55x C/C+语言编程基础语言编程基础7 5.2.1 数据类型数据类型C55x C语言支持的数据类型语言支持的数据类型:类型类型长度长度(位位)内容内容最小值最小值最大值最大值字符型、带符号字符型字符型、带符号字符型16ASCII码码-32 76832 767无符号字符型无符号字符型16ASCII码码065 535短整型、带符号短整型短整型、带符号短整型16二进制补码二进制补码-32 76832 767无符号短整型无符号短整型16二进制数二进制数065 535整型、带符号整型整型、带符号整型16二进制补码二进制补码-32 76832 767无符号整型
6、无符号整型16二进制数二进制数065 535长整型、带符号长整型长整型、带符号长整型32二进制补码二进制补码-2 147 483 6482 147 483 647无符号长整型无符号长整型32二进制数二进制数04 294 967 2955.2 C55x C/C+语言编程基础语言编程基础8类型类型长度长度(位位)内容内容最小值最小值最大值最大值带符号特长整型带符号特长整型40二进制补码二进制补码-5.49756E+115.49756E+11无符号特长整型无符号特长整型40二进制数二进制数01.09951E+12枚举枚举16二进制补码二进制补码-32 76832 767浮点浮点3232位位IEEE
7、1.18E-383.40E+38双精度双精度3232位位IEEE1.18E-383.40E+38长双精度长双精度3232位位IEEE1.18E-383.40E+38数据指针(小存储器模式)数据指针(小存储器模式)16二进制数二进制数00 xFFFF数据指针(大存储器模式)数据指针(大存储器模式)23二进制数二进制数00 x7FFFFF程序指针程序指针24二进制数二进制数00 xFFFFFF5.2 C55x C/C+语言编程基础语言编程基础9l定义数据类型时应注意:定义数据类型时应注意:u对定点算法(特别是乘法)尽量使用对定点算法(特别是乘法)尽量使用int数据类型。数据类型。 用用long类型
8、作乘法操作数会调用运行时间库的程序类型作乘法操作数会调用运行时间库的程序u使用使用int或或unsigned int类型而非类型而非long类型来循环计数类型来循环计数u避免设避免设char为为8位或位或long为为64位位5.2 C55x C/C+语言编程基础语言编程基础105.2.2 关键字关键字 (1) const lC55x C编译器支持标准编译器支持标准C语言的语言的const关键字。关键字。lconst关键字可以定义常数表并将它们分配到系统关键字可以定义常数表并将它们分配到系统ROM存储存储空间空间中中。5.2 C55x C/C+语言编程基础语言编程基础const double P
9、i=3.14159 11(2) ioportlioport关键字关键字 : 用于用于I/O寻址模式寻址模式uioport类型限定词可以和标准类型(数组、结构体、共用类型限定词可以和标准类型(数组、结构体、共用体和枚举)一起使用体和枚举)一起使用Ioport 单独使用时,单独使用时,默认默认int类型类型lioport类型限定词只能用于全局或静态变量。类型限定词只能用于全局或静态变量。 局部变量不能用局部变量不能用ioport限制,除非变量是个指针限制,除非变量是个指针5.2 C55x C/C+语言编程基础语言编程基础12例例5-1,ioport关键字的使用。关键字的使用。ioport int
10、k ; /*正确正确* /void foo(void)ioport int i ; /*错误错误* /ioport int *j ; /*正确正确* /5.2 C55x C/C+语言编程基础语言编程基础Void CLK_init (void) /函数定义函数定义 ioport unsigned int *clkmd; / 设一个指向设一个指向I/O空间的指针空间的指针 clkmd=(unsigned int *) 0 x1c00; /说明指针指向的具体地址说明指针指向的具体地址 *clkmd=0 x2413; /向那个地址中赋值向那个地址中赋值13(3) interruptlinterrupt
11、关键字,指定某个函数为中断函数。关键字,指定某个函数为中断函数。5.2 C55x C/C+语言编程基础语言编程基础l通过通过interrupt关键字用关键字用C函数直接处理中断。函数直接处理中断。例例 interrupt void TIMER_isr() . c_int00是是系统复位中断,是是系统复位中断,C程序入口。程序入口。 它初始化系统并调用主函数。它初始化系统并调用主函数。c_int00不保存任何寄存器。不保存任何寄存器。 14( 4) onchiplOnchip :定义变量只能存储在定义变量只能存储在DSP片上存储器中,不能在存储片上存储器中,不能在存储在外部存储空间。在外部存储空
12、间。 定义的变量可用作双定义的变量可用作双MAC指令的操作数。指令的操作数。 例,例,onchip int x100; /* 数组声明数组声明 */onchip int *p; /* 指针声明指针声明 */5.2 C55x C/C+语言编程基础语言编程基础15(5) volatilel防止编译器对代码进行优化.l如果如果程序一定要对存储器访问程序一定要对存储器访问,则必须使用,则必须使用volatile关键字来指关键字来指明这些访问。明这些访问。5.2 C55x C/C+语言编程基础语言编程基础 XBYTE2=0 x56;XBYTE2=0 x57; XBYTE2=0 x58; 只认为XBYTE
13、2=0 x58(即忽略前两条语句,只产生一条机器代码)。 如不加volatile关键字关键字如对片上外设的访问,外设的地址是固定的,不能优化。如对片上外设的访问,外设的地址是固定的,不能优化。 volatile short *mcbsp0_drr10;165.2.3 寄存器变量和参数n寄存器变量就是用寄存器变量就是用register关键字声明的变量。关键字声明的变量。当不使用优化器进行编译时,编译器把使用当不使用优化器进行编译时,编译器把使用register关键字的变量关键字的变量分配到寄存器中。分配到寄存器中。当使用优化器进行编译时,编译器忽略寄存器声明,通过使用寄存当使用优化器进行编译时,
14、编译器忽略寄存器声明,通过使用寄存器的算法,把寄存器分配给变量和临时变量。器的算法,把寄存器分配给变量和临时变量。n 整型、浮点型和指针类型对象可以声明为寄存器变量,其它类型对整型、浮点型和指针类型对象可以声明为寄存器变量,其它类型对象则不能。象则不能。5.2 C55x C/C+语言编程基础语言编程基础175.2.4 asm指令lasm指令可将汇编语言指令指令可将汇编语言指令嵌入嵌入到编译后输出的汇编语言中到编译后输出的汇编语言中, 像做像做asm函数的调用。函数的调用。l指令格式:指令格式: asm (“assembler text”);例例 asm (“nop”); 插入一条汇编指令插入一
15、条汇编指令nop 5.2 C55x C/C+语言编程基础语言编程基础l插入的代码必须是合法的汇编语言指令插入的代码必须是合法的汇编语言指令u编译器不检查字符串编译器不检查字符串。如果有错,汇编器将其检测出来。如果有错,汇编器将其检测出来l使用使用asm指令存在的问题:指令存在的问题:u它容易破坏它容易破坏C环境,因为环境,因为C编译器不检查分析嵌入的汇编编译器不检查分析嵌入的汇编语句语句u使用优化器时须小心。使用优化器时须小心。 虽然优化器不会移除虽然优化器不会移除asm指令,但它可以重新改变周围代码顺序并指令,但它可以重新改变周围代码顺序并可能引起不可预知的结果可能引起不可预知的结果185.
16、2.5 Pragma指令lPragma指令:告诉编译器的预处理器指令:告诉编译器的预处理器如何处理函数如何处理函数。l必须在函数体外确定必须在函数体外确定pragma,且必须出现在任何声明、定,且必须出现在任何声明、定义或对函数和符号引用之前。否则,编译器会输出警告。义或对函数和符号引用之前。否则,编译器会输出警告。5.2 C55x C/C+语言编程基础语言编程基础l C55x C编译器支持如下编译器支持如下pragma指令指令:CODE_SECTIONDATA_SECTIONC54X_CALLC54X_FAR_CALLDATA_ALIGNFUNC_CANNOT_INLINEFUNC_EXT_
17、CALLEDFUNC_IS_PUREFUNC_IS_SYSTEMFUNC_NEVER_RETURNSFUNC_NO_GLOBAL_ASGFUNC_NO_IND_ASGMUST_ITERATEUNROLL19l CODE_SECTION指令及其用法指令及其用法u语法:语法:#pragma CODE_SECTION(func_name,”section_name”)u作用:作用: 把把C函数函数func_name的代码配置到由的代码配置到由section_name定义的程序段中定义的程序段中5.2 C55x C/C+语言编程基础语言编程基础l DATA_SECTION指令及其用法指令及其用法u语法
18、:语法: #pragma DATA_SECTION(var_name,”section_name”)u作用:作用: var_name是是C函数内的变量名称,该指令将数据函数内的变量名称,该指令将数据var_name配置到由配置到由section_name定义的数据段中定义的数据段中205.2.6 标准标准ANSI C语言模式的改变语言模式的改变 (-pk、-pr和和-ps选项)选项) 编译源代码有如下的模式:编译源代码有如下的模式:uNormal ANSI模式:模式:编译器默认的模式在此模式下:编译器默认的模式在此模式下: 大多数违反大多数违反ANSI标准的语句都报错标准的语句都报错 违反严格
19、违反严格ANSI标准的语句给出警告标准的语句给出警告 允许扩展的语句允许扩展的语句.uK&R C模式模式 (pk) :兼容老版本的代码兼容老版本的代码.u宽松宽松ANSI模式(模式(-pr ):): 忽略违反严格的忽略违反严格的ANSI标准的情况,不发送警告消息或错误消息标准的情况,不发送警告消息或错误消息 编译接受对编译接受对ANSI C标准的扩展,甚至是和标准的扩展,甚至是和ANSI C冲突的时候。冲突的时候。 u严格严格ANSI模式模式(-ps): 在违反在违反ANSI规则的时候报错。规则的时候报错。 可能影响程序严格形式的语言扩展不可用可能影响程序严格形式的语言扩展不可用. 如
20、:如: asm关键字关键字5.2 C55x C/C+语言编程基础语言编程基础215.2.7存储器模式存储器模式l编译器支持两种存储器模型:编译器支持两种存储器模型:u小存储模式小存储模式u大存储器模式大存储器模式数据在存储器中的放置和访问不同数据在存储器中的放置和访问不同。5.2 C55x C/C+语言编程基础语言编程基础22(1) 小存储器模式(默认模式)小存储器模式(默认模式)l有较少的代码和数据。编译器使用有较少的代码和数据。编译器使用16位数据指针来访问数据位数据指针来访问数据l以下各段必须分配在单页(以下各段必须分配在单页(64KB)存储器内,:)存储器内,:u.bss和和.data
21、段(所有静态和全局数据)。段(所有静态和全局数据)。u.stack和和sysstack段(第一和第二系统堆栈)。段(第一和第二系统堆栈)。u.sysmem段(动态存储空间)。段(动态存储空间)。u.const段。段。5.2 C55x C/C+语言编程基础语言编程基础l对对.text段(代码)、段(代码)、.switch段(段(switch语句)和语句)和.cinit段(变段(变量初始化)的大小和位置没有限制。量初始化)的大小和位置没有限制。23(2) 大存储器模式大存储器模式l用用-ml shell选项应用该模式。选项应用该模式。l不必考虑数据页的限制。不必考虑数据页的限制。l数据指针为数据指
22、针为23位,在存储器中占位,在存储器中占2字。字。 .stack和和.sysstack段必须在同一页上。段必须在同一页上。 链接器不允许同时存在大存储器模式和小存储器模式。链接器不允许同时存在大存储器模式和小存储器模式。5.2 C55x C/C+语言编程基础语言编程基础245.2.8 存储器分配存储器分配(1) C编译器生成的段编译器生成的段 两种基本的类型:初始化段和未初始化段两种基本的类型:初始化段和未初始化段l初始化段:初始化段:u.cinit段:包含初始化数据表格和常数段:包含初始化数据表格和常数u.const段:包含用段:包含用const定义的字符串常量和数据定义的字符串常量和数据u
23、.switch段:包含段:包含switch语句所用表语句所用表u.text段:包含所有可执行代码段:包含所有可执行代码汇编器生成汇编器生成.data段,但段,但C编译器并不使用这个段。编译器并不使用这个段。5.2 C55x C/C+语言编程基础语言编程基础25l未初始化段:未初始化段:u.bss段,为全局和静态变量保留了空间。段,为全局和静态变量保留了空间。 在启动和装载的时候,在启动和装载的时候,C启动程序或装载程序从启动程序或装载程序从.cinit段(通常在段(通常在ROM中)复制数据并用这些数据来初始化中)复制数据并用这些数据来初始化.bss段中的变量段中的变量u.stack段:为段:为
24、C系统堆栈分配存储空间。系统堆栈分配存储空间。5.2 C55x C/C+语言编程基础语言编程基础u.sysstack段:为第二系统堆栈分配存储地址段:为第二系统堆栈分配存储地址u.sysmem段:为动态存储分配保留空间。如果段:为动态存储分配保留空间。如果C程序不使用程序不使用动态函数,编译器就不创建动态函数,编译器就不创建.sysmem段段u.cio段:支持段:支持C I/O。当任何类型的。当任何类型的C I/O被执行(如被执行(如printf和和scanf),就会建立缓冲区。),就会建立缓冲区。.cio段必须放在链接器命令文段必须放在链接器命令文件中。件中。26表表5-2 段及其存储位置段
25、及其存储位置5.2 C55x C/C+语言编程基础语言编程基础27(2) 堆栈堆栈 l堆栈的大小都由链接器设置。堆栈的大小都由链接器设置。 两种默认堆栈大小都是两种默认堆栈大小都是1000字节。字节。 链接器命令选项链接器命令选项 -stack -sysstack5.2 C55x C/C+语言编程基础语言编程基础改变堆栈大小。改变堆栈大小。285.2.9运行时间支持算法及转换程序运行时间支持算法及转换程序l运行时间支持库包含了众多的汇编语言程序,用来为运行时间支持库包含了众多的汇编语言程序,用来为C55x指令指令集不支持的集不支持的C运算,提供算法和转换功能运算,提供算法和转换功能l包括整数除
26、法、整数取模和浮点运算等包括整数除法、整数取模和浮点运算等l要遵循标准要遵循标准C语言调用规则语言调用规则5.2 C55x C/C+语言编程基础语言编程基础如如 : 主程序中加入主程序中加入 #include “c:tic5500dsplibincludedsplib.h” ;库函数原型;库函数原型 在工程文件中加入在工程文件中加入 55xdsp.lib函数原型:函数原型:FF算法算法 滤波、卷积滤波、卷积 相关相关 矩阵矩阵 数据格式转换数据格式转换 .295.2.10 系统初始化系统初始化l复位硬件调用复位硬件调用_c_int00函数。函数。 链接时,链接器会给符号链接时,链接器会给符号_
27、c_int00设置入口点的值。设置入口点的值。l执行执行_c_int00函数初始化函数初始化C环境:环境:u建立堆栈和第二系统堆栈。建立堆栈和第二系统堆栈。u初始化全局变量。初始化全局变量。u调用调用main函数开始执行函数开始执行C程序。程序。 5.2 C55x C/C+语言编程基础语言编程基础30(1) 运行时间变量初始化运行时间变量初始化l在运行时间自动初始化变量(默认模式)在运行时间自动初始化变量(默认模式)l用链接器的用链接器的-c选项。选项。_c_int005.2 C55x C/C+语言编程基础语言编程基础运行时运行时31(2) 装载时间变量初始化装载时间变量初始化l在装载时间自动
28、初始化变量会减少启动时间并节省被初始化表在装载时间自动初始化变量会减少启动时间并节省被初始化表使用的存储器。使用的存储器。l用用-cr 链接器选项。链接器选项。5.2 C55x C/C+语言编程基础语言编程基础325.3 C55x C/C+编译器的使用编译器的使用l编译、汇编和链接等操作。编译、汇编和链接等操作。5.3.1 编译器外壳程序编译器外壳程序cl55简介简介l编译器外壳程序编译器外壳程序cl55能够运行下列一个或多个模块:能够运行下列一个或多个模块:u编译器编译器u汇编器:汇编器:u链接器链接器编译器包括编译器包括u剖析器(剖析器(parser)、)、u优化器(优化器(optimiz
29、er)u代码产生器(代码产生器(code generator)输入文件类别:输入文件类别:u .c为为C源代码,源代码,u.cpp、.cxx或或.cc为为C+源代码,源代码,u.asm、.abs或或.s*为汇编源代码为汇编源代码链接器是一个可选项。链接器是一个可选项。 33l编译器外壳程序编译器外壳程序cl55cl55的调用:的调用: cl55optionsfilenameszlink_optionsobject files 命命令令名名命命令令选选项项C/C+ 源程源程序,序,汇编汇编源程源程序或序或目标目标文件文件z选选项项用用于于链链接接器器的的使使用用链链接接器器选选项项链链接接器器输
30、输出出的的目目标标文文件件5.3 C55x C/C+编译器的使用编译器的使用34表表53 编译器和链接器的常用选项编译器和链接器的常用选项5.3.2 cl55程序的选项程序的选项控制着控制着cl55本身,影响生成应用程序本身,影响生成应用程序5.3 C55x C/C+编译器的使用编译器的使用35l注意:注意:u选项以选项以 “-”开头,字母不区分大小写。开头,字母不区分大小写。u不带参数的多个单字母可以组合,不带参数的多个单字母可以组合, 如:如:sgq 与与s g q等价。等价。 首字母相同,也可以组合,如:首字母相同,也可以组合,如:pi pk pl 可以组合成可以组合成pikl。u对于带
31、参数的选项,如:对于带参数的选项,如:u name或或uname均为合法。均为合法。 当参数为数字时,如:当参数为数字时,如:o3为合法,为合法, o 3则为非法。则为非法。u选项的排列次序可以是任意的。选项的排列次序可以是任意的。5.3 C55x C/C+编译器的使用编译器的使用365.3.3 编译器和编译器和CCS (Code Composer Studio)l用用CCS构建一个工程时,构建一个工程时,CCS会调用合适的代码产生工具完会调用合适的代码产生工具完成编译、汇编和链接任务。成编译、汇编和链接任务。l编译器、汇编器和链接器的有关选项在编译器、汇编器和链接器的有关选项在CCS的相关选
32、项对话的相关选项对话框中进行设置。框中进行设置。5.3 C55x C/C+编译器的使用编译器的使用375.4 TMS320C55x的的C代码优化代码优化l优化器(优化器(optimizer)执行操作:)执行操作: 简化循环简化循环 重新安排语句和表达式重新安排语句和表达式 把变量用寄存器实现等把变量用寄存器实现等可以提高可以提高C/C+程序的运行效率,减少其代码长度。程序的运行效率,减少其代码长度。385.4.1编译器的基本优化选项编译器的基本优化选项lo0:简化控制流程:简化控制流程 把变量安排到寄存器把变量安排到寄存器 简化循环简化循环 忽略未用代码忽略未用代码 简化语句和表达式简化语句和
33、表达式 把调用函数扩展为把调用函数扩展为内嵌函数内嵌函数等。等。5.4 TMS320C55x的的C代码优化代码优化395.4.1编译器的优化选项编译器的优化选项lo1:在:在o0级优化的基础上,进一步局部优化,级优化的基础上,进一步局部优化, 如:如: 删除未用分配删除未用分配 忽略局部忽略局部公共公共表达式等。表达式等。lo2:在:在o1级优化的基础上,进一步优化,级优化的基础上,进一步优化, 如:如: 循环优化循环优化 删除全局未用分配等。删除全局未用分配等。5.4 TMS320C55x的的C代码优化代码优化40lo3:最大优化级别。在:最大优化级别。在o2级优化的基础上,进一步优化:级优化的基础上,进一步优化: 移除从未调用的函数代码移除从未调用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度注册核安全工程师考试彩蛋押题附答案详解(能力提升)
- 2024-2025学年度电梯考试经典例题带答案详解(能力提升)
- 2024-2025学年度执业兽医考试历年机考真题集及完整答案详解(必刷)
- 2024-2025学年医学检验(中级)复习提分资料(精练)附答案详解
- 2024-2025学年度医师定期考核模考模拟试题(精练)附答案详解
- 2024-2025学年度公务员考试《常识》考前冲刺练习带答案详解AB卷
- 2024-2025学年度反射疗法师3级自我提分评估带答案详解(综合题)
- 2024-2025学年度公务员(国考)试卷完整答案详解
- 2024-2025学年医院三基考试通关题库及完整答案详解【各地真题】
- 2024-2025学年度仰恩大学单招《数学》考前冲刺练习题(易错题)附答案详解
- 2025年兵团两委考试题及答案
- 党的二十届四中全会学习试题
- 通信建设项目管理
- 血液透析合并心力衰竭患者的护理要点
- 2026年陕西青年职业学院单招职业技能测试题库必考题
- 2025年黑龙江单招真题卷全套
- 2026年沙洲职业工学院单招职业技能考试必刷测试卷及答案1套
- 2025年小学四年级下学期语文基础知识专项训练试卷(含答案)
- 2026上海电力股份有限公司校园招聘笔试备考题库及答案解析
- 光伏施工安全培训内容课件
- 农业经理人(高级)技能认证考试复习题及答案
评论
0/150
提交评论