• 在MDK中使用 printf 函数


    microlib 提供了一个有限的 stdio 子系统,它仅支持未缓冲的 stdinstdout 和 stderr。 这样,即可使用 printf() 来显示应用程序中的诊断消息。

    要使用高级 I/O 函数,您必须提供自己实现的以下基本函数,以便与您自己的 I/O 设备配合使用。

    fputc() 

    为所有输出函数实现此基本函数。 例如,fprintf()printf()fwrite()fputs()puts()putc() 和 putchar()

    fgetc() 

    为所有输入函数实现此基本函数。 例如,fscanf()scanf()fread()read()fgets()gets()getc() 和 getchar()

    __backspace() 如果输入函数使用 scanf() 或 fscanf(),则实现此基本函数。Notemicrolib 中不支持的转换为 %lc%ls 和 %a

    下面是完整的资料:

    keil (我用的是realview mdk3.11)建立ARM的工程时其中有一项是选 use MicroLIB

     

    调整 microlib 输入/输出函数microlib 提供了一个有限的 stdio 子系统,它仅支持未缓冲的 stdinstdout 和 stderr。 这样,即可使用 printf() 来显示应用程序中的诊断消息。要使用高级 I/O 函数,您必须提供自己实现的以下基本函数,以便与您自己的 I/O 设备配合使用。fputc() 为所有输出函数实现此基本函数。 例如,fprintf()printf()fwrite()fputs()puts()putc() 和 putchar()fgetc() 为所有输入函数实现此基本函数。 例如,fscanf()scanf()fread()read()fgets()gets()getc() 和 getchar()__backspace() 如果输入函数使用 scanf() 或 fscanf(),则实现此基本函数。Notemicrolib 中不支持的转换为 %lc%ls 和 %a

     

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/laorenshen/archive/2009/11/07/4782339.aspx

     

    想在mdk 3.80a中用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式), 

    发现在Options里选上microlib之后,就不用关闭半主机模式了。

     

    int fputc(int ch, FILE *f)
     {
         //USART_SendData(USART1, (u8) ch);
         USART1->DR = (u8) ch;
         
         /* Loop until the end of transmission */
         while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
         {
         }

         return ch;
     }

     

     

  • 相关阅读:
    Linux下卸载openjdk,安装jdk
    dom4j移除节点不成功
    运费模版源码(.net)
    电子商城系统运费模板设计
    【转】js判断手机访问网页
    nopcommerce之一(结构分析)
    js阻止提交表单(post)
    s1=s1+1与s1+=1的区别
    .net中从GridView中导出数据到excel(详细)
    分布式事务中常见的三种解决方案
  • 原文地址:https://www.cnblogs.com/scdyxcc/p/3034821.html
Copyright © 2020-2023  润新知