在开发的时候通常需要使用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()完全一样。

DSP中LOG_printf()和printf()区别相关推荐

  1. DSP中两个延时函数的区别(转)

    在编程的时候可以用CCS自带的延时函数,在使用时我发现有两个延时函数都可以用: DELAY_US(1); DSP28x_usDelay(1); 在调用DELAY_US(1)这一函数时,必须要有: #i ...

  2. ccs用C语言进行printf时,DSP:CCS V6 TMS320F2812 使用printf函数

    使用Code Composer Studio  Version: 6.1.1.00022,建立TMS320F2812工程. /* * main.c */ #include int main(void) ...

  3. Go 学习笔记(46)— Go 标准库之 fmt(输入/输出格式化参数、Printf/Fprintf/Sprintf区别、Println/Fprintln/Sprintln 区别)

    1. 概述 import "fmt" fmt 包实现了类似 C 语言 printf 和 scanf 的格式化 I/O .格式化动作( verb )源自 C 语言但更简单. 2. P ...

  4. C语言中使用‘scanf’输入与‘printf’输出的几个例子

    C语言中使用'scanf'输入与'printf'输出格式及几个程序举例 初学者最常使用的就是键盘输入(scanf)和输出(printf) scanf的调用格式为: #include<stdio. ...

  5. C语言中 *.c和*.h文件的区别!

    C语言中 *.c和*.h文件的区别!      这是HR面试我的一道题,没技术上含量,不过细想起来,还是C语言的最基本的知识!俗话说,目标决定动力,细节决定成败! C文件就是C语言系列的源文件,而H文 ...

  6. java comparator相等_详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...

  7. php request time,php中time()与$_SERVER[REQUEST_TIME]用法区别分析

    php中time()与$_SERVER[REQUEST_TIME]用法区别分析 发布于 2015-01-26 08:56:46 | 143 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本 ...

  8. C语言中字符串和字符数组的区别

    C语言中字符串和字符数组的区别 1.基本概念 2.代码分析 3.总结 1.基本概念 字符串和字符数组很相似,但是有本质上的区别. (1) C语言中,字符串是双引号括起来的单个或多个字符的集合,编译器自 ...

  9. Python中爬虫框架或模块的区别

    Python中爬虫框架或模块的区别,我们在Python的学习过程中,需要不断的总结知识点,这样我们才能进步的更快一些. (1)爬虫框架或模块 Python自带爬虫模块:urllib.urllib2; ...

最新文章

  1. 线性代数:第二章 矩阵及其运算:逆矩阵、分块矩阵
  2. java 静态分派_Java中的静态分派与动态分派
  3. Extjs 4.2 +Struts2 实现数据动态加载
  4. 一家企业为何使用多家公司的防火墙
  5. 6月份美国域名总量新增近5.4万个 环比减少51%
  6. 嵌入式Linux系统编程学习之三vi编辑器
  7. 京东取消快递员底薪引热议 官方回应:试点更有激励性的业务提成
  8. 《计算机系统:系统架构与操作系统的高度集成》——3.2 处理器实现涉及什么...
  9. 接口测试Fiddler实战
  10. java用循环图形显示_请问如何在使用循环绘制图形时使每个图形的显示之间有一定的延迟时间?...
  11. 2019年最新移动互联网全行业排行榜!
  12. 什么时候需要档案_需要什么
  13. windows下的Zcash钱包(ZEC钱包)-zcash4win 1.0.12
  14. 软件测试 — 面试题
  15. openwrt 需要高级浏览器_斐讯K2P刷openwrt设置mentohust
  16. @Deprecated 的功能
  17. 从零开始PyopenGL(2): 简单立体图形绘制
  18. Application启动流程
  19. 孩子不听话家长怎么办
  20. 利用Python实现模糊查找

热门文章

  1. 超越YOLOv5,1.3M超轻量,高效易用,目标检测领域这一个就够了
  2. 从课堂走向实践还有多远?
  3. c语言编一个dll 用message box 弹出一个对话框,Qt学习之路(17): Qt标准对话框之QMessageBox...
  4. python爬虫好学不_Python爬虫好学吗?
  5. linux 版本察看 redh,GLOBK重要命令htoglb glred的翻译
  6. 普渡大学计算机专业,普渡大学计算机介绍
  7. django安装mysql_django+mysql安装和设置
  8. :empty css 可以用在哪些标签,CSS伪类:empty让我眼前一亮(实例代码)
  9. basler相机 ip linux,Basler 相机启动运行程序, Basler IP相机软件 - 其他软件 | Basler
  10. 基于html的数据库,基于HTML5的本地数据库与服务端数据库的协同研究