嵌入式设备(STM32)自定义printf()函数

    这几天在调试无线通信程序时,在调试时出了问题,程序中直接调用printf("...");就可以通过串口在超级终端上显示。

    我觉得这个很神奇,就上网查了一些资料。原来,printf()函数是标准c库的一个函数(这个大家早就知道),它的实现很复杂,在这里我就不讲了,感兴趣的朋友可以看这篇文章http://blog.tianya.cn/blogger/post_show.asp?BlogID=462085&PostID=8363874 ,反正最后它是利用系统调用将格式好的数据送到标准输入输出设备,但是很多嵌入式设备上没有标准输入输出设备,通常都是串口。那么,为了让嵌入式设备也可以用printf(),我们可以在编译的时候调用缺省的c库,然后重写一下这两个函数:

     //发送数据

        int putchar (int c)
     {
       __io_putchar((char) c);//自定义的输出字符函数
       return c;
      }

      // 接收数据

int GetKey (void) {

_IO_getKey((char) c);//自定义的输入函数

return c;

}

这相当于最后printf()调用的是这两个函数。你就可以随心所欲的让printf()函数为你所用了,当然,如果读者嫌麻烦,也可以直接调用sprint();函数。

     那么,怎么设置缺省的C库呢,http://blog.sina.com.cn/s/blog_8f6fade701013ep4.html    这是KEIL工程里的设置,我也不说了。

     下面我就说下,如何用IAR编译器设置printf()函数,找到Project-》Options-》General Options —》 Library Options,设置如下即可:

posted @ 2013-04-03 11:20  醉剑客  阅读(2793)  评论(0编辑  收藏  举报