版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3-第3章软件开发基础习题与思考题3.1DSP软件开发流程包括哪些步骤,每个步骤的作用是什么?。【答】:整个开发过程可分为四大步骤。第一步,编制源程序。根据实际需求进行编程开发第二步,产生可执行代码。采用代码产生工具根据源程序生成可执行代码第三步,调试代码。通过各种调试和观察手段验证代码的逻辑正确性,也可验证系统是否满足时限或实时目标。第四步,固化代码。将代码烧写至片内ROM或FLASH,使系统脱离仿真环境独立运行。3.2请说明汇编语言指令有哪些组成部分及各部分的作用。【答】:汇编指令的一般格式如下:操作码目的操作数,源操作数其中操作码字段指示处理器所要执行的操作;操作数字段指示指令执行过程中所需要的数据(或其地址)。3.3试说明汇编语言指令、汇编伪指令和宏伪指令的区别与作用。【答】:汇编语言指令是DSP处理器本身提供的,每条指令对应着处理器的相应操作。汇编伪指令也称汇编器指令,用于为程序提供数据并控制汇编过程,是在汇编期间由汇编器处理的操作。宏伪指令是源程序中一段有独立功能的代码。3.4TMS320C2000系列DSP控制器的寻址方式有哪些?寄存器寻址方式有哪两种形式?【答】:C28xCPU具有四种基本的寻址方式:直接寻址、堆栈寻址、间接寻址和寄存器寻址。另外,还有少数指令使用数据/程序/IO空间立即寻址方式或程序空间间接寻址方式。寄存器寻址方式可分为32位寄存器寻址和16位寄存器寻址。3.5试说明直接寻址方式下操作数地址的生成过程。其最大寻址空间多大?【答】:32位操作数地址的高10位(31:22)为0,22位有效物理地址被分为两部分:数据页面指针DP的值作为页面编号(地址高16位),指令中给出6位的偏移量。直接寻址方式可以访问数据空间的低4M字。3.6堆栈寻址使用什么硬件实现?有哪三种方式?其最大寻址空间多大?【答】:堆栈寻址使用堆栈指针SP实现。堆栈寻址有三种方式:*-SP[6bit]、*SP++和*SP--。堆栈寻址方式可以访问数据空间的低64K字。3.7间接寻址方式的物理地址如何形成?有哪五种方式?其最大寻址空间多大?【答】:32位操作数地址存放在32位的辅助寄存器XAR0~XAR7中。五种方式:*XARn++、*--XARn、*+XARn[AR0]、*+XARn[AR1]和*+XARn[3bit]。间接寻址方式可以访问整个4G字的数据空间。3.8混合编程中常用的汇编指令有哪些?各自的作用是什么?【答】:混合编程中常用汇编指令及其作用如下:CLRC控制位 :控制位复位SETC控制位:控制位置位DINT:禁止可屏蔽中断EINT:允许可屏蔽中断EALLOW:允许访问保护空间EDIS:禁止访问保护空间NOP:空操作3.9什么是COFF目标文件格式,采用这种格式有什么优点?【答】:COFF目标文件格式即公共目标文件格式(CommonObjectFileFormat,简称COFF)。采用该格式,可以灵活地管理代码段和目标存储器,方便程序的编写和移植。不仅允许在连接时自定义系统的存储器映射,而且还支持源文件级的调试。3.10汇编器产生的默认段有哪些?各种段中主要包含什么内容?哪些是初始化、哪些是未初始化段?如何自定义初始化段和未初始化段?【答】:COFF目标文件一般包括三个默认的段:.text段:通常包含可执行代码;.data段:通常包含已初始化的数据;.bss段:通常为未初始化的变量预留存储空间。其中.text和.data为初始化段;.bss为未初始化段。初始化段可以利用.sect伪指令自定义;未初始化段可以采用.usect伪指令自定义。3.11说明汇编器和连接器的作用,它们分别对段做哪些处理?【答】:汇编器的作用是将汇编源文件汇编成COFF目标文件。在汇编过程中,汇编器将各部分代码或数据汇编至相应段内,构成目标文件。连接器的作用是将一个或多个目标文件连接成一个可执行文件。在连接过程中,连接器可以组合汇编器生成的段并将它们重新定位到目标存储器中,从而使目标存储器得到更有效的利用。3.12说明连接器命令文件(.cmd文件)的作用。其中包含哪些信息?如何使用MEMORY伪指令和SECTIONS伪指令实现段的定位和目标存储器分配?【答】:说明连接器命令文件(.cmd文件)的作用是提供连接信息。连接命令文件包含主要信息:定义系统中包含的各种形式的存储器及其占据的存储区地址范围,将可能用到的各输出段定位到所相应存储区。MEMORY伪指令语法如下:MEMORY{PAGEn:name[attr]:origin=const,length=const}其中:PAGE——标识存储器空间(0为程序存储器,1为数据存储器);name——存储区名称;attr——规定存储区属性;origin——存储区起始地址;length——存储区长度。SECTION伪指令语法如下:SECTIONS{name:[property,property,…]}其中name是段的名称;其后是特性列表,主要有两种:装载位置和运行位置。装载位置定义段在存储器中加载的位置,用load定义;运行位置定义段在存储器中运行的位置,用run定义。3.13常用的汇编伪指令有哪些,各自起什么作用?【答】:常用的汇编伪指令根据其功能的不同,可以分为定义段的伪指令、初始化常数的伪指令、引用其他文件的伪指令、汇编时符号伪指令等。定义段的伪指令:用于定义和标识不同类型的段,方便汇编器和连接器进行代码管理。初始化常数的伪指令:用于完成各种类型常数的初始化。引用其他文件的伪指令:用于定义或引用其他文件中的语句或变量。汇编时符号伪指令:用于把数值赋给符号。3.14简述采用C语言和汇编语言开发DSP软件的优缺点。【答】:汇编程序运行速度最快,效率最高,能充分利用DSP芯片所有硬件特性,并能直接控制硬件资源,因此在数学运算、信号处理和高速测控等场合下特别有效。但是由于不同DSP芯片采用的汇编语言不同,因此采用汇编编程比较繁杂,开发周期长,且程序的通用性、可移植性相对较差。采用C语言可大大提高开发速度,以及程序的通用性和可移植性;但是某些情况下(如实现FFT)C/C++代码的效率无法与汇编代码相比,不能最佳利用DSP内部硬件资源,对某些硬件的控制也不如汇编程序方便,甚至无法实现。3.15C/C++编译器的作用是什么?其中的优化器有什么作用?使用优化器时如何避免对某变量进行优化?【答】:C编译器能够将标准C/C++语言程序转换成汇编程序输出。优化器可通过诸如简化循环、软件流水线操作、重组语句或简化表达式,以及将变量重新定位至寄存器等优化操作,提高程序执行速度,缩减程序代码。用volatile关键字对变量进行声明可以避免其被优化。3.16C编译器产生的段有哪些?C编译器产生的段与汇编器产生的段有何不同?【答】:C编译器产生的初始化段包括:.text段、.cinit段、.const段、.econst段和.switch段;未初始化段包括:.bss段、.ebss、.stack段、.sysmem段和.esysmem段。C编译器产生的段与汇编器的不同:初始化段中无.data段,取而代之以.cinit段、.const段、.econst段和.switch段;未初始化段中增加了.ebss、.stack段、.sysmem段和.esysmem段。3.17试说明DSP支持的C/C++数据类型有哪些,各自多少位。【答】:所有的char、short、int类型均为16位。枚举型(enum)也等效为int,为16位有符号整型数。所有长整型数(long)为32位。浮点数(float)和双精度数(double)完全等效,均为32位的单精度浮点数。所有长长整型(longlong)和长双精度数(longdouble)均为64位数。3.18#pragma预编译器指令的作用是什么?C/C++编译器支持哪些常用#pragma指令?【答】:#pragma预编译器指令告诉预处理器怎样对待函数。支持CODE_ALIGN、CODE_SECTION、DATA_SECTION、FAST_FUNC_CALL、FUNC_EXT_CALLED、INTERRUPT、MUST_ITERATE等#pragma指令。3.19使用C处理中断时需要遵循哪些规则?中断服务函数的声明和使用与普通函数有什么不同?定义中断服务函数的方法有哪些?【答】:(1)在处理中断时,必须遵循以下规则:①中断服务程序没有参数;即使声明了参数,也将会被忽略。②中断服务程序理论上可由标准C/C++代码调用。但调用效率极低。③中断服务程序可以处理单个中断或多重中断。④为某中断提供中断服务程序时,必须将其地址赋给相应中断向量。⑤在汇编程序中,要在中断服务程序名称前加下划线。(2)C/C++中断服务程序可以像其他C/C++函数一样具有局部变量和寄存器变量。但声明函数时不能有参数和返回值,且中断服务函数不能直接调用。(3)C/C++中断函数可采用三种方法定义。一是以c_intd(d为数字)为名称定义中断函数。二是利用关键字interrupt定义中断函数。三是利用#pragma指令INTERRUPT定义中断函数。3.20试说明C/C++编译器如何管理C系统堆栈。在函数调用过程中,父函数需要执行哪些任务?子函数需要作出哪些响应?如何访问参数和局部变量?【答】:(1)正常情况下,使用硬件堆栈指针SP管理C系统堆栈,SP指向当前栈顶。帧大小超过63个字时,使用辅助寄存器XAR2作为帧指针,指向当前帧的起始地址。(2)父函数调用子函数时需要执行以下任务。①将子函数无需保存但函数返回后需要用到的寄存器的值压入堆栈。②若子函数返回一个结构体,父函数需要为该结构体分配空间,并将所分配空间的地址作为第一个参数传递给子函数。③传递给子函数的参数首先存放于寄存器中。④未放入寄存器的其他参数以逆序压入堆栈(最左边的参数最后进栈)。⑤调用子函数前,父函数必须将堆栈指针SP对齐偶地址。⑥父函数使用LCR指令调用子函数。⑦堆栈对齐函数边界。(3)子函数执行以下任务。①保护入口环境的寄存器变量。②建立局部帧。③堆栈与函数边界对齐。④处理结构体变量。⑤子函数执行函数代码。⑥传递返回值。⑦撤消局部帧。⑧恢复先前保存的寄存器的值。⑨子函数使用LRETR指令返回。3.21为什么需要采用C/C++和汇编进行混合编程?常用混合编程方法有哪四种,如何实现?【答】:(1)汇编程序运行速度快,效率高,且程序的通用性、可移植性相对较差。C/C++尽管通用性、可移植性好,但代码效率低,速度也慢。故开发DSP软件时,可将C/C++和汇编结合起来,进行混合编程。(2)常用的混合编程方法有以下四种:①C/C++使用普通函数调用机制调用汇编程序模块;②C/C++使用快速函数调用机制调用汇编程序模块;③直接在C/C++中嵌入汇编语句;④在C/C++中访问汇编变量。3.22分别采用普通函数调用和快速函数调用两种混合编程实现a=|3|。要求主程序用C实现,求绝对值子程序用汇编语言编写;然后在C主程序中调用汇编子程序。【答】:(1)普通函数调用机制C主程序:longabs_long(long);voidf(){longx=0,y=0,x1=0,y1=0;intk;x=-67000;y=76000;y1=abs_long(y);x1=abs_long(x);while(1){k=0;}汇编子程序.global_abs_longabs_long:ABSACCLRETR(2)快速函数调用机制C主程序:#pragmaFAST_FUNC_CALL(abs_long);/*声明对abs_long汇编函数的调用采用快速调用机制*/longabs_long(long);voidf(){longx=0,y=0,x1=0,y1=0;intk;x=-67000;y=76000;y1=abs_long(y);x1=abs_long(x);while(1){k=0;}汇编子程序.global_abs_longabs_long:ABSACCLB*XAR73.23简述在CCS中创建工程和调试程序的操作步骤。【答】:(1)目标代码的生成第一步,新建工程。单击Project→New,在弹出的单击Project→NewCCSProject,在弹出的NewCCSProject对话框中输入工程名称和存放路径;则会在设定路径下创建的与工程同名的文件夹下,生成一个空工程。第二步,向工程添加文件。首先将各种源文件和辅助文件复制至工程所在的文件夹下;然后单击Project→AddFilestoProject,在弹出的对话框中将除头文件之外的其他文件添加到工程中。第三步,生成可执行代码。单击BuildProject或者快捷工具对整个工程进行编译、汇编和连接。若代码有错误,可根据给出的错误信息进行修改;若代码无误,则会在工程所在文件夹下的Debug文件夹下生成可执行文件。(2)目标代码的加载单单击Run→Debug或者快捷工具,即可将可执行文件加载的目标器件中。文件加载后,CCS将自动进入调试视图。(3)目标代码的调试文件加载后,可使用各种观察和调试方法对代码进行调试。=1\*GB3①选择观察方法调试过程经常需要借助各种观察手段辅助进行。常用的观察方法包括观察CPU寄存器(Registers)、变量(Variables)和表达式(Expressions)、存储器(MemoryBrowser)。另外,还可以观察图像(Graph)。②选择运行方法选择相应的运行方法调试程序并进行观察。Run菜单中有各种运行方法选项,Resume可使代码全速运行;StepInto和StepOver选项可单步运行代码,同时观察各观察窗口中相应量的变化。3.24试说明在CCS集成开发环境中查看寄存器、存储器和变量的方法及其具体操作步骤。如何使用查看图像工具?【答】:(1)寄存器、存储器和变量的观察选项都包含在View菜单中。其中寄存器和变量为调试视图中默认打开的观察手段。若需观察寄存器,可以直接在Registers观察窗口展开查找寄存器名称。若需观察程序中某个变量,首先用光标选中该变量,然后右键选中“AddWatchExpression”将该变量添加到观察窗口。如需观察存储器:单击View→MemoryBrowser,即可打开存储器观察窗口;然后在该窗口中地址栏输入感兴趣的地址,即可观察关注的存储单元。查看图像工具的使用;首先单击Tools→Graph→SingleTimey打开GraphProperty对话框;然后在该对话框中设置图像标题(G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 永寿县2025年三年级数学第二学期期末教学质量检测试题含解析
- AI在柔性电子学中的应用
- 2026年1月试卷8年级(数学)期末复习易错题(59个考点)(浙教版)(解析版)
- DB37∕T 1207.6-2026 规模化养殖场生物安全规范 第6部分:SPF鸭场
- 2025-2026学年高二下学期语文试题(解析版)
- 2026年小班教学活动与实施策略研究
- 2026年现代企业管理调查报告
- 2026年职业道德正反人物事例
- 2026年安全检查员操作规程
- 2026年社区安全问题研究及防范工作
- 2026年湖南省高考物理试卷
- 2026内蒙古鄂尔多斯市本级事业单位第二批引进高层次和紧缺人才28人备考题库及答案详解一套
- 2026福建福州市建总科技文化有限公司招聘9人笔试参考题库及答案详解
- 理论联系实际谈一谈你对科学发展观中的全面协调可持续的认识(一)
- 2026年无人机航拍理论试题库(附含参考答案)
- 2026年春季湖南长沙市开福区捞刀河镇白霞中学八年级毕业会考模拟练习卷(四)生物学(含答案)
- 2026中国兵器审计中心(北京中心)招聘9人笔试备考题库及答案解析
- 2026年初中差异化教学与分层作业设计专题讲座
- 上海浦东公安分局文员招聘考试试题及答案
- 贵州省2026届高三语文一模试卷(附答案解析)
- 2026年沈阳联考面试题及答案
评论
0/150
提交评论