DSP程序优化 DSP CCS
CCS优化简介
Code Composer Studio (Optimization)Enry Shen Texas Instruments8th Texas Instruments Developer Conference India 30 Nov - 1 Dec 2005, BangaloreAgendaOverview of Application Code Tuning Compiler Consultant Code Size Tune Tool Cache Tune Tool1CCS Optimization Tool TutorialOverview of Application Code Tuning Compiler Consultant ToolIntroduction DemonstrationCode Size Tune ToolIntroduction DemonstrationCache Tune ToolIntroduction DemonstrationCCStudio Platinum EditionOne environment for all platformsMulti-platform IDE meets evolving developers needs OEMs realize substantial development tool savingsEasy To Use IDEExponential productivity improvementsUp to 80% faster debug via connect/ disconnect Single keystroke back-step with RewindMaximize TI DSP performance entitlementCode optimization and tuning tools Updated C compilers for each platformIntegrated CodeWright editor Lock versions of compiler and DSP/BIOS per design2Compiler Build OptionsNearly one-hundred compiler options available to tune your code's performance, size, etc. Following table lists most commonly used options:Options -mv6700 -mv67p -mv6400 -mv6400+ -fr <dir> -fs <dir> Debug Optimize (release) -g -ss -o3 -kDescription Generate 'C67x code ('C62x is default) Generate 'C672x code Generate 'C64x code Generate 'C64x+ code Directory for object/output files Directory for assembly files Enables src-level symbolic debugging Interlist C statements into assembly listing Invoke optimizer (-o0, -o1, -o2/-o, -o3) Keep asm files, but don't interlistCompiler Build OptionsNearly one-hundred compiler options available to tune your code's performance, size, etc. Following table lists most commonly used options:Options -mv6700 -mv67p -mv6400 -mv6400+ -fr <dir> -fs <dir> Debug Optimize (release)Description Generate 'C67x code ('C62x is default) Generate 'C672x code Generate 'C64x code Generate 'C64x+ code Directory for object/output files Directory for assembly files-g Enables src-level Debug and Optimizesymbolic debugging options conflict -ss Interlist C statements into assembly listing with each other, therefore-o2/-o, -o3) they should -o3 Invoke optimizer (-o0, -o1, not be used asm files, but don't interlist -k Keep together3Two Default Configurations-g -fr"$(Proj_dir)\Debug" -d"_DEBUG" -mv6700 -o3 -fr"$(Proj_dir)\Release" -mv6700For new projects, CCS automatically creates two build configurations: Debug (unoptimized) Release (optimized) Use the drop-down to quickly select build config.Two Default ConfigurationsAdd/Remove build config's with Project Configurations dialog (on project menus)Edit a configuration: 1. Set it active 2. Modify build options 3. Save project4Two Default ConfigurationsNow You can build with your new configurationRecommended Development FlowStartNoEditCompile -gDebugWorks? YesNo Done Goals Met? ProfileYesCompile -oDebug first. Tune second. After making sure you program is logically correct, We can use compiler optimizer to optimize.5First, Turn on the OptimizerAs we have seen, the optimizer can work miracles, but… What else can we do with C after turning on the optimizer? Options -mv6700 -mv67p -mv6400 -mv6400+ -fr <dir> -fs <dir> Debug Optimize (release) -g -ss -o3 -k Description Generate 'C67x code ('C62x is default) Generate 'C672x code Generate 'C64x code Generate 'C64x+ code Directory for object/output files Directory for assembly files Enables src-level symbolic debugging Interlist C statements into assembly listing Invoke optimizer (-o0, -o1, -o2/-o, -o3) Keep asm files, but don't interlistProvide Compiler with More InsightWhy you program still not optimized even use –o3 option to turn on the optimizer?1. 2. 3. 4. 5.Restrict Memory Dependencies (Aliasing) Program Level Optimization: -pm –op2 -o3 #pragma UNROLL(# of times to unroll); #pragma MUST_ITERATE(min, max, %factor); #pragma DATA_ALIGN(variable, 2n alignment); Like –pm, #pragmas are an easy way to pass more information to the compiler The compiler uses this information to create "better" code #pragmas are ignored by other C compilers if they are not supported6Memory Alias DisambiguationWhat happens if the function is called like this? fcn(*myVector, *myVector+1) void fcn(*in, *out) { LDW *in++, A0 ADD A0, 4, A1 STW A1, *out++ }in a b c d e ...in + 4Can reorder memory references only when they are not aliases Aliases access same memory location Sometimes Compiler cannot figure out two pointers point to independent addresses or not Keyword restrict says pointer gives sole access to underlying memoryMemory Alias DisambiguationWhat happens if the function is called like this? fcn(*myVector, *myVector+1)in a in + 4 b void fcn(*in, *out) c { LDW void *in++, A0 *restrict in, short *out) fcn(short d ADD A0, 4, A1 STW A1, *out++ e } ...Can reorder memory references only when they are not aliases Aliases access same memory location Sometimes Compiler cannot figure out two pointers point to independent addresses or not Keyword restrict says pointer gives sole access to underlying memory7Program Level Optimization (-pm)-pm is critical in compiling for maximum performance -pm creates a temp.c file which includes all C source files, thus giving the optimizer a program-level optimization context -opn describes a program's external referencesProgram Level Optimization (-pm)-pm requires the use -o3 -pm requires the use -o3 Cannot be used as file or function specific Cannot be used as file or function specific option option Without knowing which -opn option to use, TI Without knowing which -opn option to use, TI couldn't use couldn't use -pm in default Release config -pm in default Release config Unfortunately, -pm cannot provide optimizer Unfortunately, -pm cannot provide optimizer with visibility into object code libraries with visibility into object code libraries External References: External References: For example, ififyour program modifies aa For example, your program modifies global variable from another code module, - global variable from another code module, op2 cannot be used op2 cannot be used Similarly, ififyour code calls aafunction in an Similarly, your code calls function in an external module (who's source isn't visible to external module (who's source isn't visible to the optimizer), -op2 cannot be used (and will the optimizer), -op2 cannot be used (and will be overriden) be overriden)8UNROLL(# of times to unroll)#pragma UNROLL(2); for(i = 0; i < count ; i++) { sum += a[i] * x[i]; }Tells the compiler to unroll the for() loop twice The compiler will generate extra code to handle the case that count is odd The #pragma must come right before the for() loop UNROLL(1) tells the compiler not to unroll a loopMUST_ITERATE(min, max, %factor)#pragma UNROLL(2); #pragma MUST_ITERATE(10, 100, 2); for(i = 0; i < count ; i++) { sum += a[i] * x[i]; } Gives the compiler information about the trip (loop) count In the code above, we are promising that: count >= 10, count <= 100, and count % 2 == 0 If you break your promise, you might break your code Allows the compiler to remove unnecessary code Modulus (%) factor allows for efficient loop unrolling The #pragma must come right before the for() loop9#pragma DATA_ALIGN(variable, 2n alignment)#pragma DATA_ALIGN(a, 8); short a[256] = {1, 2, 3, … #pragma DATA_ALIGN(x, 8); short x[256] = {256, 255, 254, … #pragma UNROLL(2); #pragma MUST_ITERATE(10, 100, 2); for(i = 0; i < count ; i++) { sum += a[i] * x[i]; } Tell compiler to create variables on a 2n boundary Allows use of (double) word-wide optimized loads/storesCode Size vs. Code Speed? What compiler options are best for your code size vs. speed tradeoff? Traditionally, figuring this out required running large permutations of options10Minimizing Space OptionThe table shows the basic strategy employed by compiler and Asm-Opt when using the –ms optionsUser must use the optimizer (-o ) with –ms for the greatest effect. The optimizer provides a great deal of information for code-size reduction, as well as increasing performance Use program level optimization (-pm )Try -mh to reduce prolog/epilog codeUse –oi0to disable auto-inlining100%0-ms38020-ms24060-ms11090-ms00100%none Code Size Performance -ms level Analyze and TuneCompiler ConsultantCache TuneCode Size TuneTuning DashboardCCS Optimization Tool TutorialOverview of Application Code TuningCompiler Consultant Tool¾Introduction¾DemonstrationCode Size Tune Tool¾Introduction¾DemonstrationCache Tune Tool¾Introduction¾DemonstrationCompiler Consultant IntroductionC/C++ cannot express all the information needed to get the best optimizationCompiler Consultant …¾Recognizes these gaps¾Gives specific advice on filling the gapIt analyzes your application and makes recommendations for changes to optimize the performanceThese suggestions include compiler optimization switches and pragmas to insert into your code that give the compiler more application informationPerformance Improvement comes quicklyCompiler Consultant Introduction1.Optionally, profile CPU performance2.Build with –-consultantunch Profile Viewer to see advice inspreadsheet like format4.Sort loops to decide where to start5.See advice by double-clicking on Advice List cellof row for loop of interest6.Explore advice in web browser like interface7.Implement as much advice as desired8.Build to see improvements9.Repeat until satisfiedBenchmark Code PerformanceProfile ÆClock ÆViewBenchmark Code PerformanceWe set two breakpoints, one before and another after the dotp() Now we can benchmark clock cycles to execute this functionRun to thefirstbreakpointBenchmark Code PerformanceRun to thefirstbreakpointReset the Clock by double click the itemBenchmark Code Performance Run to the next breakpoint and getthe result of clock cycles toperforming this functionBenchmark with ProfilerProfiler SetupProfiler ViewerSetup the Profiler This is a three step process:Click “Enable Profiling”Select the code we want to profile:•Functions•LoopsSelect the “Custom”ButtonSetup the Profiler Select the items to benchmarkOpen up the ViewerCountHow many times we run into this function TotalTotal number of clock cycles to execute this functionProject ÆBuild OptionsCompiler ConsultantCompiler ConsultantClick on the checkbox Generate Compiler Consultant Advice(--consultant).Compiler ConsultantFrom the Profile menu, choose Viewer.Compiling with no ErrorOnce the Profile Viewer window appears, click on the Consultant tab.Compiler ConsultantOnce the Profile Viewer window appears, click on the Consultant tab.The Loop Name We take 64 cycles toexecute this loop Two advises to optimize this loopCompiler ConsultantCompiler ConsultantDouble click on the Advice List cell for the DoLoop row.Compiler ConsultantThe Advice Window appears, and the Consultant tabdisplays advice for the DoLoop function.Compiler ConsultantUnder the Project menu, choose Build OptionsIn the Build Options dialog, click the Compiler tab.Click on the Basic item in the Category list.From the Generate Debug Info drop down list, choose No Debug.From the Opt Level drop down list, choose File (-o3).Let’s Compiling againCompiler ConsultantLoop Duplicated.Compiler is unable to determine if one or more pointers are pointing at the same memory address as some other variable. Such pointers are called aliases.One version of the loop presumes the presence of aliases, the other version of the loop does not.The compiler generates code that checks, at runtime, whether certain aliases are present.Compiler executes the appropriate version of the loop based on the checkCompiler ConsultantWe can profile the code to see which loop versions get selected when the code is executed. From the File menu, choose Load Program to start the program load.Enable ProfilingCollect Run Time Loop Information.Select Profile ÆSetupLoad and Execute ProgramCompiler ConsultantDouble-Click Advise ListThe problem statement indicates thecompiler cannot determine if twopointers may point to the samememory location, and therefore cannotapply more aggressive optimizationsto the loop.The Consultant Tool offers severalsuggestions to solve the problem.Compiler ConsultantThe Consultant Tool offers several suggestions to solve the problemand gives a example to show you how to do it.Here the Consultant Tool tells you use “restrict”keywordCompiler ConsultantModify the source file to add restrict key word qualifier to the Output pointer parameter to solve Alias issue.Compiler ConsultantThe Advise Window will give you somesuggestions and recommendations to solvethose issuesKnow let’s take a look at more advises ÆAlignment and Trip CountCompiler ConsultantModify the source file to tell the compiler more information by using Pragmas Build, load, and execute the program and benchmark your resultDemoUsing Compiler Consultant ToolCCS Optimization Tool TutorialOverview of Application Code TuningCompiler Consultant Tool¾Introduction¾DemonstrationCode Size Tune Tool¾Introduction¾DemonstrationCache Tune Tool¾Introduction¾DemonstrationCodeSize Tune IntroductionCodeSize Tune is a tool that enables you quickly and easily optimize the trade-off between code size and cycle countUsing a variety of compiling configurations, CST will …¾Profile your application¾Collect data on individual functions¾Determine the best combinations of compiler optionsCST will produces a graph of these function-specific options You can graphically choose the configurations that best fits your needCodeSize TuneAfter Build executable and Load, Launch CodeSizeTune from theProfile→Tuning menu by choosing CodeSizeTune.CodeSize TuneOnce CodeSizeTune is launched, the CodeSizeTune window displays.Also, the advice window displays the initial CodeSizeTune advicetopic.Setting Exit PointsUsing CST, your application must self terminate.The application used here is a looping application that does notself-terminate.In order for CST to work, we must force it to stop data collection at some point by establishing an exit point.For CST, the exit point will also halt the CPU.Setting Exit PointsUsing CST, your application must self terminate.The application used here is a looping application that does notself-terminate.In order for CST to work, we must force it to stop data collection at some point by establishing an exit point.For CST, the exit point will also halt the CPU.Profile ÆSetupClick on theEnable/Disable Profilingbutton to enable profiling.Click on the Controltab of the Profile Setupwindow.Setting Exit PointsNavigate to the open modemtx.c window. Navigate to the while function loop within the main function of modemtx.c, and highlight the end brace ("}") on line 344 of the while loop .Drag-and-drop it to the Exit Point pane within the Control tab.CodeSize TuneNow that we have prepared our application by including an exit point, we are ready to build and profile.In the CodeSizeTune window tool bar, choose the RebuildAll and ReprofileAll iconThe CodeSizeTune tab shows build progress in the output window, first building, resetting the CPU, then loading, and finally profilingfor each of the preset collection options sets.CodeSize TuneWhen CodeSizeTune finishes profiling your application under each collection option, it displays the output graph.The CodeSizeTune graph plots function-specific option sets according to code size and cycle count. Code size is plotted on the x-axis and cycle count on the y-axis.CodeSize TuneWhen CodeSizeTune finishes profiling your application under each collection option, it displays the output graph.The CodeSizeTune graph plots function-specific option sets according to code size and cycle count. Code size is plotted on the x-axis and cycle count on the y-axis.Pick one of the points (in purple) with the desired cycle and code size, and click on it to make it the Selected Function-SpecificOptions Set.The Profile Viewer window automatically displays when you select a point from the graph.CodeSize TuneThe Profile Viewer window displays detailed information about the selected function-specific options set. This information includes the size, cycle, name and options for each function.CodeSize TuneNow we need to perform is saving the selected options set (the single graph point) as a Code Composer Studio project configuration. Click the Save Build Options As …button from the CodeSizeTune toolbar.Type the name, and clickSave.CodeSize TuneTo view this configuration, select this configuration from the Project Configuration dropdown menu. Or you can open the Project menu, select Configurations... and choose EnryNewConfig.From the Project menu, choose Rebuild All or click on the Rebuild All icon . This action rebuilds the project using the new projectconfiguration, which contains the function level build options defined by CodeSizeTune.Halt / Resume Collection Points If you would like to profile only certain portions of your application, you can use Halt / Resume points.When CST encounters a Halt point, it will stop collect profile information. When it subsequently encounters a Resume point, it will resume the collection of profile information.Halt / Resume Collection Points If you would like to profile only certain portions of your application, you can use Halt / Resume points.When CST encounters a Halt point, it will stop collect profile information. When it subsequently encounters a Resume point, it will resume the collection of profile information.Halt / Resume Collection Points If you would like to profile only certain portions of your application, you can use Halt / Resume points.When CST encounters a Halt point, it will stop collect profile information. When it subsequently encounters a Resume point, it will resume the collection of profile information.Halt / Resume Collection Points If you would like to profile only certain portions of your application, you can use Halt / Resume points.When CST encounters a Halt point, it will stop collect profile information. When it subsequently encounters a Resume point, it will resume the collection of profile information.Halt / Resume Collection PointsClick the Rebuild All and Profile All button on the Code Size Tune.Then we will see the visually represented code size –cycle numbers analysisDemoUsing CST ToolCCS Optimization Tool TutorialOverview of Application Code TuningCompiler Consultant Tool¾Introduction¾DemonstrationCode Size Tune Tool¾Introduction¾DemonstrationCache Tune Tool¾Introduction¾DemonstrationCacheTune Tool IntroductionThe CacheTune tool provides graphical visualization of memory reference patterns for program execution over a set amount of time.All the memory accesses are color-coded by typeThis enables quick identification of problem areas, such as areas related to conflict, capacity, or compulsory misses.The demonstration example performs the following operation on matrices A and B and stores the result in C.C = A <matrix operation> transpose (B)Setup the CacheTune ToolProfile ÆSetupEnable ProfilingThis activity measures the total cycles consumedby the entire application and calculates thetotal code size of the application.This activity tracks Program and Data Cache events, such as cache stall cycles, and thenumber of cache misses, during a profile run over functions and rangesof your choosing.Setup the CacheTune ToolFrom the Profile menu, launch Tuning→CacheTune. This selection launches the CacheTune tool in the main editor window.From the Profile Setup window, select the activityCollect Cache Information over time.This activity selects cache events to track overtime during a profile run over all memoryaddresses.Build, Load, and Execute the Program Now we areready to collectdata on cacheaccessesCacheTune Tool CacheTune graphically shows memory access patterns over time, color-coding the accesses to distinguish cache hits from cache misses.Cache hits are greenCache misses are redAccessed addresses are Y-axisAccess times are X-axis.CacheTune ToolPreparing to View Data Cache Accesses Now We will use CacheTune to visualize and analyze the memory access patterns in the cache and view the available symbolic information.In addition, we will learn to navigate within the tool and view a particular area using the zooming features.We will also see the optimization technical recommendations used to eliminate the cache misses in the data cache.When tuning, recommending start with data cache, because optimizing for data cache performance may lead you to modify your program, thus changing the memory access pattern of the program cache.CacheTune ToolClick on the Full Zoom button to view the entire traceCacheTune ToolMove the cursor across the display. The information display areaupdates with the current address range, section, symbol(if any), andcycle range.This provides the information of where (address)and when (cycle)cache events occur on which data (section and symbol)memoryaccess.CacheTune ToolYou can switch between these options to view different traceCacheTune ToolOnce CacheTune Tool identifies cache access patterns, you can op up Advise WindowClick the icon to see how each type of cache miss appears on the CacheTune Tool and how to improve it.CacheTune ToolThe advise window will also give you a example to avoid cache missCacheTune ToolBased on the help of Advise Window, most cache misses on L1D are capacity misses due to suboptimal data usage, that is, the algorithm does not reuse the data when they are still in cache. This type of miss can be reduced by restructuring the data in order to work on smaller blocks of data at a time.CacheTune ToolAfter modifying the data usage pattern in the program, we rebuild the modified program and now visualize the new data cache access pattern with the CacheTune ToolDemoUsing Cache Tune ToolTHANK YOUQ&A。
CCS集成开发环境DSP
CCS集成开发环境DSP
• 常用工具条
•(2) 编辑工具条 • 编辑工具条共计10个按钮。
• •
PPT文档演模板
—— 左移制表位按钮。将选定的文本 块左移一个Tab键。
—— 右移制表位按钮。将选定的文本 块右移一个Tab键。
CCS集成开发环境DSP
—— 执行到光标处按钮。在调试过程 中,从当前位置执行程序,直到遇到反汇 编窗口中的光标位置为止。CCS集成开发环境DSP
• 常用工具条 •(4) 调试工具条
• • •
PPT文档演模板
—— 运行程序按钮。从当前PC位置开
始执行程序,直到遇到断点后停止。
—— 暂停程序按钮。用来暂停正在执行
的程—序—。动画执行按钮。在执行前先设置好
PPT文档演模板
CCS集成开发环境DSP
•常用工具条
••(1) 标常准用工的具工条具条共有四类,分别为标准工具条 、 • 编辑启工动具C条CS、后项会目自工动具显条示和标调准试工工具具条条。。也用可户以可通
以 过单选击择工 主具 菜条 单上 “的Vi按ew钮”执中行的相“应St的an操da作rd。Toolbar”
PPT文档演模板
CCS集成开发环境DSP
•图4-2 Code Compuser studio Setup窗口 •返回本节
• CCS的应用界面
•源程序编辑窗口
•图形显示窗口
•主•菜单 —个典型的CCS开发环境界面如图。
•工具条
•工程项目窗口
•内存显示窗口
•反汇编窗口
PPT文档演模板
•寄存器显示窗口
,又可以设置断点、探测点调试程序。
•
DSP开发环境CCS的使用
DSP开发环境CCS的使用一、实验目的1. 熟悉CCS软件的基本使用方法,重点掌握CCS软件的调试工具和技巧;2.掌握堆栈的使用方法;二、实验内容编写程序,观察堆栈的使用情况。
三、实验内容与步骤1.将计算机与DES320PP-A教学实验系统连接好,并打开实验系统电源、然后运行CCS软件。
2.新建一个项目:点击Project→New,将项目命名为DSPCCS,并将项目名保存在自己定义的文件夹下。
(注意文件夹一定要用英文名,不要将文件夹取名为中文名)。
3.新建一个源文件:点击File→New→Source File,可以打开一个文本编辑窗口,点击保存按键,保存在和项目相同的一个文件夹下面(DSPCCS),保存类型选择*.ASM(如果源文件是 C 语言编写的,保存类型选择*.C。
本实验中的例程是使用汇编语言编写的,所以选择*.ASM 为保存类型),我们在这里将保存名字命名为DSPCCS.asm 。
4.在项目中添加源文件:在新建立了一个源文件以后,要想使用CCS 编译器对该源文件进行编译还需要将源文件添加到项目中去。
添加方法是在工程管理器中右键单击DSPCCS.pjt,在弹出的菜单中选择Add Files,然后将刚才建立的DSPCCS.asm 文件添加到该项目中去。
5.编写源程序:在工程管理器中双击DSPCCS.asm ,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容:****************************************** 学习堆栈的使用方法******************************************.title "DSPCCS.asm".mmregssize .set 100stack .usect "STK",size ;堆栈的设置.bss length,10H.def start.textstart:STM #0,SWWSR ;插入0个等待状态STM #stack+size,SP ;设置堆栈的指针LD #-8531,ASTM #length,AR1MVMM SP,AR7loop: STL A,*AR7-BANZ loop,*AR1-.end6.编写链接配置文件:只有汇编源程序是不够的,一个完整的DSP 程序至少包含三个部分:主程序、中断向量表、链接配置文件(*.cmd)。
DSP集成开发环境CCS
② 输入各选项参量,拟定窗口旳特征。 ③ 单击“OK”按钮,出现存储器窗口。
DSP原理及应用
DSP原理及应用
反汇编窗口
DSP原理及应用
7.3.4 存储器窗口旳使用
1. 观察存储器旳内容 存储器窗口能够直接显示存储器旳内容。在调
试程序旳过程中,可直接观察存储器旳内容来 判断程序旳正确性。
① 打开“Memory Window Options” (存储器 窗口选项)对话框。
措施1:选择“View”菜单中旳“Memory”选 项;
生成旳目旳文件; *.out —— 完毕编译、汇编、链接后
所形成旳可执行文件,可在CCS监控下 调试和执行;
DSP原理及应用
*.wks — 工作空间文件,可用来统计工 作环境旳设置信息;
*.cdb — CCS旳配置数据库文件,是使 用DSP/BIOS API模块所必须旳。当保存 配置文件时,将产生链接器命令文件 (*cfg.cmd)、头文件(*cfg.h54)和汇编语 言源文件(*cfg.s54)。
② 编辑各类文件 能够使用CCS提供旳集成编辑环,对
头文件、链接命令文件和源程序进行编 辑。 ③ 对工程项目进行编译 能够使用CCS提供旳集成编辑环境,对 头文件、链接命令文件和源程序进行编 辑。
DSP原理及应用
④ 对成果和数据进行分析和算法评估 如出现语法错误,将在构建窗口中显示
DSP原理及应用
1. 创建新文件 2. 打开一种文件 3. 文件旳编辑 4. 文本旳查找和替代
DSP原理及应用
7.3.3 反汇编窗口旳使用
反汇编窗口主要用来显示反汇编后 旳指令和调试所需旳符号信息,涉及反 汇编指令、指令所存储旳地址和相应旳 操作码(机器码)。
DSP集成开发环境CCS开发指南_部分4
28 11. 点击(Step Over)工具栏按钮或按F10以便执行到所调用的函数fprintf()之后。
12. 用CCS 提供的step 命令试验:■ Step Into (F2)■ Step over (F10)■ Step Out (Shift F7)■ Run to Cursor (Ctrl F10)13. 点击工具栏按钮或按F5运行程序到结束。
292.7 使用观察窗口观察structure 变量观察窗除了观察简单变量的值以外,还可观察结构中各元素元素的值。
1. 在watch Window 区域中点击鼠标右键,并从弹出表中选择Insert NewExpression。
2. 键入str 作为表达式并点击OK。
显示着+str={…}的一行出现在Watch Window中。
+符号表示这是一个结构。
回顾2.3,类型为PARMS 的结构被声明为全局变量,并在hello.c 中初始化。
结构类型在hello.h 中定义。
3. 点击符号+。
CCS 展开这一行,列出该结构的所有元素以及它们的值。
4. 双击结构中的任意元素就可打开该元素的Edit Variable 窗口。
5. 改变变量的值并点击OK。
注意Watch Window 中的值改变了,而且其颜色也相应变化,表明已经该值已经人工修改了。
6. 在Watch Window 中选择str 变量并点击右键,从弹出表中选择Remove CuurentExpression。
在Watch Window 中重复上述步骤。
7. 在Watch Window 中点击右键,从弹出表中选择Hide 可以隐藏观察窗口。
8. 选择Debug→Breakpoits。
在Breakpoints tab 中点击Delete All,然后点击OK,全部断点都被清除。
30 2.8 测算源代码执行时间在本节中,将使用CCS 的profiling 功能来统计标准puts()函数的执行情况,可以把这些结果与3.4节中采用DSP/BIOS API 显示hello world 消息的相应结果相比较。
使用CCS进行DSP编程(三)--CCS编程入门
使用CCS进行DSP编程(三)——实现DMA和Interruptpacificxu现在讨论在CCS进行DSP编程来实现DMA和Interrupt功能。
假定读者对CCS的使用已经比较了解,并有了一定的CCS编程经验。
如果读者还不太了解,请参阅《使用CCS进行DSP编程(一)——CCS编程入门》、《使用CCS进行DSP编程(二)——实现FFT》及其他CCS的学习文档。
下面用闻亭公司的C6xPa板硬件和闻亭公司的PCI仿真器为例,来实现DSP 的DMA传输和硬件Interrupt功能。
首先来描述一下使用的硬件资源。
闻亭公司的C6xPa板有两路独立的最高采样率为40MHz精度为12bit的A/D,它与DSP的EXT_INT7相连,可以产生外部中断信号,通过FPGA的逻辑可以控制A/D的采集和采集多少数据产生一次中断,采集的数据放在DPRAM中(0x1400000开始的地址空间),通过DMA 传输到DSP芯片上的存储器中(0x80000000开始的地址空间)。
在C语言环境中使用DMA和Interrupt功能,需要包含两个头文件<dma.h>和<intr.h>,同时要用到相应的运行时库文件“csl6201.lib”和“dev6x.lib”。
对这两组头文件和运行时库文件,我们深入研究一下,看一看我们比较关心的函数有哪些。
下一次用到这些函数时,别忘了带上相应的运行时库文件%*&^*&^喔。
在dev6x.lib库文件中,直接与实现DMA和Interrupt功能相关的函数有如下几个:dma_initdma_global_initdma_resetintr_resetintr_initintr_hookintr_mapintr_isnintr_get_cpu_intrisr_jump_table在csl6201.lib库文件中,直接与实现DMA功能相关的函数有如下几个: DMA_AllocGlobalRegDMA_GetEventIdDMA_GBL_PRIV ATEDMA_OpenDMA_StartDMA_HCHA0DMA_HCHA1DMA_HCHA2DMA_HCHA3DMA_WaitDMA_SetGlobalRegDMA_ConfigADMA_ConfigBDMA_StopDMA_AutoStartDMA_PauseDMA_ResetDMA_GetGlobalRegDMA_SetAuxCtlDMA_CloseDMA_FreeGlobalRegDMA_InitDMA_GetStatus我们只需其中的一部分便可以实现DMA和Interrupt功能。
DSP程序优化---ccs优化选项详解
DSP程序优化---ccs优化选项详解
DSP程序优化---ccs优化选项详解
1. –O0
l 简化控制流图
l 分配变量到寄存器
l 进行循环旋转(loop rotation)
l 删除未使用的代码
l 简化表达式和语句
l 内联声明为inline的函数
2. –O2
l 执行局部复制/常量传递
l 删除未使用的赋值语句
l 删除局部共有表达式
3. –O2
l 进行软件流水
l 进行循环优化
l 删除全局共有子表达式
l 删除全局未使用的赋值语句
l 把循环中的对数组的引用转化为递增的指针形式
l 把循环展开
4. –O3
l 删除未使用的所有的函数
l 当函数的返回值没用到时,简化函数的返回形式
l 内联小的函数
l 重新对函数的声明进行排序。
这样当优化调用代码时,被调用函数的属性是已知的
l 当所有调用都传递一个相同的参数时,把这个参数直接放到函数体中去,不在通过寄存器/存储器的方式传递这个参数。
l 识别文件级别变量的特征。
DSP程序的代码优化方法
21
C6000线性汇编语言优化
循环展开:
减少跳转开销,但是以增加代码长度为代价 存取带宽优化: 使用字访问半字数据
使用双字字访问字数据
22
C6000线性汇编语言优化
编排软件流水:
填充(建立循环)
DSP程序的代码优化方法
501教研室 胡伟
2011年1月
1
内容提要
DSP背景知识
代码优化要点
软件流水
C6000线性汇编语言优化
2
DSP架构
以C64x系列DSP为例: A/B双数据通路 每个通路.L, .S, .M, .D
功能单元
每个通路有32个32位 寄存器,内核直接对寄 存器操作
存储器相关性分析
确定相关性,才可以调度指令并行执行 编译器很难确定访问存储器的相关性,需要手动指定 1. 使用关键字:restrict,取消存储器混叠
2. 联合使用-pm和-o3选项
编译器将所有源文件编入同一个中间文件,可以从整 个程序的角度进行分析,用来确定是否相关 3. 使用-mt选项,明确告诉编译器程序中不存在混叠, 没有存储器相关
化中非常重要)
9
代码性能分析方法
Clock()函数; CCS的clock菜单
CCS的Profile功能(推荐)
10
软件优化要点
1个时钟周期内让尽可能多的功能单元同时执行指令, 趋近8*主频(MHz) MIPS 前提:满足各种资源限制(resource bound) 途径:
(1)资源合理分配、充分使用
循环(单周期循环)
排空(完成最后 操作)
TI_DSP软件开发工具CCS的使用
实时(Real Time)是DSP的灵魂
2
1.1 CCS集成环境IDE
3
1.1 CCS集成环境IDE的组成
4
1.1 CCS集成环境IDE的组成
包括主机和目标系统两部分 CCS 首先是作为代码生成工具,作为代码生成工具有 这样一些输入:配置工具产生的配置文件,DSP/BIOS API的库函数。自己的程序文件.c,.h,生成可执行文 件 主机方:最低层是JTAG,上面是调试器,再上面是CCS 的各种插件,包括DSP/BIOS插件(实时调试),还用 RTDX(实时数据交换) 目标系统一方:最底层是硬件和JTAG,向上是 DSP/BIOS实时操作系统(这是可选的也可以没有操作 系统,完全自己管理),再向上是应用程序.
32
2 简单程序开发流程(6)Debug
加载程序FileLoad Program… 设置断点,通过Watch Window观察变量 单步执行
黄色条代表当 前执行到那条 语句 紫色条代表断 点位置
33
2简单程序开发流程(7)Profile(剖析)
ProfileEnable Clock
设置profile point(绿 色条) 每个绿色条在窗口中对 应有一行统计数字,用 来统计profile point (绿色条)之间的时钟 数 调试器内部有时钟计数,
19
1.3.6 CCS2.0 RTDX(1)
RTDX,即Real-time Data Exchange 提供了一种实时,连续的观测手段,不打断DSP 运行(数据可连续观测,也可传回来存储后观测) 不打断DSP运行的情况下,主机和DSP间传递数据 回传到主机的数据可以在“OLE自动化客户”中 显示
CCS_DSP开发环境经典教程
CCS_DSP开发环境经典教程
S_DSP安装和配置
2.创建和配置项目
在CCS_DSP中,每个应用程序对应一个项目。
创建新项目时,选择适合的DSP开发板和编译器平台,设置工作目录和源文件路径。
此外,还可以设置编译选项、链接选项等。
3.编写应用程序代码
4.编译和构建项目
在CCS_DSP中,使用编译器将源代码转换为可执行的机器码。
编译项目时,注意设置编译选项和链接选项,包括优化级别、调试信息等。
编译成功后,生成可执行文件。
5.调试和测试应用程序
6.优化和性能分析
在CCS_DSP中,可以使用各种优化技术提高DSP应用程序的性能。
通过分析代码,查找和优化性能瓶颈,可以提高程序的运行效率。
CCS_DSP 提供了性能分析工具和代码优化建议,帮助开发人员优化应用程序。
7.部署和发布应用程序
总结:
CCS_DSP开发环境是开发DSP应用程序的重要工具,掌握其使用方法和技巧对于开发人员来说非常重要。
本教程介绍了CCS_DSP的基本安装和配置,项目创建和配置,代码编写,编译和构建,调试和测试,优化和性
能分析,部署和发布等方面的内容。
希望通过这个教程,开发人员能够更好地掌握CCS_DSP开发环境,提高DSP应用程序开发的效率和质量。
使用CCS进行DSP编程(一)——CCS编程入门
使用CCS进行DSP编程(一)——CCS编程入门使用CCS进行DSP编程(一)——CCS编程入门pacificxuTI公司提供了高效的C编译器和集成开发环境Code Composer Studio,学习‘C6X的编程应该从学习CCS的使用开始。
首先安装CCS,CCS的安装有详细的说明,并配有简短的Quick Time的多媒体介绍,对于没有购买CCS的用户,可以从TI处得到30天的试用版(没有硬件仿真功能)。
使用CCS前需要对CCS进行设置,以Simulator为例,运行Setup CCS C6000 1.20,安装Device Driver,对于有硬件支持的仿真器,可以选择配套的CCS驱动,设置完成的画面如下图所示:用户的界面大致相同。
接下来就可以运行CCS了,CCS提供了比较好的例子,对于初学者,仔细学习这些例子,会起到事半功倍的效果。
在CCS的Help菜单的Tutorial子菜单下,给出了四个教程,分别是:Code Composer Studio Tutorial、Advanced DSP/BIOS Tutorial、Compiler Tutorial 和RTDX Tutorial,用户可以从简单的CCS功能开始,如创建一个工程文件Project,到创建一个完善的用户程序一步一步的进行。
下面是Code Composer Studio Tutorial的例子:分别从生成一个简单的“Hello World”程序,到使用DSP/BIOS 功能,到程序的调试,实时分析,I/O操作等分6课来讲解,可以领略TI的CCS的强大功能。
下面以“Hello World”程序为例讲一下CCS的使用。
首先打开一个Project文件这些文件的路径如下图所示:打开hello.mak,会看到如下图所示的界面。
将File View栏中的“+”号都打开,会看到整个项目工程中的所有资源。
其中*.c文件和*.h文件与普通的C语言编程中是一致的(TI编译器支持ANSI C标准)。
简单例子学习DSP编程和CCS使用
目录实验一 CCS基本使用和DSP汇编编程基础一、预习内容复习汇编语言指令内容,汇编语言使用中的基本概念,CCS的基本概念。
二、实验目的1.掌握一个DSP软件开发流程。
2.理解DSP的启动过程。
3.掌握汇编的书写规范,学会汇编指令的运用。
4.掌握编译器和连接器的使用,能够合理地分配存储空间。
5.学习CCS的各种调试技巧,如:CUP寄存器、数据和程序存储器的观察,断点的设置,反汇编窗口的使用。
6.学习定点数的运算方法。
三、实验要求1.用.set定义四个立即数。
2.在.bss段建立几个存储空间。
3.把立即数相加和相乘,结果放在.bss分配的存储空间。
4.合理分配各个段的存储地址,并使用CCS观察。
四、实验原理1. 软件开发流程从大的步骤来讲,一个软件要能够在DSP上面正常运行,需要用户完成以图1-1所示的流程。
第一步:在用户的工程里面,必须包含至少两个文件。
一个是程序指令的源文件,这个文件可以是汇编编写的,也可以是C语言编写的。
当然,这样的文件在一个工程当中可以用多个,而且,编程的语言可以不统一。
工程当中必须包含的第二个文件是连接文件。
这个文件的作用是把源文件中定义的各个段放到用户指定的DSP的程序存储区,从而可以在该区域按一定顺序执行。
第二步:两个文件编辑完成以后,可以调用编译、汇编和连接命令。
编译功能把C源文件转化为汇编文件,期间的转化有一定的规则,这些规则是在书写C语言语句是应该注意的东西。
汇编的功能是把编译形成的汇编文件或者是用户自己编辑的汇编文件转化为COFF格式文件。
而最后通过连接命令,结合连接文件,把COFF文件连接成为可执行的COFF文件,即后缀名为.OUT的文件。
第三步:通过CCS的加载功能,把.OUT文件加载到DSP内部,其地址由连接文件规定。
如果成功,可以在CCS中运行该文件,并相应进行调试。
图1-1 开发流程图2.汇编源文件书写在CCS中,新建一个文件,在这个文件中,如果使用汇编语言,那就命名时使用ASM的后缀名,如果使用C语言,那命名时就使用C的后缀名。
CCS教程(DSP开发软件)
CCS教程(DSP开发软件)第一章 CCS概述 (1)1.1CCS概述 (1)1.2代码生成工具 (3)1.3CCS集成开发环境 (5)1.3.1 编辑源程序 (5)1.3.2创建应用程序 (6)1.3.3 调试应用程序 (6)1.4DSP/BIOS插件 (7)1.4.1 DSP/BIOS 配置 (7)1.4.2 DSP/BIOS API 模块 (8)1.5硬件仿真和实时数据交换 (10)1.6第三方插件 (13)1.7CCS文件和变量 (14)1.7.1安装文件夹 (14)1.7.2文件扩展名 (14)1.7.3环境变量 (15)1.7.4增加DOS环境空间 (16)第二章开发一个简单的应用程序 (17)2.1创建工程文件 (17)2.2向工程添加文件 (19)2.3查看源代码 (21)2.4编译和运行程序 (23)2.5修改程序选项和纠正语法错误 (24)2.6使用断点和观察窗口 (26)2.7使用观察窗口观察STRUCTURE变量 (28)2.8测算源代码执行时间 (29)2.9进一步探索 (31)2.10进一步学习 (31)第三章开发DSP/BIOS程序 (32)3.1创建配置文件 (32)3.2向工程添加DSP/BIOS文件 (34)3.3用CCS测试 (36)3.4测算DSP/BIOS代码执行时间 (38)3.5进一步探索 (40)3.6进一步学习 (40)第四章算法和数据测试 (41)4.1打开和查看工程 (41)4.2查看源程序 (43)4.3为I/O文件增加探针断点 (45)4.4显示图形 (47)4.5执行程序和绘制图形 (48)4.6调节增益 (50)4.7观察范围外变量 (51)4.8使用GEL文件 (53)4.9调节和测试PROCESSING函数 (54)4.10进一步探索 (56)4.11进一步学习 (57)第五章程序调试 (58)5.1打开和查看工程 (58)5.2查看源程序 (60)5.3修改配置文件 (63)5.4用E XECUTION G RAPH查看任务执行情况 (66)5.5修改和查看LOAD值 (67)5.6分析任务的统计数据 (70)5.7增加STS显式测试 (72)5.8观察显式测试统计数据 (73)5.9进一步探索 (75)5.10进一步学习 (75)第六章实时分析 (76)6.1打开和查看工程 (76)6.2修改配置文件 (77)6.3查看源程序 (79)6.4使用RTDX控制修改运行时的LOAD值 (81)6.5修改软中断优先级 (84)6.6进一步探索 (85)6.7进一步学习 (85)第七章 I/O (86)7.1打开和查看工程 (86)7.2查看源程序 (87)7.3S IGNALPROG应用程序 (90)7.4运行应用程序 (91)7.5使用HST和PIP模块修改源程序 (93)7.6HST和PIP资料 (96)7.7在配置文件中增加通道和SWI (97)7.8运行修改后的程序 (100)7.9进一步学习 (100)第一章 CCS概述本章概述CCS(Code Composer Studio)软件开发过程、CCS组件及CCS使用的文件和变量。CCS提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。1.1 CCS概述CCS提供了基本的代码生成工具,它们具有一系列的调试、分析能力。CCS支持如下所示的开发周期的所有阶段。在使用本教程之前,必须完成下述工作:安装目标板和驱动软件。按照随目标板所提供的说明书安装。如果你正在用仿真器或目标板,其驱动软件已随目标板提供,你可以按产品的安装指南逐步安装。安装CCS.遵循安装说明书安装。如果你已有CCS仿真器和TMS320c54X代码生成工具,但没有完整的CCS,你可以按第二章和第四章所述的步骤进行安装。运行CCS安装程序SETUP.你可以按步骤执行第二章和第四章的实验。SETUP程序允许CCS使用为目标板所安装的驱动程序。CCS包括如下各部分:CCS代码生成工具:参见1.2节CCS集成开发环境(IDE):参见1.3节DSP/BIOS插件程序和API:参见1.4节RTDX插件、主机接口和API:参见1.5节CCS构成及接口见图1-1。图1-1 CCS构成及接口1.2 代码生成工具代码生成工具奠定了CCS所提供的开发环境的基础。图1-2是一个典型的软件开发流程图,图中阴影部分表示通常的C语言开发途径,其它部分是为了强化开发过程而设置的附加功能。图1-2 软件开发流程图1-2描述的工具如下:C编译器(C compiler) 产生汇编语言源代码,其细节参见TMS320C54x最优化C 编译器用户指南。汇编器(assembler) 把汇编语言源文件翻译成机器语言目标文件,机器语言格式为公用目标格式(COFF),其细节参见TMS320C54x汇编语言工具用户指南。连接器(linker) 把多个目标文件组合成单个可执行目标模块。它一边创建可执行模块,一边完成重定位以及决定外部参考。连接器的输入是可重定位的目标文件和目标库文件,有关连接器的细节参见TMS320C54x最优化C编译器用户指南和汇编语言工具用户指南。归档器(archiver)允许你把一组文件收集到一个归档文件中。归档器也允许你通过删除、替换、提取或添加文件来调整库,其细节参见TMS320C54x汇编语言工具用户指南。助记符到代数汇编语言转换公用程序(mnimonic_to_algebric assembly translator utility)把含有助记符指令的汇编语言源文件转换成含有代数指令的汇编语言源文件,其细节参见TMS320C54x汇编语言工具用户指南。你可以利用建库程序(library_build utility)建立满足你自己要求的“运行支持库”,其细节参见TMS320C54x最优化C编译器用户指南。运行支持库(run_time_support libraries) 它包括C编译器所支持的ANSI标准运行支持函数、编译器公用程序函数、浮点运算函数和C编译器支持的I/O函数,其细节参见TMS320C54x最优化C编译器用户指南。十六进制转换公用程序(hex conversion utility) 它把COFF目标文件转换成TI-Tagged、ASCII-hex、 Intel、 Motorola-S、或 Tektronix 等目标格式,可以把转换好的文件下载到EPROM编程器中,其细节参见TMS320C54x汇编语言工具用户指南。交叉引用列表器(cross_reference lister)它用目标文件产生参照列表文件,可显示符号及其定义,以及符号所在的源文件,其细节参见TMS320C54x汇编语言工具用户指南。绝对列表器(absolute lister)它输入目标文件,输出.abs文件,通过汇编.abs文件可产生含有绝对地址的列表文件。如果没有绝对列表器,这些操作将需要冗长乏味的手工操作才能完成。1.3 CCS集成开发环境CCS集成开发环境(IDE)允许编辑、编译和调试DSP目标程序。1.3.1 编辑源程序CCS允许编辑C源程序和汇编语言源程序,你还可以在C语句后面显示汇编指令的方式来查看C源程序。集成编辑环境支持下述功能:用彩色加亮关键字、注释和字符串。以圆括弧或大括弧标记C程序块,查找匹配块或下一个圆括弧或大括弧。在一个或多个文件中查找和替代字符串,能够实现快速搜索。取消和重复多个动作。获得“上下文相关”的帮助。用户定制的键盘命令分配。1.3.2创建应用程序应用程序通过工程文件来创建。工程文件中包括C源程序、汇编源程序、目标文件、库文件、连接命令文件和包含文件。编译、汇编和连接文件时,可以分别指定它们的选项。在CCS中,可以选择完全编译或增量编译,可以编译单个文件,也可以扫描出工程文件的全部包含文件从属树,也可以利用传统的makefiles文件编译。1.3.3 调试应用程序CCS提供下列调试功能:设置可选择步数的断点在断点处自动更新窗口查看变量观察和编辑存储器和寄存器观察调用堆栈对流向目标系统或从目标系统流出的数据采用探针工具观察,并收集存储器映象 绘制选定对象的信号曲线估算执行统计数据观察反汇编指令和C指令CCS提供GEL语言,它允许开发者向CCS菜单中添加功能。1.4 DSP/BIOS 插件在软件开发周期的分析阶段,调试依赖于时间的例程时,传统调试方法效率低下。DSP/BIOS插件支持实时分析,它们可用于探测、跟踪和监视具有实时性要求的应用例程,下图显示了一个执行了多个线程的应用例程时序。图1-3 应用例程中各线程时序DSP/BIOS API 具有下列实时分析功能:程序跟踪(Program tracing)显示写入目标系统日志(target log)的事件,反映程序执行过程中的动态控制流。性能监视(Performance monitoring)跟踪反映目标系统资源利用情况的统计表,诸如处理器负荷和线程时序。文件流(File streaming)把常驻目标系统的I/O对象捆绑成主机文档。DSP/BIOS 也提供基于优先权的调度函数,它支持函数和多优先权线程的周期性执行。1.4.1 DSP/BIOS 配置在CCS环境中,可以利用DSP/BIOS API定义的对象创建配置文件,这类文件简化了存储器映象和硬件ISR矢量映象,所以,即使不使用DSP/BIOS API 时,也可以使用配置文件。配置文件有两个任务:设置全局运行参数。可视化创建和设置运行对象属性,这些运行对象由目标系统应用程序的DSP/BIOS API函数调用,它们包括软中断,I/O管道和事件日志。在CCS中打开一个配置文件时,其显示窗口如下:DSP/BIOS对象是静态配置的,并限制在可执行程序空间范围内,而运行时创建对象的API调用需要目标系统额外的开销(尤其是代码空间)。静态配置策略通过去除运行代码能够使目标程序存储空间最小化,能够优化内部数据结构,在程序执行之前能够通过确认对象所有权来及早地检测出错误。保存配置文件时将产生若干个与应用程序联系在一起的文件,这些文件的细节参见1.7.2。1.4.2 DSP/BIOS API 模块传统调试(debuging)相对于正在执行的程序而言是外部的,而DSP/BIOS API要求将目标系统程序和特定的DSP/BIOS API模块连接在一起。通过在配置文件中定义DSP/BIOS 对象,一个应用程序可以使用一个或多个DSP/BIOS模块。在源代码中,这些对象声明为外部的,并调用DSP/BIOS API功能。每个DSP/BIOS模块都有一个单独的C头文件或汇编宏文件,它们可以包含在应用程序源文件中,这样能够使应用程序代码最小化。为了尽量少地占用目标系统资源,必须优化(C和汇编源程序)DSP/BIOS API调用。DSP/BIOS API划分为下列模块,模块内的任何API调用均以下述代码开头。CLK。片内定时器模块控制片内定时器并提供高精度的32位实时逻辑时钟,它能够控制中断的速度,使之快则可达单指令周期时间,慢则需若干毫秒或更长时间。HST。主机输入/输出模块管理主机通道对象,它允许应用程序在目标系统和主机之间交流数据。主机通道通过静态配置为输入或输出。HWI。硬件中断模块提供对硬件中断服务例程的支持,可在配置文件中指定当硬件中断发生时需要运行的函数。IDL。休眠功能模块管理休眠函数,休眠函数在目标系统程序没有更高优先权的函数运行时启动。LOG。日志模块管理LOG对象,LOG对象在目标系统程序执行时实时捕捉事件。开发者可以使用系统日志或定义自己的日志,并在CCS中利用它实时浏览讯息。MEM。存储器模块允许指定存放目标程序的代码和数据所需的存储器段。PIP。数据通道模块管理数据通道,它被用来缓存输入和输出数据流。这些数据通道提供一致的软件数据结构,可以使用它们驱动DSP和其它实时外围设备之间的I/O通道。PRD。周期函数模块管理周期对象,它触发应用程序的周期性执行。周期对象的执行速率可由时钟模块控制或PRD_tick的规则调用来管理,而这些函数的周期性执行通常是为了响应发送或接收数据流的外围设备的硬件中断。RTDX。实时数据交换允许数据在主机和目标系统之间实时交换,在主机上使用自动OLE的客户都可对数据进行实时显示和分析,详细资料参见1.5。STS。统计模块管理统计累积器,在程序运行时,它存储关键统计数据并能通过CCS 浏览这些统计数据。SWI。软件中断模块管理软件中断。软件中断与硬件中断服务例程(ISRs)相似。当目标程序通过API调用发送SWI对象时,SWI模块安排相应函数的执行。软件中断可以有高达15级的优先级,但这些优先级都低于硬件中断的优先级。TRC。跟踪模块管理一套跟踪控制比特,它们通过事件日志和统计累积器控制程序信息的实时捕捉。如果不存在TRC对象,则在配置文件中就无跟踪模块。有关各模块的详细资料,可参见CCS中的在线帮助,或TMS320C54 DSP/BIOS 用户指南。1.5 硬件仿真和实时数据交换TI DSPs提供在片仿真支持,它使得CCS能够控制程序的执行,实时监视程序运行。增强型JTAG连接提供了对在片仿真的支持,它是一种可与任意DSP系统相连的低侵扰式的连接。仿真接口提供主机一侧的JTAG连接,如TI XSD510。为方便起见,评估板提供在板JTAG仿真接口。在片仿真硬件提供多种功能:DSP的启动、停止或复位功能向DSP下载代码或数据检查DSP的寄存器或存储器硬件指令或依赖于数据的断点包括周期的精确计算在内的多种记数能力主机和DSP之间的实时数据交换(RTDX)图1-4 RTDX系统组成CCS提供在片能力的嵌入式支持;另外,RTDX通过主机和DSP APIs提供主机和DSP之间的双向实时数据交换,它能够使开发者实时连续地观察到DSP应用的实际工作方式。在目标系统应用程序运行时,RTDX也允许开发者在主机和DSP设备之间传送数据,而且这些数据可以在使用自动OLE的客户机上实时显示和分析,从而缩短研发时间。RTDX由目标系统和主机两部分组成。小的RTDX库函数在目标系统DSP上运行。开发者通过调用RTDX软件库的API函数将数据输入或输出目标系统的DSP,库函数通过在片仿真硬件和增强型JTAG接口将数据输入或输出主机平台,数据在DSP应用程序运行时实时传送给主机。在主机平台上,RTDX库函数与CCS一道协同工作。显示和分析工具可以通过COM API与RTDX通信,从而获取目标系统数据,或将数据发送给DSP应用例程。开发者可以使用标准的显示软件包,诸如National Instruments’LabVIEW,Quinn-Curtis’ Real-Time Graphics Tools,或Microsoft Excel。同时,开发者也可研制他们自己的Visual Basic或Visual C++应用程序。图1-5 RTDX实例RTDX能够记录实时数据,并可将其回放用于非实时分析。下述样本由National Instruments’LabVIEW 软件产生。在目标系统上,一个原始信号通过FIR滤波器,然后与原始信号一起通过RTDX发送给主机。在主机上,LabVIEW显示屏通过RTDX COM API获取数据,并将它们显示在显示屏的左边。利用信号的功率谱可以检验目标系统中FIR滤波器是否正常工作。处理后的信号通过LabVIEW,将其功率谱显示在右上部分;目标系统的原始信号通过LabVIEW的FIR滤波器,再将其功率谱显示在右下部分。比较这两个功率谱便可确认目标系统的滤波器是否正常工作。RTDX适合于各种控制、伺服和音频应用。例如,无线电通信产品可以通过RTDX捕捉语音合成算法的输出以检验语音应用程序的执行情况;嵌入式系统也可从RTDX获益;硬磁盘驱动设计者可以利用RTDX测试他们的应用软件,不会因不正确的信号加到伺服马达上而与驱动发生冲突;引擎控制器设计者可以利用RTDX在控制程序运行的同时分析随环境条件而变化的系数。对于这些应用,用户都可以使用可视化工具,而且可以根据需要选择信息显示方式。未来的 TI DSPs 将增加RTDX的带宽,为更多的应用提供更强的系统可视性。关于RTDX的详细资料,请参见CCS中RTDX在线帮助。1.6 第三方插件第三方软件提供者可创建AxtiveX插件扩展CCS功能,目前已有若干第三方插件用于多种用途。1.7 CCS文件和变量本节简述CCS文件夹、CCS的文件类型及CCS环境变量。1.7.1安装文件夹安装进程将在安装CCS的文件夹(典型情况为:c:\ti)中建立子文件夹。此外,子文件夹又建立在Windows目录下(c:\windows or c:\winnt)。C:\ti包含以下目录:bin.各种应用程序c5400\bios。DSP/BIOS API的程序编译时使用的文件c5400\cgtools.Texas instruments源代码生成工具c5400\examples.源程序实例c5400\rtdx. RTDX文件c5400\tutorial.本手册中使用的实例文件cc\bin.关于CCS环境的文件cc\gel.与CCS一起使用的GEL文件docs.PDS格式的文件和指南myprojects.用户文件夹1.7.2文件扩展名以下目录结构被添加到Windows目录:ti\drivers.各种DSP板驱动文件ti\plugins.和CCS一起使用的插件程序ti\uninstall.支持卸载CCS软件的文件当使用CCS时,你将经常遇见下述扩展名文件:S使用的工程文件program.c.C程序源文件program.asm.汇编程序源文件filename.h.C程序的头文件,包含DSP/BIOS API模块的头文件filename.lib.库文件project.cmd.连接命令文件program.obj.由源文件编译或汇编而得的目标文件program.out.(经完整的编译、汇编以及连接的)可执行文件project.wks.存储环境设置信息的工作区文件,program.cdb.配置数据库文件。采用DSP/BIOS API的应用程序需要这类文件,对于其它应用程序则是可选的。保存配置文件时将产生下列文件:◆programcfg.cmd.连接器命令文件◆programcfg.h54.头文件◆programcfg.s54.汇编源文件1.7.3环境变量安装程序在autoexec.bat文件中定义以下变量(对Windows 95和98)或环境变量(对于Windows NT):表1-1 环境变量1.7.4增加DOS环境空间如果使用的是Windows 95,你可能需要增加DOS界面的环境空间,以便支持建立一个CCS 应用所需的环境变量。把下一行添加到config.sys文件中,然后重新启动计算机:shell=c:\windows\ /e:4096 /p第二章开发一个简单的应用程序本章使用hello world实例介绍在CCS中创建、调试和测试应用程序的基本步骤;介绍CCS的主要特点,为在CCS中深入开发DSP软件奠定基础。在使用本实例之前,你应该已经根据安装说明书完成了CCS安装。建议在使用CCS时利用目标板而不是仿真器。如果没有CCS而只有代码生成工具和Code Composer或者是利用仿真器在进行开发,你只要按第二章和第四章中的步骤执行即可。2.1 创建工程文件在本章中,将建立一个新的应用程序,它采用标准库函数来显示一条hello world 消息。1.如果CCS安装在c:\ti中,则可在c:\ti\myprojects建立文件夹hello1。(若将CCS安装在其它位置,则在相应位置创建文件夹hello1。)2.将c:\ti\c5400\tutorial\hello1中的所有文件拷贝到上述新文件夹。3.从Windows Start菜单中选择Programs→Code Composer Studio ‘C5400→CCStudio。(或者在桌面上双击Code Composer Studio图标。)注:CCS设置如果第一次启动CCS时出现错误信息,首先确认是否已经安装了CCS。如果利用目标板进行开发,而不是带有CD-ROM的仿真器,则可参看与目标板一起提供的文档以设置正确的I/O端口地址。4.选择菜单项Project→New。5.在Save New Project As窗口中选择你所建立的工作文件夹并点击Open。键入myhello作为文件名并点击Save,CCS就创建了myhello.mak的工程文件,它存储你的工程设置,并且提供对工程所使用的各种文件的引用。2.2 向工程添加文件1.选择Project→Add Files to Project,选择hello.c并点击Open。2.选择Project→Add Files to Project,在文件类型框中选择*.asm。选择vector.asm并点击Open。该文件包含了设置跳转到该程序的C入口点的RESET中断(c_int00)所需的汇编指令。(对于更复杂的程序,可在vector.asm定义附加的中断矢量,或者,可用3.1节上所说明的DSP/BIOS来自动定义所有的中断矢量)3.选择Project→Add Files to Project,在文件类型框中选择*.cmd。选择hello.cmd并点击Open,hello.cmd包含程序段到存储器的映射。4.选择Project→Add Files to Project,进入编译库文件夹(C:\ti\c5400\cgtools\lib)。在文件类型框中选择*.o*,*.lib。选择rts.lib并点击Open,该库文件对目标系统DSP提供运行支持。5.点击紧挨着Project、Myhello.mak、Library和Source旁边的符号+展开Project表,它称之为Project View。注:打开Project View如果看不到Project View,则选择View→Project。如果这时选择过Bookmarks图标,仍看不到Project View,则只须再点击Project View底部的文件图标即可。6.注意包含文件还没有在Project View中出现。在工程的创建过程中,CCS扫描文件间的依赖关系时将自动找出包含文件,因此不必人工地向工程中添加包含文件。在工程建立之后,包含文件自动出现在Project View中。如果需要从工程中删除文件,则只需在Project View中的相应文件上点击鼠标右键,并从弹出菜单中选择Remove from project即可。在编译工程文件时,CCS按下述路径顺序搜索文件:包含源文件的目录编译器和汇编器选项的Include Search Path中列出的目录(从左到右)列在C54X_C_DIR(编译器)和C54X_A_DIR(汇编器)环境变量定义中的目录(从左到右)。2.3 查看源代码1.双击Project View中的文件hello.c,可在窗口的右半部看到源代码。2.如想使窗口更大一些,以便能够即时地看到更多的源代码,你可以选择Option→Font使窗口具有更小的字型。/* ======== hello.c ======== */#include <stdio.h>#include "hello.h"#define BUFSIZE 30struct PARMS str ={2934,9432,213,9432,&str};/** ======== main ========**/void main(){#ifdef FILEIOint i;char scanStr[BUFSIZE];char fileStr[BUFSIZE];size_t readSize;FILE *fptr;#endif/* write a string to stdout */puts("hello world!\n");#ifdef FILEIO/* clear char arrays */for (i = 0; i < BUFSIZE; i++) {scanStr[i] = 0 /* deliberate syntax error */fileStr[i] = 0;}/* read a string from stdin */scanf("%s", scanStr);/* open a file on the host and write char array */fptr = fopen("file.txt", "w");fprintf(fptr, "%s", scanStr);fclose(fptr);/* open a file on the host and read char array */fptr = fopen("file.txt", "r");fseek(fptr, 0L, SEEK_SET);readSize = fread(fileStr, sizeof(char), BUFSIZE, fptr);printf("Read a %d byte char array: %s \n", readSize, fileStr);fclose(fptr);#endif}当没有定义FILEIO时,采用标准puts()函数显示一条hello world消息,它只是一个简单程序。当定义了FILEIO后(见2.5节),该程序给出一个输入提示,并将输入字符串存放到一个文件中,然后从文件中读出该字符串,并把它输出到标准输出设备上。2.4 编译和运行程序CCS会自动将你所作的改变保存到工程设置中。在完成上节之后,如果你退出了CCS,则通过重新启动CCS和点击Project→Open,即可返回到你刚才停止工作处。注:重新设置目标系统DSP如果第一次能够启动CCS,但接下来得到CCS不能初始化目标系统DSP的出错信息则可选择Debug→Reset DSP菜单项。若还不能解决上述问题,你可能需要运行你的目标板所提供的复位程序。为了编译和运行程序,要按照以下步骤进行操作:1.点击工具栏按钮或选择Project→Rebuild All ,CCS重新编译、汇编和连接工程中的所有文件,有关此过程的信息显示在窗口底部的信息框中。2.选择File→Load Program,选择刚重新编译过的程序myhello.out(它应该在c:\ti\myprojects\hello1文件夹中,除非你把CCS安装在别的地方)并点击Open。CCS把程序加载到目标系统DSP上,并打开Dis_Assembly窗口,该窗口显示反汇编指令。(注意,CCS还会自动打开窗口底部一个标有Stdout的区域,该区域用以显示程序送往Stdout的输出。)3.点击Dis_Assembly窗口中一条汇编指令(点击指令,而不是点击指令的地址或空白键。CCS将搜索有关那条指令的帮助信息。这是一种获得关于不熟悉的区域)。按F1汇编指令的帮助信息的好方法。4.点击工具栏按钮或选择Debug→Run。注:屏幕尺寸和设置工具栏有些部分可能被Build窗口隐藏起来,这取决于屏幕尺寸和设置。为了看到整个工具栏,请在Build窗口中点击右键并取消Allow Docking选择。当运行程序时,可在Stdout窗口中看到hello world消息。2.5 修改程序选项和纠正语法错误在前一节中,由于没有定义FILEIO,预处理器命令(#ifdef 和#endif)之间的程序没有运行。在本节中,使用CCS设置一个预处理器选项,并找出和纠正语法错误。1.选择Project→Options。2.从Build Option窗口的Compiler栏的Category列表中选择Symbles。在DefineSymbles框中键入FILEIO并按Tab键。注意,现在窗口顶部的编译命令包含-d选项,当你重新编译该程序时,程序中#ifdef FILEIO语句后的源代码就包含在内了。(其它选项可以是变化的,这取决于正在使用的DSP板。)3.点击OK保存新的选项设置。4.点击(Rebuild All)工具栏按钮或选择Project→Rebuild All。无论何时,只要工程选项改变,就必须重新编译所有文件。5.出现一条说明程序含有编译错误的消息,点击Cancel。在Build tab 区域移动滚动条,就可看到一条语法出错信息。6.双击描述语法错误位置的红色文字。注意到hello.c源文件是打开的,光标会落在该行上: fileStr[i] = 07.修改语法错误(缺少分号)。注意,紧挨着编辑窗口题目栏的文件名旁出现一个星号(*),表明源代码已被修改过。当文件被保存时,星号随之消失。8.选择File→Save 或按Ctrl+S可将所作的改变存入hello.c。9.点击(Incremental Build)工具栏按钮或选择Project→Build,CCS重新编译已被更新的文件。2.6 使用断点和观察窗口当开发和测试程序时,常常需要在程序执行过程中检查变量的值。在本节中,可用断点和观察窗口来观察这些值。程序执行到断点后,还可以使用单步执行命令。1.选择File→Reload Program.2.双击Project View中的文件hello.c。可以加大窗口,以便能看到更多的源代码。3.把光标放到以下行上:fprintf(fptr, “%S”, scacStr);4.点击工具栏按钮或按F9,该行显示为高亮紫红色。(如果愿意的话,可通过Option→Color改变颜色。)5.选择View→Watch Window。CCS窗口的右下角会出现一个独立区域,在程序运行时,该区域将显示被观察变量的值。6.在Watch Window区域中点击鼠标右键,从弹出的表中选择Insert New Expression。7.键入表达式*scanStr并点击OK。8.注意局部变量*scanStr被列在Watch window中,但由于程序当前并未执行到该变量的main()函数,因此没有定义。9.选择Debug→Run或按F5。10.在相应提示下,键入goodbye并点击OK。注意,Stdout框以蓝色显示输入的文字。还应注意,Watch Window中显示出*scanStr的值。在键入一个输入字符串之后,程序运行并在断点处停止。程序中将要执行的下一行以黄色加亮。11.点击(Step Over)工具栏按钮或按F10以便执行到所调用的函数fprintf()之后。12.用CCS提供的step命令试验:■ Step Into (F2)■ Step over (F10)■ Step Out (Shift F7)■Run to Cursor (Ctrl F10)13.点击工具栏按钮或按F5运行程序到结束。2.7 使用观察窗口观察structure变量观察窗除了观察简单变量的值以外,还可观察结构中各元素元素的值。1.在watch Window区域中点击鼠标右键,并从弹出表中选择Insert New Expression。2.键入str 作为表达式并点击OK。显示着+str={…}的一行出现在Watch Window中。
CCS调试DSP常见错误及解决方法
CCS调试DSP常见错误及解决⽅法实验常见错误及解决⽅法1、启动CCS时出现如下错误:错误原因:以前在CCS setup⾥设置当前使⽤的平台为sdgo2xx(硬件仿真),或者同时设置为sdgo2xx与c2xx simulator,所以进⾏软件仿真时应设置当前正在使⽤的为c2xx simulator。
解决⽅法有两种:⽅法1:点击“终⽌”,然后重新设置CCS setup,将sdgo2xx移除。
⽅法2:点击“忽略”,然后在“Parallel Debug Manager”中Open菜单下选择c2xx simulator2、编译连接时出现如下错误:错误原因是:⽂件命名、⽂件夹命名或保存位置不正确。
⽂件命名:不能以数字开头(包括mak⽂件的名字)⽂件夹命名:不能为中⽂保存位置:项⽬⽂件(mak⽂件)存储的位置⼀定要与其它⽂件(C⽂件、asm⽂件、h ⽂件、cmd⽂件、等)放在同⼀⽬录下,且最好放在“x:\tic2xx\myprojects”⽬录下。
3、编译连接时出现如下错误提⽰:warning: entry point symbol _C_int0 undefined错误原因:⽤C语⾔开发的DSP程序在向⼯程⽂件添加⽂件时没有添加运⾏⽀持库⽂件rts2xx.lib注意rts2xx.lib的路径:在C:\tic2000\c2000\cgtools\lib⽬录下4、CCS与CCS setup均不能启动,提⽰:不能正确初始化程序或者CCS运⾏到某个地⽅后(例如编译连接后)不能停⽌,观察任务管理器,发现cc_app.exe占⽤CPU为100%,即CCS已经死了。
错误原因:CCS被病毒感染或破坏,或者多个版本CCS共存,相互⼲扰。
解决⽅法:⽅法1:重新启动电脑⽅法2:⽤运⾏正确的cc_app.exe程序替换被破坏的cc_app.exe程序。
5、编译连接通过,加载程序后,在运⾏时出现如下错误提⽰:错误可能原因:第⼀种可能:没有加载CMD⽂件第⼆种可能:CMD⽂件已加载,但CMD⽂件编写有问题,存储器配置、定位不正确第三种可能:⽤C语⾔编写的DSP程序,C初始化设置错误,已修改C Initialization 设置,⽅法:Project ——> Option——> Linker6、探测点设置不成功注意:①在设置探测点时应先加载程序②如下图所⽰,应先点击Probe Point中的选择框,使volume.c line 63——> NoConnection 被选中,然后在选Connect下拉菜单,找到相关联的数据⽂件,再点击Replace ,最后点“确定”。
DSP开发软件CCS及BIOS程序使用说明
第一节软件安装一、CCS2.0安装下面以TMS320C6711DSK 开发工具的安装为例说明。
图1-1图1-2图1-3第一步:将开发板所附带的Code Composer Studio(C6000)2.0软件光盘放入光盘驱动器,自动运行出现图1-1所示界面,进入软件安装步骤。
如光盘未自动运行,请进入光盘驱动器,并运行光盘根目录下的SETUP.EXE 程序。
第二步:按图1-2所示依次执行。
第三步:提示将正在运行其他软件关闭,如图1-4所示。
图1-4图1-5图1-6第四步:DSP Starter Kit End-User License ,阅读后请选择YES 按钮继续安装,如图1-4所示。
第五步:点击NEXT 继续进行安装,如图1-5所示。
第六步:建议在此处选择默认选项进行安装,如图1-6所示。
图1-7图1-8图1-9第七步:默认的安装路径为C:\ti ,如果需要可重新设定安装路径。
但是,必须处于硬盘根目录下(比如x:\),如图1-7所示。
第八步:点击next 进行下一步,如图1-8所示。
第九步:将TMS320C6711DSK 开发板与计算机进行硬件连接,加电源后点击确定按钮继续进行安装,如图1-9所示。
图1-10图1-11图1-12第十步:点击确定,如图1-10所示。
第十一步:点击FINISH 完成软件安装,如图1-11所示。
第十二步:如果是第一次安装CCS 软件,会出现要求重新启动计算机的画面,根据提示重新启动计算机,如图1-12所示。
图1-13第十三步:安装完成在桌面生成两个快捷方式图标,此即为CCS 6711 DSK Tools 软件的设置和执行图标,如图1-13所示。
二、DSK驱动程序的设置由于TMS320C6711DSK开发板使用的是并口线与计算机相连接,所以在设置之前要确认计算机的并口模式。
(后面我们将介绍在使用JTAG口仿真器情况下如何进行配置)。
在计算机启动时进入配置环境,将并口模式改为EPP或者是SPP(即standard 模式),因各计算机设置方法各异,故不在此详述,修改完后保存并重新启动计算机。
使用CCS软件开发DSP的流程
使用CCS软件开发DSP的流程1. 概述在进行DSP(Digital Signal Processor,数字信号处理器)开发时,使用CCS (Code Composer Studio)软件可以提供一套全面的开发环境和工具集。
本文将介绍使用CCS软件开发DSP的流程和基本步骤。
2. 准备工作在开始使用CCS软件开发DSP之前,需要进行一些准备工作,包括: - 安装CCS软件:前往官网下载最新版本的CCS软件,并按照官方指南进行安装。
- 选择合适的DSP平台:根据项目需求选择合适的DSP芯片,并了解该DSP芯片的技术规格和开发文档。
- 准备开发板:根据选择的DSP芯片,准备相应的开发板,并进行连接和配置。
3. 创建项目在CCS软件中创建一个新的项目是开始开发DSP的第一步。
以下是创建项目的步骤: 1. 打开CCS软件,点击“File”菜单,选择“New”的选项。
2. 在新建项目对话框中,选择“CCS Project”,并点击“Next”按钮。
3. 输入项目名称和存储路径,选择目标DSP芯片型号,并点击“Finish”按钮。
4. 编写代码一旦项目创建完成,可以开始编写DSP代码。
以下是编写代码的步骤: 1. 在CCS软件中打开新建的项目。
2. 在项目资源管理器中,选择“Source Files”文件夹,右键点击并选择“New”的选项。
3. 在新建文件对话框中,输入文件名称和文件类型(.c或.cxx),并点击“Finish”按钮。
4. 在新建的源文件中编写DSP相关的代码,可以使用CCS提供的开发工具和库函数。
5. 编译和调试完成代码编写后,需要对代码进行编译和调试。
以下是编译和调试的步骤: 1.点击CCS软件界面上的“Build”按钮,进行代码的编译和构建。
2. 在构建完成后,选择“Debug”菜单,点击“Start Debug Session”选项,进入调试模式。
3. 在调试模式下,可以设置断点、单步执行、查看变量和寄存器等操作,以调试和验证代码的正确性。
dsp_ccs的使用
1. CCS的安装
将CCS安装光盘放入CDROM驱动器中,运行光盘 根目录下的setup.exe,按照安装向导的提示将 CCS安装到硬盘中,默认安装目录为c:\ti。
安装完成后,在计算机桌面上创建“CCS 2 (‘C5000)”“Setup CCS 2 (’C5000)”两个 图标。
CCS安装完成之后,在第一次运行CCS软件之 前必须运行CCS设置程序。
支持多DSP调试。 断点工具,包括硬件断点、数据空间读/写断
点,条件断点(使用GEL编写表达式)等等。 探针工具(probe points),可用于算法仿真,
数据监视等。 剖析工具(profile points),可用于评估代码
执行的时钟数。
数据的图形显示工具,可绘制时域/频域波形、眼 图、星座图、图象等,并可自动刷新(使用Animate 命令运行)。
CCS是一个开放的环境,通过设置不同的驱 动完成对不同环境的支持。
CCS中集成了TI DSP的Simulator和Emulator 的驱动程序,用户可以根据需要有选择的进 行设置。
当使用其它公司的DSP产品时,需要索取并 安装相应的驱动程序。
2. CCS的文件组织
CCS安装完成之后,将在ccs安装目录下建立以下子目录: bin:应用程序目录 c5400\cgtools:ti代码产生工具目录 c5400\example:源代码例子目录 c5400\rtdx:实时数据交换文件目录 c5400\tutorial:ccs程序使用教程目录 cc\bin:ccs环境的程序文件目录 cc\gel:ccs中使用的gel文件目录 docs:存放ccs的相关说明文档 myprojects:可以存放用户的工程设计文档
TI DSP集成开发环境CCS的使用
DSP实验实验二TI DSP集成开发环境CCS的使用昆明理工大学信息工程与自动化学院电工电子教学实验中心主讲:杨秋萍讲师CCS是TI公司推出的用于开发DSP芯片的集成开发环境,它采用Windows 风格界面,集编辑、编译、链接、软件仿真、硬件调试以及实时跟踪等功能于一体,极大地方便了DSP芯片的开发与设计,是目前使用最为广泛的DSP开发软件之一。
一、CCS的简介CCS是一种针对TMS320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供环境配置、源文件编辑、程序调试、跟踪和分析等工具。
CCS有两种工作模式:1、软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。
2、硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。
本次实验主要采用软件仿真器模式。
二、CCS系统配置采用标准配置文件进行系统配置的步骤:步骤1:启动CCS配置程序。
双击桌面上的Setup CCS快捷图标,弹出对话框。
步骤2:清除以前定义的配置。
步骤3:选择与目标系统相匹配的配置文件。
步骤4:将所选中的配置文件加入到系统配置中。
步骤5:安装驱动程序。
点击“Intall a Device Driver ”,弹出选择器件驱动程序对话框。
步骤6:保存系统配置。
打开“File ”菜单,单击“Save ”按钮,将系统配置保存在系统寄存器中,完成CCS 的系统配置。
三、CCS 中常用文件名和应用界面1、常用文件名*.cmd —— 链接命令文件;*.obj —— 由源文件编译或汇编后所生成的目标文件;*.out —— 完成编译、汇编、链接后所形成的可执行文件,可在CCS 监控下调试和执行。
可供使用的配置加入配置按钮 钮系统配置窗口 安装驱动程序2、应用界面四、实验举例1. 创建新工程利用CCS 创建一个新工程,然后向该工程中添加源代码文件和库文件。
DSP_CCS3.3初学调试问题汇总(免费)
DSP CCS初学调试问题汇总1.DSP/BIOS应用程序调试在CCS2.0 的emulator写dsp/bios 的程序,编译链接无错误,而点击LOAD Program下载xxx.out完成时弹出如下对话框:RTDX target application does not match emulation protocol!Loaded program was created with an rtdx library which does not match the target device这将导致RTDX(实时数据交换)不能使用分析:RTXD可以在DSP/BIOS中使用,也可以脱离DSP/BIOS使用;目前CCS Simulator不支持RTDX,故RTDX必须在Emulator下使用,即还需要硬件仿真器和DSP目标板。
故这是由于下载BIOS/DSP程序时RTDX设置错误导致的;问题解决如下:把DSP/BIOS配置窗口中的input/output-->RTDX -real-Time Exchange settings的RTDX mode 改为JTAG(原来是simulator),重新编译后LOAD,上述警告消除,可以在模拟的情况下进行BIOS调试了。
PS:虽然simulator能编译运行DSP/BIOS程序,并能提供实时查询程序运行情况(主要是CPU负荷,时序,日志以及线程等)。
但实际开发DSP/BIOS应用程序时为了真实的了解目标板的各种信息,仅有Simulator(软件仿真器)是不行的,还需要使用Emulator(硬件仿真器)和DSP/BIOS插件(安装时已装入)。
2.RTDX应用程序调试RTDX测试DSP Target传输数据到PC机:a)创建工程,编辑源代码(.c/。
asm),加入头文件(.h),库文件(.lib)以及链接命令文件(.cmd)b)添加修改具有实时数据传输的RTDX语句包括:#include <rtdx.h>; RTDX头文件(rtdx.h)RTDX_CreateOutputChannel( ochan ); 定义一个全局的PC机数据输出通道,通道名可以任取TARGET——INITIALIZE();初始化DSP目标系统;RTDX_enableOutput( &ochan ); 使能输出通道写数据;status=RTDX_write( &ochan,&data,sizeof(data) ); 传送数据至PC;RTDX_disableOutput( &ochan ); 禁止输出通道传输数据。
TIDSP软件开发工具CCS的使用
TIDSP软件开发工具CCS的使用
在编写代码的过程中,可以使用CCS提供的调试功能进行调试。
CCS
支持硬件调试器和仿真器,可以与DSP硬件连接,并实时监控和调试程序
的执行。
可以设置断点、单步执行、查看变量的值和内存的内容等。
CCS
还提供了性能分析工具,可以分析程序的性能瓶颈,并进行优化。
除了调试功能,CCS还提供了一些辅助工具,如版本管理工具和构建
系统。
可以使用版本管理工具来管理和追踪代码的变更,并进行团队协作
开发。
构建系统可以自动构建和管理项目的编译过程,方便进行批量编译
和构建。
在开发完成后,可以使用CCS进行程序的烧录和调试。
CCS支持多种
烧录器和连接方式,可以将程序烧录到DSP芯片中,并进行实时调试和验证。
可以通过CCS提供的界面和控制命令来进行调试操作。
总之,TIDSP软件开发工具CCS是一款功能强大的DSP软件开发工具,提供了丰富的开发、调试和分析功能。
通过CCS,开发者可以方便地进行DSP软件的编写、调试和优化,提高开发效率和质量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-ml2: 等于-ml0加-ml1
-ml3: 缺省情况下将全部数据和函数作为far型
(六)建议使用的编译方式
Cl6x -gk -mt -o3 -mw -ss “filename”
方式1用于程序的调试,这种方式具有比较强的优化能力,并且支持符号调试。在编译的过程中不会发生错误。
可选的参数n给出这种pading的长度字节数。
(三)保留编译和优化信息的选项
-k:保留优化后生成汇编语言文件。
-s:汇编语言文件中加入优化信息,如果没有则加入C语言源程序作为注释。
-mw:在汇编语言文件加入软件流水线信息。
(四)有关调试和剖析的选项
-g:允许符号调试,在“out”文件中包含符号信息和行号信息,可以在c语言级别进行调试和剖析。使用联合使用-g、-mt和-o3可以保
{
for (j = 0; j < 16; j++)
sum += coefs[j] * input[i + 15 - j];
out[i] = (sum >> 15);
}
内层循环循环次数较少,运算量也不大,资源方面只占用了一个乘法器,一个cycle只使用一次乘法器,
而事实上我们可以在一个cycle内使用两个乘法器,所以还可以充分利用另外的一个乘法器。因此考虑将内层循环拆开来执行,如下:
-ms0:不使用冗余循环进行优化,减小程序的大小。一般情况下这个选项对程序大小的优化作用不明显。
-mh[n]:去掉流水线的epilog,减小程序的大小。这个选项的作用比较明显。但是有可能出现读取地址超出有效范围的问题,
所以要在数据段的开始和结尾处增加一些pading,或者在分配内存时保证数组的前面和后面一段范围内都是有效的地址。
由于生成的“out”文件中包含了符号信息和行号信息,所以比较大。
Cl6x -k -mgt -o3 -mw -ss “filename”
方式2用于程序的剖析(profile),这种方式的优化能力几乎最强(绝大多数情况下与方式3相同),
并且支持对程序进行profile。文件中只包含了符号信息和很少的行号信息,所以“out”文件比较小。
aReg += (double)(0xffff & L_var1) * ((double)L_shr(L_var2,16)) * 2.0;
/* (unsigned)low2 * (signed)high1 */
aReg += (double)(0xffff & L_var2) * ((double)L_shr(L_var1,16)) * 2.0;
而我们知道C6中一个packet中可以做两个乘累加运算,所以为了增加内部循环的运算,减少外部循环的层数,
我们可以将第一层循环的操作拆开,其负责的运算加入到内部循环中,也就是在内层循环中一次做四次的乘累加运算,
这样将多次操作形成pipeline,提高了运行效率,优化后的C代码如下:
tot = 4;
sum += coefs[1] * input[i + 14];
sum += coefs[2] * input[i + 13];
sum += coefs[3] * input[i + 12];
sum += coefs[4] * input[i + 11];
sum += coefs[5] * input[i + 10];
多重循环的特点是在优化器优化时只在最内层循环中形成一个pipeline,这样循环语句就不能充分利用C6的软件流水线,
而且对于内部循环的次数较少的情况,消耗在prolog和eplog上的cycle数也是不可忽视的。
针对这种状况可以考虑将多重循环拆开形成一个单层循环,可以拆外层循环也可以拆内层循环,
void fir2_u(const short input[], const short coefs[], short out[])
{
int i, j;
int sum;
for (i = 0; i < 40; i++)
{
sum = coefs[0] * input[i + 15];
一般视具体情况而定。这样就可以充分利用优化器构成的Pipeline。如下例:
void fir2(const short input[], const short coefs[], short out[])
{
int i, j;
int sum = 0;
for (i = 0; i < 40; i++)
sum += coefs[6] * input[i + 9];
sum += coefs[7] * input[i + 8];
sum += coefs[8] * input[i + 7];
sum += coefs[9] * input[i + 6];
sum += coefs[10] * inei的空间 主页博客相册|个人档案 |好友 查看文章
DSP 优化心得2009-12-05 19:30C6XX优化经验总结
一、c6x的编译的常用选项
(一)c6x的编译程序为“cl6x.exe”使用的方法
Cl6x [options] [filenames]
证能够进行符号调试的情况下最大限度的优化。
-mg:允许profile优化后的程序。 在“out”文件中包含符号信息和很少的行号信息。允许在c语言的函数基本进行剖析。
如果联合使用这两个选项,-g选项可能被忽略,结果与只用-mg相同。
(五)其它类型
-mln:生成大内存模式的程序。
-ml0:缺省情况下将集合变量(数组和结构)作为far型。
out[i] = (sum >> 15);
}
这样虽然代码长度增加了,可变成了单循环,所有的运算都参加到pipeline中来,在Piped loop kernal
中产生每一个cycle内都使用了两个乘法器,充分利用了DSPLeabharlann 部的资源,提高了运行效率。又如下例:
tot = 4;
sum += coefs[11] * input[i + 4];
sum += coefs[12] * input[i + 3];
sum += coefs[13] * input[i + 2];
sum += coefs[14] * input[i + 1];
sum += coefs[15] * input[i + 0];
Word40 aReg,aReg_ll,aReg_lh,aReg_hl;
aReg_ll = (Word40)_mpyu(L_var1, L_var2)>>16;
aReg_lh = (Word40)_mpyluhs(L_var1, L_var2);
/* >> 16 */
aReg = (aReg / 65536);
aReg = floor(aReg);
/* (signed)high1 * (signed)high2 */
aReg += (double)(L_shr(L_var1,16)) * (double)(L_shr(L_var2,16)) * 2.0;
Cl6x -k -mt -o3 -mw -ss “filename”
方式3用于最终的发行版本程序,可以对程序进行最强的优化,并且去掉了全部的符号和行号信息,所以“out”文件比较小。
由多个文件组成的程序应该编写makefile,将编译参数放在该文件中,并在其中说明使用的编译器的版本号。
(七)连接参数
使用-g选项,程序优化就不会出现错误,但是优化效果会下降。另外可以调整程序的表达方式,可能会避免编译器发生错误。
-pm:在程序级别进行优化。可以将所以文件联合在一起进行优化,主要有去掉没有被调用的函数、总是常数的变量以及没有使用的
函数返回值。建议由程序员自己进行这种优化工作。使用这个选项在win98下编译可能会出现找不到编译程序的情况。
(二)有关优化的选项
-mt:表示在程序中没有使用alaising技术,这使得编译器可以进行比较好的优化。
-o3:对文件级别进行最强的优化,一般在编译时应该使用这个选项。但是在个别情况下使用这个选项优化程序可能会出现
错误(-o2有相同现象,-o0和-o1不会出现错误)。可能是在优化循环,组织流水线的时候发生错误。如果有这种现象出现可以同时
y32[i] = s;
s = L_abs(s);
if (L_sub(s, max) > (Word32) 0)
max = s;
}
tot = L_add(tot, L_shr(max, 1));
}
在这个多层循环中一共有三层循环,而最内层的循环的运算量很小,只有一次乘累加操作,
Cl6x: 编译程序
Options: 编译选项
Filenames: C或汇编源文件
说明:
编译选项是一个字母或者两个字母,对大小写不敏感。
编译选项的前面需要有一个“-”符号。
一个字母的选项可以合并在一起。比如“-sgq”与“-s -g -q”相同。
两个字母的选项如果第一个字母相同也可以合并在一起。比如“-mgt”与“-mg -mt”相同。