




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1DSP如何构建一个完整的工程解析目录1、一个完整的工程有哪些文件构成及其作用2、怎样创建一个新的DSP工程3、通用扩展语言GEL第1页/共41页4.1DSP开发环境、硬件平台DSP开发通常需要软件开发环境和硬件平台。软件开发环境:CCS(Code
Composer
Studio),是TI公司为方便开发人员而设计的软件环境。硬件平台:由仿真器和目标板组成。仿真器的作用是将目标板和PC机连起来,使得您可以在CCS里对目标板上的DSP进行编程,烧写和调试等工作,而目标板是指具有DSP芯片,上电后能保证DSP独立运行电路板,第2页/共41页一个完整的工程由哪些文件构成打开CCS3.3软件前的准备工作1.要确定访问的文件中不含中文字符,因为CCS3.3是英文字符的软件;2.将TMS320F2812例程文件夹中的Gpio文件夹复制到CCS3.3安装路径下MyProjects文件夹里第3页/共41页打开CCS软件后,打开工程的方式有以下两种:一种是点击菜单栏的Project—>Open,另一种方法是左侧Files窗口内,点击“Projects”然后右键,点击“Open
Project”。第4页/共41页打开gpio工程之后,gpio.pjt工程会显示在左侧Files窗口内。点击gpio.pjt左边的加号,工程内部的文件就展现在我们面前了,下面我们来分析一下构成该工程的文件。
首先我们看到的是Include文件夹下面有很多后缀是.h的文件,这就是2812的头文件了,头文件的作用是定义了2812内部寄存器的数据结构。头文件一般情况下不需要修改,如果你需要定义一些在整个工程内都具有作用域的全局变量的时候,可以在头文件中定义这些变量,具体的方法我们以后在例程或项目实践中应该会有介绍。第5页/共41页
然后是libraries下面扩展名为.lib的库文件,它是C语言系统的库文件。第6页/共41页库文件下面是source文件夹,里面的文件都是以.c为扩展名的,顾名思义,就是源文件,也就是我们开发时编写的软件代码都是保存在这些文件中的。第7页/共41页最后是以.CMD为扩展名的文件,这个文件的作用是用来分配存储空间的。由于DSP编译器的编译结果是未定位的,DSP也没有操作系统来定位执行代码,DSP系统的配置需求也不尽相同,因此我们根据实际的需求,自己定义代码的存储位置。打个通俗的比喻,就是我们有一个仓库,现在需要把货物存放到仓库里面去,为了便于日后取用货物,我们将货物分门别类,然后把它们存放到指定的位置去。把哪些货物放到哪个位置的规则,就是我们的CMD文件的内容。CMD文件又分成两种。一种是分配RAM空间的,用来将程序load到RAM内进行调试,因为我们大部分时间都是在调试程序,所以多用这类CMD,gpio工程中的sram.cmd就是用于分配RAM空间的,另一种是分配FLASH空间的,当程序调试完毕后,需要将其烧写到FLASH内部进行固化,这个时侯我们就需要使用这类CMD文件了。第8页/共41页总结1、头文件:以.h为后缀的文件,主要定义了芯片内部寄存器结构、中断服务程序等内容。2、库文件:以.lib为后缀的文件,包含了寄存器的地址和对应标示符的定义,还包含标准C/C++运行支持的库函数。3、源文件:所编写的代码都写在各个源文件中;包含了所有要实现功能的代码,是工程的核心。4、CMD文件:分配RAM空间,用来将下载到RAM中的程序进行调试,是因为DSP编译器编译结果是未定位的,DSP也没有相应系统来执行代码,DSP系统的配置需求也不尽相同,因此需要定义代码的存储位置。第9页/共41页4.2怎样创建一个新的DSP工程
1.打开CCS,点击菜单栏里的Projects,点击New,会跳出新工程设置的对话框,如下图所示。第10页/共41页2、在Projects栏内我们填写工程的名字:hellodsp。检查Location,如果您都是按照默认路径来的,那没有问题,如果不是默认路径,您得手工指定一下文件路径,确认没有问题后点击Finish。我们发现在myprojects文件夹下多了hellodsp文件夹,hellodsp文件夹下生成了hellodsp.pjt文件,而且在CCS左侧的Files栏内,出现了我们刚刚创建的hellodsp.pjt。第11页/共41页
3.根据前面一个完整工程的组成情况的分析,我们首先来准备头文件。由于头文件多数情况下是不需改动的,也就是说大家用的头文件都是一样的,因为是定义2812的内部资源,所以可以将newproject文件夹内的头文件全部复制到hellodsp文件夹。4.将newproject文件夹内的.lib文件和.cmd文件同样复制到hellodsp文件夹。5.下面就剩下源文件了。我们先来分析一下newproject文件夹下各个源文件的内容,以便于我们更好的理解和采用这种文件结构。第12页/共41页F2812常用的源文件序号文件名主要内容1DSP28_Adc.cAD初始化函数2DSP28_CpuTimers.cCPU定时器初始化函数3DSP28_ECan.c增强型Can初始化函数4DSP28_Ev.c事件管理器Ev初始化函数5DSP28_Gpio.c通用I/O模块初始化函数6DSP28_Mcbsp.c多通道缓冲串行口初始化函数7DSP28_Sci.c串行通信接口初始化函数8DSP28_Spi.c串行外围接口初始化函数9DSP28_SysCtrl.c系统控制模块初始化函数10DSP28_Xintf.c外部接口初始化函数11DSP28_XIntrupt外部中断初始化函数12DSP28_InitPeripherals.c包含了其他的外设初始化函数13DSP28_PieCtrl.cPIE控制模块初始化函数14DSP28_PieVect.c对PIE中断向量进行初始化15DSP28_DefaultIsr.c包含了F2812所有外设中断函数16DSP28_GlobalVariableDefs.c定义了F2812的全局变量和数据段程序第13页/共41页
通过上面的分析我们可以看到几个文件非常重要,DSP28_DefaultIsr.C,DSP28_GlobalVariableDefs.C,DSP28_PieCtrl.C,DSP28_PieVect.C,DSP28_SysCtrl.C,把这些未编辑过的文件复制过来。其他的外设相关的文件,这个工程中涉及到哪个外设,就把这个外设相关的源文件复制过来,一起加入工程。接下来就是往工程内添加文件了。首先我们来添加库文件。点击“hellodsp.pjt”,右键,点击“Add
Files
to
Project”,跳出了添加文件的对话框第14页/共41页
在筛选框栏内选择“Object
and
Library
Files”,就会看到RTS2800N.lib,点击并打开,便将库文件添加到工程中来了。第15页/共41页用同样的方法,来添加sources文件夹下的源文件和CMD文件。只是添加源文件时,筛选框的条件是“C++
Source
File(*.cpp;*.cc;*.cxx)”添加CMD文件时,筛选框的条件应当选择”Linker
Command
File(*.cmd;*.lcf)”。创建main函数:点击菜单栏中的’File’,”New”,”SourceFile”,在编辑区域内出现了一个新的Untitled1文件第16页/共41页点击“File”,“Save”,会出现保存文件的对话框。文件名填写“hellodsp”,关键要注意的是保存类型,因为我们现在要建立的是源文件,所以选择“C/C++SourceFlies(*.c*)”,点击保存。第17页/共41页这时,我们看到原来的“Untitled1”变成了“hellodsp”了。我们在hellodsp文件内输入以下内容:然后点击保存,并关闭hellodsp.c文件。再用我们刚才添加文件的方法将hellodsp.c添加到工程中来。第18页/共41页点击工具栏上的“RebuildAll”,对hellodsp.pjt进行编译:编译结果如图所示,出现了一个warning:根据warning的提示是用默认的1024bytes来创建.stacksection,就是堆栈段。点击菜单栏的”Project”,”buildoptions”,弹出编译选项的对话框。选择“Linker”标签,在StackSize(-stack)栏填写“800”,点击确定。第19页/共41页重新编译:第20页/共41页4.3通用扩展语言GEL
GEL是GeneralExtendedLanguage的缩写,即通用扩展语言,是一种类似于C的解释性语言。用户可以通过在文件中使用GEL语言来创建函数,从而扩展CCS的功能。通过GEL,可以访问目标板的存储器,并为CCS的GEL菜单添加选项。第21页/共41页4.3.1GEL语法
GEL语法支持的语句类型序号GEL语法支持的语句1GEL函数,包括函数的定义、参数、调用2Return语句3If-else语句4While语句5GEL注释语句6预处理语句
GEL是C语言的一个子集第22页/共41页GEL函数的定义GEL函数定义如下,斜体字表示变量:
funcName([parameter1[,parameter2
…[,parametern]]]){statements}funcNameGEL函数名
parameters有效的GEL参数
statements有效的GEL语句注:GEL函数定义在文本文件中,其扩展名是.gel。一个GEL文件可以包含多个GEL函数的定义,但是一个GEL函数定义不能嵌套在另一个GEL函数的定义中。第23页/共41页例4-1定义平方函数square(a){returna*a;}square(1.5)=2.25;square(3)=9。在GEL函数square中,并没有指定返回值的类型,也没有说明参数a的类型,这是GEL语言和C语言的区别第24页/共41页例4-2定义初始化对话框函数dialogInit(filename“FiletobeLoaded”,CPUname“CPUName”,initValue“InitializationValue”){GEL_Load(filename,CPUname);a=initValue;}首先,dialog不是指返回值的类型,这个函数里也没有返回值。dialog是关键字,意思是对话框,也就是说当调用函数Init的时候,会弹出一个对话框,该对话框会有3个项,分别是函数的3个参数:filename、CPUName和initValue。每个参数后面紧跟的字符串是对参数的描述。第25页/共41页4.3.2GEL函数的参数GEL参数可以是以下任意一种:一个实际的/仿真的DSP目标板符号值。一个数字常量,如果传递的是表达式或者常数值。一个字符串常量。第26页/共41页例4-3分析GEL函数参数Initialize(a,filename,b){targVar=b;a=0;GEL_Load(filename);returnb*b;}下面是对函数Initialize的正确调用:Initialize(targetSymbol,“C:\\CCStudio_v3.3\\MyProjects\\gpio\\Debug\\gpio.out”,28*4+2.52)。当执行函数Initialize时,参数a被定义为DSP的标示符targetSymbol,参数filename初始化为字符串常量“C:\\CCStudio_v3.3\\MyProjects\\gpio\\Debug\\gpio.out”,参数b通过计算成为常数114.52。这些值在函数中对应参数的地方使用。第27页/共41页GEL函数的调用
通常可以在可以输入C表达式的任何地方调用一个GEL函数;可以从任何能接受有效C表达式的对话框中调用一个GEL函数;还可以在一个GEL函数中调用另一个GEL函数。
第28页/共41页4.3.3GEL语句返回语句If-else语句While语句注释语句预处理语句第29页/共41页GEL返回语句GEL在一个函数里支持标准C的返回语句,其一般形式为:returnexpression;
一个返回语句并不是需要返回一个值,一个没有表达式的返回语句将控制返回到调用处,但并不返回有用的值。这和当函数执行到终点时仍没有遇到返回语句的结果是一样的,与标准C语言不同的是,GEL函数的定义并不需要指定返回值的类型,返回值的类型在程序运行时决定。第30页/共41页GELif-else语句GEL支持标准C的if-else语句。通用格式为:if(expression)statement1elsestatement2
执行if-else语句时,两个语句中只有一个才会执行。statement1和statement2可以是一个单语句,也可以是用括号括起来的多个语句。第31页/共41页GELwhile语句GEL的while语句类似于标准C的while语句,但是GEL不支持标准C的continue和break语句。通用格式为:while(expression)
statement
执行while语句时,先计算表达式expression的值。如果expression的值为真,语句执行,表达式被从新计算。这里的statement可以是单语句,也可以是括号里的多个语句。第32页/共41页GEL注释GEL支持标准C语言的注释。GEL的注释,限用字符/*和*/,可以跨越若干行。
第33页/共41页GEL预处理语句GEL支持标准C的#define预处理关键字,这也是唯一可用的预处理关键字。下面的语句,使预处理器用给定的字符序列取代标识符,其中字符序列前后的空格都不要:
#defineidentifiertoken-sequence下面的语句(第一个标识符和括号之间没有空格)是一个宏定义,其参数是标识符列表:
#defineidentifier(identifier-list)token-sequence第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 华东师范大学《风景园林设计实验古典园林景观设计》2023-2024学年第二学期期末试卷
- 武汉工程大学邮电与信息工程学院《立体设计》2023-2024学年第二学期期末试卷
- 南京师范大学泰州学院《大学美育》2023-2024学年第二学期期末试卷
- 南昌航空大学《电路(下)》2023-2024学年第二学期期末试卷
- 河南检察职业学院《造型基础(工设)》2023-2024学年第二学期期末试卷
- 河源广东河源紫金县专门学校驻校教官招聘7人笔试历年参考题库附带答案详解
- 山东农业大学《组成原理与接口技术》2023-2024学年第二学期期末试卷
- 山西体育职业学院《联合创作预案》2023-2024学年第二学期期末试卷
- 中国矿业大学(北京)《基础造型》2023-2024学年第二学期期末试卷
- 河南2025年河南省工业学校招聘20人笔试历年参考题库附带答案详解-1
- 2025下半年上海事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 天津市和平区2024-2025学年高一(上)期末质量调查物理试卷(含解析)
- 《呼吸》系列油画创作中诗意建构的研究与实践
- 客流统计系统施工方案
- 船舶制造设施安全生产培训
- 全国驾驶员考试(科目一)考试题库下载1500道题(中英文对照版本)
- TSG 07-2019电梯安装修理维护质量保证手册程序文件制度文件表单一整套
- 设备损坏评估报告范文
- 标准和计量管理制度范文(2篇)
- 透析患者心理问题护理干预
- 孕前口腔护理保健
评论
0/150
提交评论