1 •进入CCS环境,装载已有工程,并load生成的.out文件,并找到要察看 代码执
行周期的代码处。如图1所示。
图1
1. 选择ccs的菜单Profiler中的enable clock如图所示。
*
Edit View £rojeel Reb虬雷
Profiler QEL Option lools C£F/I
Scitest. pjt
▼ ||口乱11童 Clock Setup.-. Vi ew Clock
Start New Session...
茄1 阳 a d S3 E B £
Files _J GEL files '_i Frojscts
-Scit«st. pjt (Debuf)
L J D^pend^nt Projacts
LJ DSP/BiaS Config _| Generated Files
-Include
哥 BSP261x_Adc.lt
interrupt voi {
UintlG 1; for(1=0;
童i riecioo 1 „ r_ „T J ______ ___ L
图2
2. 选择Profiler菜单下的clock setup子菜单,并在Instruction Cycle中输入你
第1页
的DSP时钟周期,它的单位为纳秒,例如,2407的系统时钟为40MHz,你就该
第2页
填入25,如果是2812系统时钟为150MHz,就该填入6.67ns,其他配置不动,然后 确定。如图3所示。
图3
3.选择Profiler菜单下的Start New Session子菜单,出现如图4所示的对话框, 可以改名字,也可以不改,本例中不修改,直接确定。
Profile Sessi^ . 冈 图4
4.通过第四部设定后就出现了如图 5所示的一个窗体
这个窗体中,有四个选项卡,其中 Files为以源文件列出统计数据,Fu nctio ns选 项卡用于剖析程序中的函数,Ran ges用于剖析一段连续的代码,Setup用于设置 开始点和结束点,用于剖析不连续的代码。
窗体的左边按钮的含义为:(这里介绍主要的)
Profile All Functi ons
剖析所有的函数
建立剖析区域
设置开始点 媚 Create Setup End Fointj
设置结束点。
在窗体中剖析数据有一个表格,用红框圈起来的,每个表格的字段名的含义为:
Code size:剖析代码的大小,以程序存储器最小可寻址单元为单位,此值在剖析 过程中不会发生变化。
第3页
In cl. Count:在统计过程中,程序运行进入剖析代码段的次数
Incl. Total:在统计工程中剖析代码段消耗的所有时钟周期(如果是统计时钟周期 的话,CCS还可以统计子程序调用等其他计数,统计其他特性则显示相应的值)。 Incl. Maximum:执行剖析代码段一遍(包括在剖析代码段中对子程序的调用)
耗的最大时钟周期(由于每次进入剖析代码段的初始条件不同等原因, 剖析代码段消耗的时钟周期可能不同);
In cl. Minim um:执行剖析代码段一遍(包括在剖析代码段中对子程序的调用) 消耗的最小时钟周期
Incl. Average:剖析代码段执行一遍(包括在剖析代码段中对子程序的调用) 消耗 的平均时钟周期。--
以上这三个就是用户关心的代码执行的时钟周期。
Excl. Count:在统计过程中,程序运行进入剖析代码段的次数,与
Incl.Count的值
消
每次运行
相同。
Excl. Maximum:剖析代码段执行一遍(不包括在剖析代码段中对子程序的调用) 消耗的最
大时钟周期。
Excl. Mi nimum:剖析代码段执行一遍(不包括在剖析代码段中对子程序的调用) 消耗的最
小时钟周期。
Excl. Average:剖析代码段执行一遍(不包括在剖析代码段中对子程序的调用) 消耗的平均时钟周期。 5. 以剖析函数为例,找到该函数,然后将光标放在该函数的函数名上,选择建 立剖析区域按钮,图中用红框框起来的那个按钮。如图
6所示。
第4页
L
f LIA
t 艺D«bug. Fr 6£il*r GEL Grptiui Teel a ESF/SIflS IdfL&ir 斟 Lp
[SeiUslftjt
二J|D 由 nt
皋阳(3 g S3 HI A W d 沪
Filts
」死L files ■_j Frt&Jiclt
a
lntG/Tupt vo】日 gaibTxFi Eol^rlvoitj ) Seit«xtKjijt (Debug) I^J
leperideiLt Projects CJ wr/eaas Cwtu I_| Gtner^isii P i les
-U Incl-ud« 耳 DSRa.lM_l.4e. k s]
BSFSSlx^CpaTjntrs. Ji jfl呻曲讣』応ML 1埼 h f] h
目 D5T2SLid_Dmfli& h 到嗓粉厲_EC* h S] J3S^81x_Ev_h 劉感档心5】\"h 宣]DSf^Slji_51-db41Fr( o lsa» f 列 D5T23lT4_GpiG. K 司 rerakKjrtti h =| BS曲be Fi^trl. L
UintlB i;
for(i-0: 1< S: L^+) {
\"Send dat
ScibR4ff^SClTXBUF-ed4UB Ell:
for(i\"D^ 1< 8; 1++)
{
Z/I ncrsTtisn t
sdataB[L] * (Bd4taB[i]-1) & DxOOFFi Scjbaftgs.SCrfFTX.bit.^OTcLRi-lj
PieCtrLRegs.PIEACR.all1-OalQO; }
interrupt vc>id 3Ci bRxFi fpl-^r (VQI d )
// Cl«4r In, ” Issue PI
'File阴ew ------- -- —^― --------- ------- - L 嘴 1!E Fmi-ct t outs | (Code Size Count Ind. Tetal Incl. No...
1M1.. HI... IELCI. \"... Eicl. T«td. Scittil frul 'rt«U Frefalt km
图六。
出现对话框,如图7所示,因为我们做的是
function,所以不用修改,如果 做的是一段代码,只要把下拉菜单里的 function改成Range即可。
6.
图7
7. 点击0K后出现,如图8所示,各个字段已经被赋予了初值。
第5页
|=] DSFSgLsrJfl^rp. h 1=1 DSFZBIK Pi eCtrl, h v
interrupt void scibRzFifoIer(void)
D File Viaw p^Bookmarks FwriftiotLS -Seiteit. CodA Size lacl. TotiL 0 0 lael. Nt... 0 :Ind.. Hi... 0 laid. M... 0 Eul. T Q ECIMMF i fol =r () I
图8
8. 接下来运行程序RUN,就可以剖析出你所选中的代码的执行周期了。如图所 示。且这些值是随着程序运行的时间而变化的,动态显示。
图9
值得注意的是,图中显示的是时钟周期,不是时间,要看时间的化,用时钟 周期乘以前面设定的时钟周期 ns值,如6.67ns,就是最终函数执行的时间了
第6页
因篇幅问题不能全部显示,请点此查看更多更全内容