打印

CCS中printf不输出的问题

[复制链接]
6967|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Bestend|  楼主 | 2013-10-16 10:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Bestend 于 2013-10-16 10:23 编辑

用片上的硬件定时器,最准确不过了。设置方法也很简单。如果你没有把片上的三个定时器全部用光的话,可以试试这种方法。下面的例子是以DM642芯片为例,跟其它芯片的主要区别是分频比不同而已,下文我会说到,这里使用timer0。
    加头文件:csl_timer.h,加了这个头文件后,它会自动添加头文件csl_timerhal.h,
    定义变量:句柄:TIMER_Handle hTimer0;
              最终的循环数:unsigned int baitime;
              一个结构体:
TIMER_Config baiConfig = {
    TIMER_CTL_RMK   
    (   
        TIMER_CTL_SPND_EMUSTOP,   
        TIMER_CTL_INVINP_NO,            
        TIMER_CTL_CLKSRC_CPUOVR8,      
        TIMER_CTL_CP_PULSE,            
        TIMER_CTL_HLD_NO,            
        TIMER_CTL_GO_NO,            
                                       
        TIMER_CTL_PWID_TWO,           
                                       
        TIMER_CTL_DATOUT_1,            
        TIMER_CTL_INVOUT_YES,            
        TIMER_CTL_FUNC_TOUT            
    ),      
0xffffffff,
0x0
};
这个结构体的很多语句都不重要,因为我们只是想用它的计时功能,什么中断呀,输入时钟,输出时钟,我们都不管,但要注意的其中:
(一)、TIMER_CTL_CLKSRC_CPUOVR8,说明DM642计时器的频率是CPU频率的8分之1,只要是C64的DSP都是这样,其他DSP使用TIMER_CTL_CLKSRC_CPUOVR4,
(二)、TIMER_CTL_HLD_NO,说明时钟有效
(三)、TIMER_CTL_GO_NO, 说明时钟虽然有效,但还没开启
(四)、0xffffffff,是时钟计时器想要达到的周期数,一旦计数器增加到这个数,时钟就启动中断程序了,但是我们只想计时,不想中断,当然要把它设置的越大越好,这里我把它设置为unsigned int的额定最大值。根据我的计算,它可以**57s不中断(对于600M主频的DSP)。如果你想检测的程序运行时间超过57s,那还是分段计时或改用其他方法统计时间吧。
(五)、0x0,这是计数器的初值,当然从0开始计时了,当然,你也可以写其他数。
这个结构体的其他选项就随便写吧。
接下来,调用一些程序:
hTimer0 = TIMER_open(TIMER_DEV0, TIMER_OPEN_RESET);  //开启文件
TIMER_config(hTimer0, &baiConfig);  //把刚配置好的文件赋给hTimer0
TIMER_start(hTimer0);  //开始计时
............要计时的程序段.....................
baitime=TIMER_getCount(hTimer0);  //读取计数器中的周期数
TIMER_pause(hTimer0);       //停止计数
printf("the time spended is %fs\n",(float)baitime*4/(3*100000000)); //将周期数转化成具体时间
由于C64 DSP的计数器时钟是CPU时钟的1/8,且我的DSP主频是600MHz,所以
具体时间=周期数/CPU主频/8,即为上面的式子,计算结果非常准确。
===============================================================================================
以上是我在网上看到的关于程序运行时间统计方法的教程,我将上面的程序COPY到一个for循环中想查看循环里我的算法所用时间,可是输出确是 请问这个什么原因造成的呢?

相关帖子

沙发
zhangmangui| | 2013-10-16 11:18 | 只看该作者
你先看看TIMER_getCount有没有得到周期

使用特权

评论回复
板凳
zhangmangui| | 2013-10-16 11:19 | 只看该作者
这应该还不是printf不输出的问题  
如果baitime不为零   
看看头文件stdio.h有没有添加

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

27

帖子

0

粉丝