1、第4章 如何构建一个完整的工程,4.1 一个完整的工程由哪些文件构成,头文件库文件源文件CMD文件,4.1.1头文件,头文件是以.h为后缀的文件。h即为“head”的缩写。,4.1.2 库文件,库文件是以.lib为后缀的文件Lib即“library”的缩写CCS中库文件的默认路径为:C:CCStudio_v3.3c2000cgtoolslib库文件不仅包含了寄存器的地址与对应标示符的定义,还包含了C/C+运行支持库函数,如系统启动函数_c_int00等。,静态库与动态库的区别(1),lib是编译时需要的,而dll是运行时需要的。如果要完成源代码的编译,有lib就够了。如果要使动态链接的程序运行
2、起来,有dll就够了。当然,在开发和调试阶段,最好两者都有。,静态库与动态库的区别(2),一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件优点是给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。,静态库与动态库的区别(3),在动态库的情况下,有两个文件,一个
3、是引入库(.lib)文件,一个是dll文件,引入库文件包含被dll导出的函数的名称和位置,dll包含实际的函数和数据,应用程序使用lib文件链接到所需要使用的dll文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是dll中所要调用的函数的内存地址,这样当一个或多个应用程序运行时再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。,4.1.3 源文件,源文件是以.c为后缀的文件C即为“source”的缩写源文件是整个工程的核心,包含了所有需要实现的功能的代码,F2812常用的源文件,CMD文件,CMD文件的作用是为代码和数据分配存
4、储空间CMD文件有两种:一种是分配RAM空间,用于将程序下载到RAM空间一种是分配FLASH空间,用于将程序固化到FLASH空间,4.2 通用扩展语言GEL,GEL是General Extended Language的缩写,即通用扩展语言,是一种类似于C的解释性语言。用户可以通过在文件中使用GEL语言来创建函数,从而扩展CCS的功能。通过GEL,可以访问目标板的存储器,并为CCS的GEL菜单添加选项。,4.2.1 GEL语法,GEL语法支持的语句类型,GEL是C语言的一个子集,4.2.2-1 GEL函数的定义,GEL函数定义如下,斜体字表示变量: funcName(parameter1 ,pa
5、rameter2 , parameter n) statements funcName GEL函数名 parameters 有效的GEL参数 statements 有效的GEL语句,定义平方函数,square(a) return a*a;,square(1.5)=2.25;square(3)=9。,定义初始化对话框函数,dialog Init(filename “File to be Loaded”, CPUname “CPU Name”,initValue “Initialization Value”) GEL_Load(filename, CPUname); a=initValue;,4.
6、2.2-2 GEL函数的参数,GEL参数可以是以下任意一种:一个实际的/仿真的DSP目标板符号值。一个数字常量,如果传递的是表达式或者常数值。一个字符串常量。,分析GEL函数参数,Initialize(a,filename,b)targVar=b;a=0;GEL_Load(filename);return b*b;下面是对函数Initialize的正确调用:Initialize(targetSymbol,“C:CCStudio_v3.3MyProjectsgpioDebuggpio.out”,28*4+2.52)。,4.2.2-3 GEL函数的调用,通常可以在可以输入C表达式的任何地方调用一个
7、GEL函数;可以从任何能接受有效C表达式的对话框中调用一个GEL函数;还可以在一个GEL函数中调用另一个GEL函数。,4.2.3 GEL语句,返回语句If-else语句While语句注释语句预处理语句,GEL返回语句,GEL在一个函数里支持标准C的返回语句,其一般形式为:return expression;,GEL if-else语句,GEL支持标准C的if-else语句。通用格式为:if(expression) statement1else statement2,GEL while语句,GEL的while语句类似于标准C的while语句,但是GEL不支持标准C的continue和break语
8、句。通用格式为:while(expression) statement,GEL注释,GEL支持标准C语言的注释。GEL的注释,限用字符/*和*/,可以跨越若干行。,GEL预处理语句,GEL支持标准C的#define预处理关键字,这也是唯一可用的预处理关键字。下面的语句,使预处理器用给定的字符序列取代标识符,其中字符序列前后的空格都不要: #define identifier token-sequence下面的语句(第一个标识符和括号之间没有空格)是一个宏定义,其参数是标识符列表: #define identifier(identifier-list) token-sequence,4.2.5-
9、1 关键字hotmenu,使用关键字hotmenu,将一个GEL函数添加到GEL菜单里,则该函数一旦被选中就立即执行,其语法如下: hotmenu funcname statements ,4.2.5-2 关键字dialog,使用关键字dialog,向GEL菜单添加GEL函数,并为参数输入创建一个对话框。从GEL菜单选择该函数时,会出现一个对话窗口,并提示输入参数。函数定义时紧跟在参数后面的字符串用来在对话窗口里描述参数。其语法如下: dialog funcName(paramName1 “param1 definition”, paramName2 “param2 definition”,)
10、 statements,4.2.5-3 关键字slider,使用关键字slider,向GEL菜单添加GEL函数。当从GEL菜单执行该函数时,就会出现滑动条来控制传递给GEL函数的值。每次移动滑动条,就用新的参数来调用GEL函数,该参数反映的是滑动条的位置。其格式如下:Slider parma_definition(minVal,maxVal,increment,pageIncrement,paraName) statements; ,4.2.7 解读c2812.gel,StartUp函数,文件里的第一个函数就是Startup,顾名思义,就是启动时执行的函数。前面已经讲到过,在Setup Cod
11、e Composer Studio软件中,可以为在系统配置中的每一个处理器指定一个启动GEL文件,例如为F2812指定一个c2812.gel。当CCS启动时,GEL文件将加载到计算机的内存中,如果GEL文件内包含了Startup函数,系统就会自动执行该函数中的内容。,OnReset函数,当执行Debug-Reset命令时, OnReset函数被调用。,OnRestart函数,当执行Debug-Restart命令时,OnRestart函数被调用 。,OnPreFileLoaded函数,当执行File-Load Program操作时, OnPreFileLoaded函数被调用。,OnFileLoaded函数,当执行File-Load Program操作后,OnFileLoaded函数被调用。,OnTargetConnect函数,每一次当CCS和目标处理器建立连接时,OnTargetConnect函数都会被调用。,