如何构建一个完整的工程_第1页
如何构建一个完整的工程_第2页
如何构建一个完整的工程_第3页
如何构建一个完整的工程_第4页
如何构建一个完整的工程_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4 4章章 如何构建一个完整的工程如何构建一个完整的工程DSP原理及应用打开已有的工程打开已有的工程4.1 一个完整的工程由哪些文件构成头文件头文件 .h文件,来自于文件,来自于Include文件夹。是文件夹。是TMS320F2812工程的头文件,工程的头文件,头文件内定义头文件内定义了内部寄存器的数据结构了内部寄存器的数据结构。一般不需要修改。一般不需要修改。如果需要定义在整个工程内都具有作用域的全如果需要定义在整个工程内都具有作用域的全局变量时,可以将这些变量定义在头文件里。局变量时,可以将这些变量定义在头文件里。库文件库文件 .lib文件,来自于文件,来自于Libraries文件夹。

2、文件夹。源文件源文件 .c文件,来自于文件,来自于Source文件夹。工程文件夹。工程的源文件,是构成工程的主要文件,软件开发的源文件,是构成工程的主要文件,软件开发时编写的代码都是写在源文件内的。时编写的代码都是写在源文件内的。CMD文件文件 .cmd文件,用来分配存储空间的。文件,用来分配存储空间的。包含所有的头包含所有的头文件,只要添文件,只要添加了这个头文加了这个头文件,其他的都件,其他的都被添加到所建被添加到所建工程下。工程下。4.1.1头文件头文件是以头文件是以.h为后缀的文件。为后缀的文件。h即为即为“head”的缩写。的缩写。F2812的头文件主要定义了芯片内部的寄存器结构、终

3、端服的头文件主要定义了芯片内部的寄存器结构、终端服务程序等内容。务程序等内容。创建新工程的时候,将表中所列头文件和新建的工程文件放创建新工程的时候,将表中所列头文件和新建的工程文件放在同一个文件夹里,然后在使用到头文件的源文件内加入在同一个文件夹里,然后在使用到头文件的源文件内加入代码代码“#include”DSP28_device.h”工程编译的时候,工程编译的时候,CCS会自动扫描并将所有相关的头文件添加到工程中。会自动扫描并将所有相关的头文件添加到工程中。序号序号文件名文件名主要内容主要内容1 1DSP28_Adc.hDSP28_Adc.h模数转换模数转换(ADC)(ADC)寄存器的相关

4、定义寄存器的相关定义2 2DSP28_CpuTimers.hDSP28_CpuTimers.h3232位位CPUCPU定时器寄存器的相关定义定时器寄存器的相关定义3 3DSP28_DefaultISR.hDSP28_DefaultISR.hF2812F2812默认中断服务程序的定义默认中断服务程序的定义4 4DSP28_DevEmu.hDSP28_DevEmu.hF2812F2812硬件仿真寄存器的相关定义硬件仿真寄存器的相关定义5 5DSP28_Device.hDSP28_Device.h包含所有的头文件、目标包含所有的头文件、目标CPUCPU类型的选择类型的选择(F2812(F2812或或

5、F2810)F2810)、常用标量的定义等内容、常用标量的定义等内容6 6DSP28_Ecan.hDSP28_Ecan.h增强型增强型CANCAN寄存器的相关定义寄存器的相关定义7 7DSP28_Ev.hDSP28_Ev.h事件管理器事件管理器(EV)(EV)寄存器的定义寄存器的定义8 8DSP28_GlobalPrototypes.hDSP28_GlobalPrototypes.h全局函数的声明全局函数的声明9 9DSP28_Gpio.hDSP28_Gpio.h通用输入输出通用输入输出(Gpio)(Gpio)寄存器相关定义寄存器相关定义1010DSP28_McBsp.hDSP28_McBsp

6、.h多通道缓冲串行口(多通道缓冲串行口(McBspMcBsp)寄存器相关定义)寄存器相关定义1111DSP28_PieCtrl.hDSP28_PieCtrl.hPIEPIE控制寄存器的相关定义控制寄存器的相关定义1212DSP28_PieVect.hDSP28_PieVect.hPIEPIE中断向量表的定义中断向量表的定义1313DSP28_Sci.hDSP28_Sci.h串行通信接口串行通信接口(SCI)(SCI)寄存器的相关定义寄存器的相关定义1414DSP28_Spi.hDSP28_Spi.h串行外围设备接口串行外围设备接口(SPI)(SPI)寄存器的相关定义寄存器的相关定义1515DS

7、P28_SysCtrl.hDSP28_SysCtrl.h系统控制寄存器的相关定义系统控制寄存器的相关定义1616DSP28_Xintf.hDSP28_Xintf.h外部接口寄存器的相关定义外部接口寄存器的相关定义1717DSP28_XIntrupt.hDSP28_XIntrupt.h外部中断寄存器的相关定义外部中断寄存器的相关定义自己创建头文件,主要用来定义一些变量能够在整个工程内使用,自己创建头文件,主要用来定义一些变量能够在整个工程内使用,也就是作用域在整个工程的全局变量。也就是作用域在整个工程的全局变量。首先需要在某个头文件中进行定义,然后在源文件中进行声明。首先需要在某个头文件中进行定

8、义,然后在源文件中进行声明。然后添加到当前工程目录下。然后添加到当前工程目录下。错误!错误!正确!正确!1, 1, 将所创建的头文件和其他头文件放在相同的路径下将所创建的头文件和其他头文件放在相同的路径下2, 2, 在在DSP_Device.hDSP_Device.h中包含其他头文件的代码中加入语句中包含其他头文件的代码中加入语句“#include#include“DSP28_Global-Variable.h”DSP28_Global-Variable.h”4.1.2 库文件库文件是以库文件是以.lib为后缀的文件为后缀的文件Lib即即“library”的缩写的缩写CCS中库文件的默认路径为

9、:中库文件的默认路径为:C:CCStudio_v3.3c2000cgtoolslib库文件不仅包含了寄存器的地址与对应标示符库文件不仅包含了寄存器的地址与对应标示符的定义,还包含了的定义,还包含了C/C+运行支持库函数,如运行支持库函数,如系统启动函数系统启动函数_c_int00等。等。C28xx相关的库文件有相关的库文件有4个:个:rts2800.lib、 rts2800_eh.lib、 rts2800_ml.lib和和 rts2800_ml_eh.lib、静态库与动态库的区别(1)作用都是将函数封装在一起经过编译之后供自己或作用都是将函数封装在一起经过编译之后供自己或者他人调用。优点在于编

10、译后的库文件是看不者他人调用。优点在于编译后的库文件是看不到源码的,保密性很好,同时也不会因为不小到源码的,保密性很好,同时也不会因为不小心修改了函数出问题,便于维护心修改了函数出问题,便于维护 lib是编译时需要的,而是编译时需要的,而dll是运行时需要的。如果是运行时需要的。如果要完成源代码的编译,有要完成源代码的编译,有lib就够了。如果要使就够了。如果要使动态链接的程序运行起来,有动态链接的程序运行起来,有dll就够了。当然,就够了。当然,在开发和调试阶段,最好两者都有。在开发和调试阶段,最好两者都有。 .lib .dll静态库与动态库的区别(2) 一般的动态库程序有一般的动态库程序有

11、lib文件和文件和dll文件。文件。lib文件是文件是必须在编译期就连接到应用程序中的,而必须在编译期就连接到应用程序中的,而dll文件文件是运行期才会被调用的。是运行期才会被调用的。如果有如果有dll文件,那么对文件,那么对应的应的lib文件一般是一些索引信息,具体的实现在文件一般是一些索引信息,具体的实现在dll文件中文件中。如果只有。如果只有lib文件,那么这个文件,那么这个lib文件文件是静态编译出来的,索引和实现都在其中。静态是静态编译出来的,索引和实现都在其中。静态编译的编译的lib文件优点是给用户安装时就不需要再挂文件优点是给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应

12、用程序比较动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。同时要发布新的应用程序才行。静态库与动态库的区别(3) 在动态库的情况下,有两个文件,一个是引入在动态库的情况下,有两个文件,一个是引入库(库(.lib)文件,一个是)文件,一个是dll文件,引入库文件文件,引入库文件包含被包含被dll导出的函数的名称和位置,导出的函数的名称和位置,dll包含包含实际的函数和数据,应用程序使用实际的函数和数据,应用程序使用lib文件链接文件链接到所需要使用的到所需要使用的dll文件,库中的函数和

13、数据并文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可不复制到可执行文件中,因此在应用程序的可执行文件中,执行文件中,存放的不是被调用的函数代码,存放的不是被调用的函数代码,而是而是dll中所要调用的函数的内存地址,中所要调用的函数的内存地址,这样当这样当一个或多个应用程序运行是再把程序代码和被一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资调用的函数代码链接起来,从而节省了内存资源。源。 在在DSP开发中,通常只须关注开发中,通常只须关注lib文件即可。四个文件即可。四个库函数库函数TI并未给出详细说明,参考英文说明,实并未给出详细说明,参考英

14、文说明,实际使用时,编译错误就更换库函数重新尝试。际使用时,编译错误就更换库函数重新尝试。4.1.3 源文件源文件是以源文件是以.c为后缀的文件为后缀的文件C即为即为“source”的缩写的缩写源文件是整个工程的核心,包含了所有需源文件是整个工程的核心,包含了所有需要实现的功能的代码要实现的功能的代码TI为为F2812的开发已经准备好了很多源文件,的开发已经准备好了很多源文件,通常在里头添加代码实现期望的功能通常在里头添加代码实现期望的功能但但main函数(主函数)文件需要开发者根函数(主函数)文件需要开发者根据自己实际情况编写。据自己实际情况编写。F2812常用的源文件序号序号文件名文件名主

15、要内容主要内容1 1DSP28_Adc.cDSP28_Adc.cADAD初始化函数初始化函数2 2DSP28_CpuTimers.cDSP28_CpuTimers.cCPUCPU定时器初始化函数定时器初始化函数3 3DSP28_ECan.cDSP28_ECan.c增强型增强型CanCan初始化函数初始化函数4 4DSP28_Ev.cDSP28_Ev.c事件管理器事件管理器EvEv初始化函数初始化函数5 5DSP28_Gpio.cDSP28_Gpio.c通用通用I/OI/O模块初始化函数模块初始化函数6 6DSP28_Mcbsp.cDSP28_Mcbsp.c多通道缓冲串行口初始化函数多通道缓冲串

16、行口初始化函数7 7DSP28_Sci.cDSP28_Sci.c串行通信接口初始化函数串行通信接口初始化函数8 8DSP28_Spi.cDSP28_Spi.c串行外围接口初始化函数串行外围接口初始化函数9 9DSP28_SysCtrl.cDSP28_SysCtrl.c系统控制模块初始化函数系统控制模块初始化函数1010DSP28_Xintf.cDSP28_Xintf.c外部接口初始化函数外部接口初始化函数1111DSP28_XIntruptDSP28_XIntrupt外部中断初始化函数外部中断初始化函数1212DSP28_InitPeripherals.cDSP28_InitPeriphera

17、ls.c包含了其他的外设初始化函数包含了其他的外设初始化函数1313DSP28_PieCtrl.cDSP28_PieCtrl.cPIEPIE控制模块初始化函数控制模块初始化函数1414DSP28_PieVect.cDSP28_PieVect.c对对PIEPIE中断向量进行初始化中断向量进行初始化1515DSP28_DefaultIsr.cDSP28_DefaultIsr.c包含了包含了F2812F2812所有外设中断函数所有外设中断函数1616DSP28_GlobalVariableDefs.cDSP28_GlobalVariableDefs.c定义了定义了F2812F2812的全局变量和数据

18、段程序的全局变量和数据段程序CMD文件CMD文件的作用是为代码和数据文件的作用是为代码和数据分配存储分配存储空间空间F2812工程中的工程中的CMD文件有两种:文件有两种:一种是分配一种是分配RAM空间,用于将程序下载到空间,用于将程序下载到RAM空间进行调试空间进行调试一种是分配一种是分配FLASH空间,用于将程序固化到空间,用于将程序固化到FLASH空间空间4.2 通用扩展语言GEL GEL是是General Extended Language的缩写,即的缩写,即通通用扩展语言用扩展语言,是一种类似,是一种类似于于C的解释性语言。用户的解释性语言。用户可以通过在文件中使用可以通过在文件中使

19、用GEL语言来创建函数,从语言来创建函数,从而扩展而扩展CCS的功能。通过的功能。通过GEL,可以访问目标板的,可以访问目标板的存储器,并为存储器,并为CCS的的GEL菜单添加选项。菜单添加选项。 4.2.2-1 GEL函数的定义 GEL函数定义函数定义: funcName(parameter1 ,parameter2 , parameter n) statements GEL函数名函数名有效的有效的GEL参数参数有效的有效的GEL语句语句4.2.1 GEL语法 GELGEL语法支持的语句类型语法支持的语句类型序号序号GELGEL语法支持的语句语法支持的语句1 1GELGEL函数,包括函数的定

20、义、参数、调用函数,包括函数的定义、参数、调用2 2ReturnReturn语句语句3 3If-elseIf-else语句语句4 4WhileWhile语句语句5 5GELGEL注释语句注释语句6 6预处理语句预处理语句 GELGEL是是C C语言的一个子集。但语言的一个子集。但GELGEL函数不需要指定函数返回值的函数不需要指定函数返回值的类型,也不需要任何头信息来定义所要求的参数类型,该信息类型,也不需要任何头信息来定义所要求的参数类型,该信息通过数据值自动获得。通过数据值自动获得。定义平方函数square(a) return a*a;square(1.5)=2.25;square(3)=

21、9。GEL函数名函数名有效的有效的GEL参数参数有效的有效的GEL语句语句定义初始化对话框函数dialog Init(filename “File to be Loaded”, CPUname “CPU Name”,initValue “Initialization Value”) GEL_Load(filename, CPUname); a=initValue;关键字,意思是关键字,意思是“对话框对话框”,调用函数,调用函数“Init”时,会弹出对话框,且对话框有三个项,即三时,会弹出对话框,且对话框有三个项,即三个参数个参数字符串是对该参数的描述字符串是对该参数的描述调用调用CCS内部函数

22、,这个函数要求内部函数,这个函数要求用一个用一个字符串来标识第一个参数,也必须把一个字符串来标识第一个参数,也必须把一个字符串传递给第一个参数字符串传递给第一个参数。CPUname是是可选的可选的必须在必须在DSP工程工程中定义,否则出错中定义,否则出错对刚才定义的对刚才定义的InitInit函数的有效调用格式:函数的有效调用格式:Init(“C:CCStudio_v3.3MyProjectsgpiodebuggpio.out”, ”cpu_a”,0)4.2.2-2 GEL函数的参数可以通过在可以通过在GEL函数中定义参数来将自变量传递给函数中定义参数来将自变量传递给一个一个GEL函数。与函数

23、。与C函数参数不同的是,函数参数不同的是,GEL函数的函数的参数类型并不需要定义,只要求参数名参数类型并不需要定义,只要求参数名。参数的类。参数的类型由传递的自变量自动决定。型由传递的自变量自动决定。GEL参数可以是以下任意一种:参数可以是以下任意一种:(1)一个实际的)一个实际的/仿真的仿真的DSP目标板符号值。目标板符号值。(2)一个数字常量,如果传递的是表达式或者常)一个数字常量,如果传递的是表达式或者常数值。数值。(3)一个字符串常量。)一个字符串常量。分析GEL函数参数Initialize(a,filename,b)targVar=b;a=0;GEL_Load(filename);r

24、eturn b*b;下面是对函数Initialize的正确调用:Initialize(targetSymbol,“C:CCStudio_v3.3MyProjectsgpioDebuggpio.out”,28*4+2.52)。参数参数a被确定为被确定为DSP的标识符的标识符targetSymbol,参数,参数filename初初始化为字符串常量,参数始化为字符串常量,参数b通过计算称为常数通过计算称为常数114.52如果不将如果不将DSPDSP标识符传递给参数标识符传递给参数a a,则执行第,则执行第二个语句二个语句“a=0a=0”时就会产生一个运行错误。时就会产生一个运行错误。还需保证在还需保

25、证在GELGEL函数运行之前,这个标识符函数运行之前,这个标识符的信息已经加载给了的信息已经加载给了CCSCCS调试器。调试器。如果标识符如果标识符targetSymboltargetSymbol已经被定义了,则上已经被定义了,则上述函数的调用会将目标标识符赋值为述函数的调用会将目标标识符赋值为0 0GELGEL函数的参数除了可以是函数的参数除了可以是DSPDSP目标板的标识目标板的标识符外,还可以是数值或字符串,如符外,还可以是数值或字符串,如1 1、3.14153.1415、“C:CCStudio_v3.3C:CCStudio_v3.3MyProjectsMyProjectsgpiogpi

26、oDebDebuguggpio.outgpio.out”等。等。对于数值参量,对于数值参量,GELGEL允许向其传递任何有效允许向其传递任何有效的的C C表达式这个表达式在传递表达式这个表达式在传递给函数之前被计给函数之前被计算算出来。如果结果包含有小数点或指数符号,出来。如果结果包含有小数点或指数符号,如如1.21.2或或1.34e41.34e4,它将被当做实型变量,否则就,它将被当做实型变量,否则就是整型变量。是整型变量。下面的格式均正确调用下面的格式均正确调用InitializeInitialize函数:函数:Initialize(targetSymbol,“C:CCStudio_v3.

27、3MyProjectsgpioDebuggpio.out”,10)Initialize(targetSymbol,“C:CCStudio_v3.3MyProjectsgpioDebuggpio.out”,1.2)整型整型实型实型执行第一个语句执行第一个语句targVar=b时,如果目标变量时,如果目标变量targetVar是是整型,而参数整型,而参数b为实型时,参数为实型时,参数b将会被截尾。将会被截尾。4.2.2-3 GEL函数的调用 通常可以在可以输入通常可以在可以输入C表达式的任何地方调表达式的任何地方调用一个用一个GEL函数;可以从任何能接受有效函数;可以从任何能接受有效C表达式的对话

28、框中调用一个表达式的对话框中调用一个GEL函数;还函数;还可以在一个可以在一个GEL函数中调用另一个函数中调用另一个GEL函数。函数。GEL函数不支持递归调用函数不支持递归调用当一个当一个GEL函数正在被执行时,不能运行它函数正在被执行时,不能运行它自己的其他副本。自己的其他副本。 4.2.3 GEL语句返回语句返回语句If-else语句语句While语句语句注释语句注释语句预处理语句预处理语句GEL返回语句GELGEL在一个函数里支持标准在一个函数里支持标准C C的返回语句,的返回语句,其一般形式为:其一般形式为:return expressionreturn expression;一个返回

29、语句并不是一定需要返回一个值,一个没有一个返回语句并不是一定需要返回一个值,一个没有表达式的返回语句将控制返回到调用处,并不返回有表达式的返回语句将控制返回到调用处,并不返回有用的值。用的值。与标准与标准C C区别:区别:GELGEL函数定义不需指定返回值类型,函数定义不需指定返回值类型,返回值类型在程序运行时决定。返回值类型在程序运行时决定。GEL if-else语句GEL支持标准支持标准C的的if-else语句。通用格式为:语句。通用格式为:if(expression) statement1else statement2GEL if-else语句例:例:if(ab) C=a-bElse c

30、=b-a; d=b+a;GEL while语句GELGEL的的whilewhile语句类似于标准语句类似于标准C C的的whilewhile语句,语句,但是但是GELGEL不支持标准不支持标准C C的的continuecontinue和和breakbreak语句。语句。通用格式为:通用格式为:whilewhile(expressionexpression) statementstatement例:例:while(a!=b)while(a!=b) c=a c=a* *b; b; a+; a+; GEL while语句GEL注释GEL支持标准支持标准C语言的注释。语言的注释。GEL的注释,的注释,

31、限用字符限用字符“/*”和和“*/”,可以跨越,可以跨越若干行。若干行。 while(a!=b)while(a!=b) c=a c=a* *b; b; a+; a+;/ /* *此处需要改变自变量的值来控制循环此处需要改变自变量的值来控制循环* */ / GEL预处理语句GELGEL支持标准支持标准C C的的#define#define预处理关键字,预处理关键字,这也是唯一可用的预处理关键字。这也是唯一可用的预处理关键字。下面的语句,使预处理器用给定的字符序列取代标识符,下面的语句,使预处理器用给定的字符序列取代标识符,其中字符序列前后的空格都不要:其中字符序列前后的空格都不要: #defin

32、e identifier token-sequence#define identifier token-sequence下面的语句(第一个标识符和括号之间没有空格)下面的语句(第一个标识符和括号之间没有空格)是一个宏定义,其参数是标识符列表:是一个宏定义,其参数是标识符列表: #define identifier#define identifier( (identifier-listidentifier-list) ) token-sequence token-sequence加载或卸载GEL函数要将包含要将包含GELGEL函数的函数的GELGEL文件加载到文件加载到CCSCCS才能才能在文件

33、中访问,驻留在在文件中访问,驻留在CCSCCS的存储器中,随的存储器中,随时执行,失效在移除文件之后。时执行,失效在移除文件之后。当加载的文件被修改,必须先将其卸载,然当加载的文件被修改,必须先将其卸载,然后再修改生效后重新加载。后再修改生效后重新加载。GELGEL加载器在加载时要检查加载器在加载时要检查GELGEL文件的语法文件的语法错误,但不检查变量是否定义。错误,但不检查变量是否定义。加载或卸载GEL函数加载一个加载一个GEL步骤:步骤:选择选择FileLoad GEL菜单项菜单项在弹出的在弹出的Load GEL File对话框中,浏览找对话框中,浏览找到包含到包含GEL函数的函数的GE

34、L文件。(文件。(CCS存放存放GEL文件路径:文件路径:CCS安装路径安装路径ccgel)双击文件名,或者单击文件名后点击双击文件名,或者单击文件名后点击“打打开开”按钮。按钮。加载或卸载GEL函数卸载一个卸载一个GEL步骤:步骤:选择选择ViewProject菜单项菜单项单击单击GEL文件夹旁边的文件夹旁边的“+”号,查看号,查看GEL文件文件右击需要卸载的右击需要卸载的GEL文件文件在所弹出的快捷菜单中选择在所弹出的快捷菜单中选择Remove4.2.5 使用关键字在GEL菜单中添加GEL函数4.2.5-1 关键字hotmenu使用关键字使用关键字hotmenuhotmenu,将一个,将一

35、个GELGEL函数添加到函数添加到GELGEL菜单菜单里,则该函数一旦被选中就立即执行,其语法如下:里,则该函数一旦被选中就立即执行,其语法如下: hotmenuhotmenu funcnamefuncname statements statements 例:Menuitem “My Functions”;hotmenu InitTarget() *waitstate=0 x11;Hotmenu LoadMyProg() GEL_Load(“C:CCStudio_v3.3MyProjectsgpioDebuggpio.out”)自动加载文件自动加载文件gpio.out4.2.5-2 关键字di

36、alog使用关键字使用关键字dialog,向,向GEL菜单添加菜单添加GEL函数,函数,并为参数输入创建一个并为参数输入创建一个对话框对话框。从。从GEL菜单选择该函数时,菜单选择该函数时,会出现一个对话窗口,并提示输入参数。会出现一个对话窗口,并提示输入参数。函数定义时紧跟在参数后面的字符串用来在对话窗口里描述参数。函数定义时紧跟在参数后面的字符串用来在对话窗口里描述参数。其语法如下:其语法如下: dialog funcName(paramName1 “param1 definition”, paramName2 “param2 definition”,) statementsMenuite

37、m “My Functions”;dialog InitTarget(StartAddress ”Starting Address”, EndAddress” End Address”) statements;dialog RefreshTarget() statements;例:4.2.5-3 关键字slider使用关键字使用关键字slider,向,向GEL菜单添加菜单添加GEL函数。函数。当从当从GEL菜单执行该函数时,就会出现滑动条来控制传递给菜单执行该函数时,就会出现滑动条来控制传递给GEL函数的值。函数的值。每次移动滑动条,就用新的参数来调用每次移动滑动条,就用新的参数来调用GEL函数,函数,该参数反映的是滑动条的位置。其格式如下:该参数反映的是滑动条的位置。其格式如下:Slider parma_definition(minVal,maxVal,increment,pageIncrement,paraName) statements; Memuitem ”My Functions”;Slider volumeControl (0,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论