DSP中LOG_printf()和printf()区别

        在开发的时候通常需要使用printf()来显示当前状态。但是printf()是非常花费时间的函数 而且不具有实时性。因为DSP需要对显示的数据进行分析,整理成合适的显示格式,并调用输出显示模块。所以在一个实时性要求很高的应用中,对printf()的调用可能会使系统根本无法满足实时要求。在DSP/BIOS中引入了一个相应的函数LOG_printf()。该函数是LOG对象的一个方法(或调用函数〕。LOG对象本质上是一个32bit的整形数,其高低16bit分别代表要显示的两个数据。

        在DSP中还可以采用System_printf();

       log模块是bios中重要的API模块;printf 和log_printf都是调试程序是才用到的;DSP虽也是CPU,但要处理打印数据,需分析数据类型,整理格式,调用printf输出到窗口,其汇编指令是几万条,所以在测试时实时输出性达不到;

       log_printf 输出到log监视窗口,为什么会快,其一原因是:它优先级很低,在cpu空闲时才会输出,比如循环输出数据,他不像printf必须输出,只有在碰到断点时,他才会输出。它虽是在CPU空闲时才执行,但输出顺序不会错,另外它不是idle,不参与比较优先级,遇到断点或单步调试时输出。

 

例1是分别使用printf()和LOG_printf()作比较的示范程序:

    #include <stdio.h>
    /* Header files needed for DSP BIOS */
    #include <std.h>
    #include <log.h>

    /* functions */
    void func_printf();
    void func_LOG_printf();

    /* Objects created by the Configuration Tool */
    extern LOG_Obj logTrace;

    /*======== main ======== */
    void main ()
    {
         return;
    }

    void func_printf(int time)
     {
         printf(″Strart printf demo\n″);
         printf(″Current time=%d \n″ , time);
         printf(″End printf demo\n″);
          return;
    }

    void func_LOG_printf(int time)
    {
        LOG_printf(&logTrace,″Strart LOG_printf demo\n″);
        LOG_printf(&logTrace, ″Current time=%d \n″ time);
        LOG_printf(&logTrace, ″End LOG_printf demo\n″);
        return;
    }

    func_printf()和func_LOG_printf()由DSP内时钟控制每100ms周期性地分别调用一次。通过对printf()和LOG_printf()运行时间作比较发现,在C6211运行在150MHz的情况下,printf()需花费4000个周期约26.7μs, LOG_printf()只花费36个周期约0.24μs。printf()比LOG_printf()多开销100倍以上的时间,因此LOG_printf()对于实时地显示一些运行状态是非常有帮助的。而且对于熟悉C语言的开发者来说,LOG_printf()的调用格式几乎与printf()完全一样。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值