第三章 DSP集成开发环境_第1页
第三章 DSP集成开发环境_第2页
第三章 DSP集成开发环境_第3页
第三章 DSP集成开发环境_第4页
第三章 DSP集成开发环境_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

1、1,4.2 DSP集成开发环境,CCS及DSP/BIOS的原理与应用 CCS: code composer studio,2,3.1 CCS的功能特点与安装 3.2 基于CCS开发DSP软件 3.3 利用CCS调试应用程序 3.4 CCS高级工具的使用 3.5 DSP/BIOS的功能 3.6 DSP/BIOS的高级应用 3.7基于CCS的DSP片级支持库,3,概述,TMS320C6000 DSP有一套完整的开发系统 C/C+ compiler:.c.asm 将ANSI C或C+语言编写的程序转换为面向DSP的汇编代码 直接利用高级语言实现DSP软件的初步设计,缩短开发周期 Assembly c

2、ompiler: .sa .asm 允许开发者编写线性汇编代码而无需考虑流水线结构和寄存器分配,它可以自动分配寄存器以及利用循环优化将线性汇编转化为利用软件流水线的高度并行汇编代码 Assembler: .asm .obj 将汇编代码翻译成DSP可以执行的机器语言 Linker: .obj .out 将目标文件组合成一个单独的可执行目标模块。当它创建可执行模块时,分配段到目标系统所配置的内存,重新分配符号和段到最终地址,并且解决未定义符号的外部引用的问题。,4,C debugger 是一种先进的编程接口协助编程者开发、测试C6x的C程序以及汇编程序,也是C6x simulator 和emula

3、tor 的接口。 调试器通过图形界面直观地将代码、数据和命令分开显示。动态的性能分析工具提供了对代码执行进行统计的手段,可以直接反馈程序的性能进而确定和解决代码瓶颈。 Simulator 通过模拟DSP硬件对代码的执行,方便用户进行软件的开发和调试。用户可以在没有目标板的情况下编写软件,有限的模拟一些硬件功能。 Emulator 基于边界扫描协议的系统仿真工具,用于系统集成阶段的软件和硬件联调。通过JTAG接口,可以访问DSP器件的全部内存和寄存器,方便有效的硬件对软件执行的调试工作。 DSK入门开发套件(DSK) 代码开发工具,包括基于TMS320C6000DSPs的板卡,软硬件仿真环境可以

4、与 PC通信,很适合初步接触DSP的学习者入门和进一步熟悉提高,5,CCS(Code Composer Studio)功能简介,CCS是一个基于Windows的DSP集成开发环境;加速和提高程序员创建与测试实时嵌入式信号处理系统的开发过程,CCS是一个完整的DSP集成开发环境;也是目前最优秀、最流行的DSP开发软件之一,CCS为TI DSP家族的C2000(版本2.2以上)、C5000和C6000系列DSP提供DSP/BIOS功能,而在C3x中是没有DSP/BIOS功能的,CCS具有实时、多任务、可视化的软件开发特点,已经成为TI DSP家族的程序设计、制作、调试、优化的利器,6,(1) 集成

5、可视化代码编辑界面,可直接编写C、汇编、.h文件、.cmd文件 (2) 集成代码生成工具,包括编辑器、优化C编译器、连接器等 (3) 基本调试工具,如装入执行代码(.out文件),查看寄存器、存储器、反汇编、变量窗口等,支持C源代码级调试。 (4) 支持多DSP调试 (5) 断点工具,包括硬件断点、数据空间读/写断点、条件断点等 (6) 探针(Probe)工具,可用于算法仿真、数据监视等。 (7) 剖析(Profile)工具,可用于评估代码执行的时钟数,CCS主要包含了以下功能,7,数据的图形显示工具,可绘制时域/频域波形、眼图、星座图、图象等,并可自动刷新 提供GEL工具,用户可以编写自己的

6、控制面板/菜单,方便直观地修改变量,配置参数等 支持RTDX技术,可在不中断目标系统运行的情况下,实现DSP与其他应用程序的数据交换 开放式的Plug-in技术,支持其他第三方的ActiveX插件,支持包括软仿真在内的各种仿真器(只需安装相应的驱动程序) 提供DSP/BIOS工具,增强对代码的实时分析能力(如分析代码执行的效率)、调度程序执行的优先级、方便管理或使用系统资源(代码/数据占用空间、中断服务程序的调用、定时器使用等),从而减少开发人员对硬件资源熟悉程度的依赖性,8,CCS是运行在一系列仿真设备(软仿真器Simulator、硬仿真器Emulator、DSP入门套件DSK、DSP评估板

7、EVM)上的一个集成的开发环境。任一种仿真设备可形象地将其看做计算机主板上的扩展设备,在它们正常工作之前都需要在操作系统中为其安装驱动程序。,2. 为CCS安装设备驱动程序,彭启琮 管庆等编著 DSP集成开发环境-CCS及DSP/BIOS的原理与应用 电子工业出版社 2005年,9,10,11,3.2 基于CCS开发DSP软件,基于CCS开发DSP软件是一个软件工程,需要先建立一个工程文件(*.pjt),所有有关该项目的信息都会存储在这个工程文件中。即包含源代码文件(C、C+、ASM)、头文件、支持库、用户库、内存定位文件(.cmd)以及DSP/BIOS配置文件(.cdb)。,若用C开发,需将

8、C的标准支持库rts6700.lib(用于64KB以内的程序调用)或rts6700e.lib(用于大于64KB、使用FCALL指令的函数调用) 。,内存定位文件(.cmd)定义了各代码段或数据段在存储器中的位置。将内存定位文件(.cmd) 添加到工程文件。,“Build all”(完成编译和连接)“Load”(将生成的.out文件装入DSP的片内或片外扩展存储器) 进行调试、分析和统计工作,12,实 例,1. CCS的基本操作-开发一个简单的程序 (1)准备工作 (2)先建立一个工程文件(*.pjt):以volume为例 (3)向工程添加各类型文件:源文件、cmd文件和库文件 (4)查阅代码

9、(5)建造(build)和运行(run)程序 (6)改变建造选项和修改语法错误 (7)使用断点和观察窗,13,(1)准备工作:8个需要复制的文件,提示:在使用CCS进行DSP软件项目开发时,都要养成为每个项目建立一个目录的习惯。,此例:项目volume 在目录C:timyprojectsvolume1下,14,(2)先建立一个工程文件:ProjectNew Project creation,15,(3-1)添加源文件: .c, .asm Project Add Files to Project 选择文件类型 在“volume.pjt”上单击鼠标右键Add Files (3-2)添加内存定位文件

10、 .cmd 该文件定义了各代码段或数据段在存储器中的位置 添加方法同“添加源文件” 在添加文件对话框的“文件类型”下拉列表中要选择“Linker Command File(*.cmd) (3-3)若源文件是基于C语言编写的,需向工程里添加运行支持库文件(rts6700.lib) 该文件存放在CCS的安装目录“/c6000/cgtools/lib”下 在添加文件对话框的“文件类型”下拉列表中要选择“Object and Library Files (*.o*, *.l*) (3-4)添加头文件 在工程名上单击鼠标右键,选择“Scan All Dependencies”,这样.c文件包含的头文件“

11、volume.h”将出现在“Include”文件夹中,(3)向工程添加各类型文件,16,17,展开工程文件列表,Vectors.asm是中断向量表,包含了汇编指令代码,用于在系统产生“RESET”中断时,跳转到C程序的入口点“c_int00”,在编写更为复杂的用户程序时,可以在Vectors.asm文件里自行定义合适的中断向量表,或者使用DSP/BIOS自动产生中断向量表,头文件实际上不用人工添加,在建造(Build)工程时,CCS本身可以自动完成相关扫描,18,(4)查阅代码:在文件名上双击鼠标,即可在CCS编辑窗内看到源代码,19,主函数进入一个无限循环,在循环内部调用了2个函数data

12、IO()与processing(),函数processing()对输入缓冲区的每个采样值乘以一个增益值“gain”,并将结果存放到缓冲区中。该函数同时调用汇编程序load(),该函数会根据processing()传递过来的参数processing Load 来消耗指令周期,模拟复杂信号处理算法在时间上的消耗。,函数data IO()不做任何实际操作而直接返回,20,(5)建造(build)和运行(run)程序,Building:compiling, assembling, linking三个独立步骤按顺序联合运行。 在CCS中: (1) 主菜单:Project “rebuild all” (2

13、) 工具条图标: (rebuild all) 建造完毕,CCS生成一个“.out”文件,该文件默认存放在所建工程目录下的“ debug”目录内 装载该“.out”文件:File “ load program” ” 所建的工程目录” “debug” “volume.out” 打开 CCS装载完毕该.out文件后,会自动弹出disassembly窗口,显示构成源代码的反汇编指令。,21,建造完毕的CCS窗口及.out文件的装载,22,装载完毕后自动弹出的反汇编窗口:显示构成源代码的反汇编指令,显示程序在运行时的输出信息,23,运行(run)程序: (1) Debug “go main”:程序从主函

14、数开始,停留在main( )处,并会有一个黄色的箭头标记在当前要执行的C语言代码 (2)View Mixed source/ASM:同时看到C语言代码和对应编译生成的汇编代码,并且有一个绿色的箭头标记在当前要执行的汇编代码。Page 20 (3) Debug “run”,或,工具条图标 (run): 让程序全速执行。底部的“Stdout”标准输出窗口给出程序运行的输出信息。,“volume example started”证明程序能够正常运行,24,黄色的箭头标记在当前要执行的C语言代码,绿色的箭头标记在当前要执行的汇编代码,混合观察源文件与反汇编时,CCS禁止编辑,单击鼠标后,按F1键可以得

15、到指令的帮助信息,预处理命令“#ifdef ”和“endif”包含的代码段并没被执行,因为没有定义符号“FILEIO”,25,CCS设置预处理符号 ProjectBuild option Compiler Processor Define Symbols _DEBUG;FILEIO Tab键编译命令中会新增一个-d “FILEIO”,“Rebuild All”之后,改变的选项才会生效,26,使用断点与观察窗:检查某个变量在程序运行中的取值变化情况,或F9:出现红点来标记,ViewWatch Window:CCS弹出一个独立的区域,用于显示运行时所观察的变量值,27,显示当前执行的函数的所有局部

16、变量,Watch1Name列的表达式图标输入要观察的变量名回车,观察窗口,观察dataIO的值,观察结构变量,str,28,利用CCS调试应用程序,程序的调试过程和优化过程一般会占用整个开发周期60%以上的时间,调试有非常多的技巧和手段,但都必须要有良好的工具才能实现,CCS除了提供大多数通用开发环境都具备的基本调试工具(存储器与寄存器的查看与修改、断点、性能分析)外,还提供在嵌入式开发中非常游泳的事件检测、探针等工具,以及在信号处理类应用能够中非常实用的图形化工具,为了调试应用程序,首先必须将程序加载到目标系统中,29,程序调试的基本操作,使用反汇编窗口:Viewdisassembly 使用

17、存储器窗口:Viewmemory 观察CPU寄存器:Viewregistor 加载COFF文件 单步执行 运行 复位处理器:Debug reset CPU 内存操作 变量操作 编辑命令行 观察调用堆栈:Viewcall stack 保存和恢复工作空间,30,存储器/变量的查看与修改,调试工具的最基本功能之一 查看和修改寄存器、程序存储器、数据存储器、I/O存储器 1. CPU寄存器的查看与修改 debug halt:停止程序运行 view register core registers:工作区底部打开一个CPU寄存器窗口,其中列出了CPU 所有寄存器的值。 debug run:程序继续运行 C

18、PU寄存器的值肯定会发生改变,只有再用halt指令停止程序运行后才会看到 发生变化的寄存器以红色显示 修改寄存器的值: 方法1:双击想要修改的寄存器 方法2:右击快捷菜单“edit register”命令,31,各种显示都是在程序运行停止或碰到断点、探针点等地方才会刷新,32,2. 外设寄存器的查看与修改,在DSP芯片内部有各种外设,如定时器、SDRAM、McBSP等。对外设的控制和运行都是以读写外设控制寄存器的方式完成的,view register Peripheral registers,33,3. 存储器的查看与修改 debug halt:停止程序运行 view memory:打开“me

19、mory window option”对话框 修改存储器的值: 方法1:双击想要修改的存储器单元 方法2:edit memory edit,给出一个与此段存储器内容相关的名字,输入需要显示的存储区的起始地址,输入显示数据的Q值,选择显示数据的格式,以IEEE格式显示浮点数,希望使用参考缓冲区(位于主机上CCS的内部缓冲区,用做DSP中一段存储器块的镜像,34,4. 变量的查看与修改 变量具有特定的数据结构,而不仅仅是一串二进制数 快速查看变量值:将鼠标移到源文件的某一变量处停留,会出现一个小小的工具提示窗口 快速查看和修改变量值:右击快捷菜单“quick watch”命令 view watch

20、 window:打开变量查看和修改窗口 底部有2个标签:“watch locals”和“watch 1” “watch 1”的操作:添加变量;修改标签名字,35,断点工具的使用,使用断点是程序调试的基本手段 CCS的断点工具包括软件断点、硬件断点 程序运行过程中如果碰到断点,就会暂时停止运行,回到调试状态。用户可以通过查看变量、图形等方法,发现程序中的错误 1. 软件断点:最常用 1) 在已经被加载到程序存储器中的程序的某一行上设置断点。 2) 断点的设置:将光标移到源程序文件的某一行 右击快捷菜单的“toggle breakpoint” 工具栏的“断点”按钮 debug breakpoint

21、,本行左边会出现红色的断点标记,36,3) 重新启动程序运行:debug run 程序停在断点处,此行左边显示一个黄色小箭头 自动刷新寄存器、存储器、变量查看窗口和图形显示窗口 4) 注意: 软件断点实际上通过修改断点处的指令来达到中断运行的目的。 断点必须位于程序存储器,而且必须是在可由CCS修改的存储器如RAM中 为了不破坏处理器流水线,不要将断点设置在属于跳转语句的指令上;不要将断点设置在块重复语句的倒数第1条和第2条指令上,37,2. 硬件断点: 1) 不改变目标程序,适合于在ROM存储器中设置断点或设置存储器存取断点 2) 将硬件仿真器通过JTAG接口与主机相连,探针点(Probe

22、point)工具的使用,38,以sinwave.pjt为例:titutorialtargetsinewave sinwave.pjt,39,1. ProjectBuild:完成编译连接,得到.out文件。注意在Build输出窗口中应显示没有错误和警告,2. FileLoad program:加载程序,然后在合适的目录下选择打开sinewave.out文件,程序加载后会自动打开一个反汇编窗口,绿色箭头指向_c_int00,c_int00不是用户代码的一部分,而是C语言引导代码的入口,C语言程序都会在连接时自动加上引导代码,这些引导代码一般来说不需要调试,需要调试的是用户代码。对C语言程序来说,就

23、是从main()函数开始的地方,40,3. Debug go main:自动打开sine.c源文件窗口,并有黄色箭头停在main()函数入口处。从这里开始就可以调试用户程序,4. Debug run:程序开始自由运行。,由于没有连接I/O和图形显示,此时程序虽然在运行,但是看不到任何处理结果。这是因为在mian()函数中有一个无限循环,程序会一直在此循环中运行。,5. Debug Halt:中断程序的运行,但是底部会打开一个stdout标准输出窗口,并在其中输出“SineWave example started.”。这是由main()函数中的puts( “SineWave example st

24、arted.n”)语句运行的结果,41,探针点(Probe point)工具的使用,程序运行到探针点处会执行特定的操作(刷新图形、文件I/O) 文件I/O可以完成目标系统的DSP存储器(程序、数据或I/O存储器)与主机上的文件之间的数据交换 1. 重新开始调试程序:debug restart 2.切换到源程序窗口,将光标移到某一行,设置探针点 右击快捷菜单的“toggle Probe point” 工具栏的“探针点”按钮 debug Probe point 3. File file I/O:file I/O针对DSP而言 1)文件输入从一个数据文件读取波形到DSP内部的缓冲区(currentB

25、uffer.input,长度为100字),本行左边会出现兰色的菱形探针点标记,42,43,设置主机上的什么文件与DSP的什么存储器交换数据,在程序中的什么地方交换数据,输入和输出是针对DSP而言的,2) 在File input选项卡下: Add file titutorialtargetsinwavesine.dat 在Address中填入DSP中缓冲区的地址(currentBuffer.input) 在length中填入长度(100) Add probe point probe point Connect下拉列表框中选择sine.dat 按“确定”后发现probe中显示“connected”

26、 Wrap around: 读到文件结尾时继续从文件头读取,44,3) 运行程序: debug run 检查变量currentBuffer,可以发现input数组中的值已经发生变化 currentBuffer.input中的数据也可以以波形显示,45,在程序的调试过程中,可以用这样的方法给DSP程序一个特定的输入数据,来测试程序的功能。这样的数据一般是主机上变成产生的,具有特定的格式,Viewwatch window watch 1,46,4. CCS的File I/O可以使用两类数据文件: 1) 文本格式(.dat): sine.dat,2) 二进制格式(.out): 与DSP上的可执行程序

27、的格式一样,为COFF(common Object File Format)格式的目标文件 文件中的内容以段的形式保存,可执行程序中有代码段、数据段 文本格式的数据文件中只有一个数据段,47,图形工具的使用,在CCS中可以将数据按图形化方式显示出来,比较直观 CCS提供了丰富的图形可视化工具,用于完成时域波形、频谱、图象、星座图、眼图等的显示 数据准备好后选择 ViewGraph,设置相应的显示类型和显示参数,即可按希望的图形类型显示数据,ViewGraph,,48,l 显示类型(Display Type)。单击下拉菜单,点击所需的显示类型,则Time/Frequency对话框(参数设置)相应

28、随之变化。,l 视图标题(Grph Title):定义图形视图标题。,l 起始地址(Start Address)。定义采样缓冲区的起始地址。当图形被更新时,采样缓冲区内容亦更新显示缓冲区内容。此对话栏允许输入符号和C表达式。当显示类型为“Dual Time”时,需要输入两个采样缓冲区首地址。,采集缓冲区尺寸(Acquisition Buffer Size)。用户可以根据所需定义采样缓冲区的尺寸。例如当一次显示一帧数据时,则缓冲区尺寸为帧的大小。若希望观察串行数据,则定义缓冲区尺寸为1,同时允许左移数据显示。,l 索引递增(Index Increment)。定义在显示缓冲区中每隔几个数据取一个采

29、样点。,49,l 显示数据尺寸(Display Data Size)。定义显示缓冲区大小。取决于”显示类型”选项。对时域图形,显示缓冲区尺寸等于要显示的采样点数目,并且大于等于采样缓冲区尺寸。若显示缓冲区尺寸大于采样缓冲区尺寸,则采样数据可以左移到显示缓存显示。对频域图形,显示缓冲区尺寸等于FF帧尺寸,取整为2的幂次。,l Q值(Q-Value)。采样缓冲区中的数始终为16进制数,但是它表示的实际数取值范围由Q值确定。Q值为定点数定标值,指明小数点所在的位置。Q值取值范围为015,假定Q值为xx,则小数点所在的位置为从最低有效位向左数的xx位。,l 采样频率(Sampling Rate(Hz)

30、。对时域图形,此参数指明在每个采样时刻定义对同一数据的采样数。假定采样频率为xx,则一个采样数据对应xx个显示缓冲区单元。由于显示缓冲区尺寸固定,因此时间轴取值范围为0(显示缓冲区尺寸/采样频率)。对时域图形, 此参数定义频率分析的样点数。频率范围为0采样率/2。,50,l 数据绘出顺序(Plot Data From)。此参数定义从采样缓冲区取数的顺序为从左到右:采样缓冲区的第一个数被认为是最新或最近到来数据; 从右到左: 采样缓冲区的第一个数被认为是最旧数据。,l 左移数据显示(Left-Shifted Data Display)。此选项确定采样缓冲区与显示缓冲区的哪一边对齐。可以选择此特性

31、允许或禁止。若允许,则采样数据从右端填入显示缓冲区。每更新一次图形,则显示缓存数据左移,留出空间填入新的采样数据。注意显示缓冲区初始化为0。若此特性被禁止,则采样数据简单覆盖显示缓存。,l 自动定标(Autoscale)。此选项允许Y轴最大值自动调整。若此选项设置为允许,则视图被显示缓冲区数据最大值归一化显示。若此选项设置为禁止,则对话框中出现一新的设置项“Maximum Y-Value”,设置Y轴显示最大值。,51,l 直流量(DC Value)。此参数设置Y轴中点的值,即零点对应的数值.对FFT幅值显示,此区域不显示。,l 坐标显示(Axes Display)。此选项设置X,Y坐标轴是否显

32、示。,l 时间显示单位(Time Display Unit)。定义时间轴单位.可以为秒(s),毫秒(ms),微秒(s)或采样点。,l 状态条显示(Status Bar Display)。此选项设置图形窗口的状态条是否显示。,l 幅度显示比例(Magnitude Display Scale)。有两类幅度显示类型:线性或对数显示(公式为20log(X)。,l 数据标绘风格(Data Plot Style)。此选项设置数据如何显示在图形窗口中,Line是数据点之间用直线相连; Bar是每个数据点用竖直线显示。,52,l 栅格类型(Grid Style)。此选项设置水平或垂直方向底线显示。有三个选项:

33、 No Grid:无栅格; Zero Line:仅显示0轴; Full Grid:显示水平和垂直栅格。,l 光标模式(Cursor Mode)。此选项设置光标显示类型。有3个选项: No Cursor:无光标; Data Cursor:在视图状态栏显示数据和光标坐标; Zoom Cursor:允许放大显示图形。方法:按住鼠标左键,拖动,则定义的矩形框被放大。,53,程序剖析工具-Profiler,CCS提供了代码剖析工具Profiler: (1)统计某个函数或者某一块代码使用了多少个时钟周期,从而对关键函数进行优化 (2) 统计程序运行中的中断、子程序调用、程序分支、返回、指令预取等信息,要进

34、行代码优化,首先必须找到程序中的瓶颈所在,即占用了大部分CPU时间的代码,代码优化是程序开发过程中非常重要的步骤,Profiler 的使用 打开工程 Build 通过装载.out文件CCS自动打开反汇编窗口,并停在c_int00处,54,一、剖析时钟及其设置,剖析时钟是程序在剖析状态下,程序连续或者单步运行时的时钟周期的计数,随着程序的运行相应增加,剖析时钟可以被开启也可以被关闭。 ProfilerEnable Clock,在剖析过程中,剖析时钟的查看、修改: ProfilerView Clock,剖析时钟窗口,窗口中显示了时钟的计数值,双击时钟的计数值:复位置0,55,剖析时钟的设置:ProfilerClock Setup,选择需要剖析的事件,填入执行单周期指令的时间(ns),输入流水线校正值,在整个剖析过程中,剖析时钟的值不停累加,除非主动手工复位置0,每次运行时遇到断点或单步停下,剖析时钟自动置0。所以在自动复位方式下得到的剖析时钟数据并不正确,一般使用手工复位,56,二、剖析代码的设置,代码的剖析过程是以剖析会话(session)的形式组织的: ProfilerStart New Session,输入剖析会话的名字;为每个剖析会话取易于辨别的名字,Files:以源文件列出统计数据; Functions:用于剖析程序中的函数;Ranges:用于

温馨提示

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

评论

0/150

提交评论