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;
 }

 

 

posted on 2013-04-22 01:21  scdyxcc  阅读(2247)  评论(0编辑  收藏  举报