打印

printf函数与vsprintf函数的区别

[复制链接]
5249|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
醉心369|  楼主 | 2013-3-20 18:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
refee| | 2013-3-20 19:06 | 只看该作者
功能差不多的。附件是vsprintf源码供参考……

vsprintf.rar

3.99 KB

使用特权

评论回复
板凳
醉心369|  楼主 | 2013-3-21 13:56 | 只看该作者
refee 发表于 2013-3-20 19:06
功能差不多的。附件是vsprintf源码供参考……

printf函数由putchar函数实现的。
vsprintf函数是由putchar函数实现的吗?

使用特权

评论回复
地板
refee| | 2013-3-21 13:58 | 只看该作者
醉心369 发表于 2013-3-21 13:56
printf函数由putchar函数实现的。
vsprintf函数是由putchar函数实现的吗?

所以偶才在二楼贴上源代码让你自个看看的呀 :)

使用特权

评论回复
5
醉心369|  楼主 | 2013-3-21 14:36 | 只看该作者
refee 发表于 2013-3-21 13:58
所以偶才在二楼贴上源代码让你自个看看的呀

我看过了,里面有好多都看不懂,小弟的C语言水平看来很菜,也没有看到调用putchar()这个函数,但是我怕调用#include <stdarg.h>和#include <string.h>时候调用putchar(),还望指示一下。

使用特权

评论回复
6
醉心369|  楼主 | 2013-5-3 18:47 | 只看该作者
谁有puts()和printf()的源函数啊

使用特权

评论回复
7
醉心369|  楼主 | 2013-5-8 18:10 | 只看该作者
当调用puts()和printf()函数时,如果打开了串口中断,还需要什么特别注意的吗

使用特权

评论回复
8
ccxlslr| | 2013-5-8 21:07 | 只看该作者
printf 操作要硬件的,有硬件相关的代码
vsprintf  直接操作内存。

用vsprintf 可以实现在printf ,可以把信息打印在 LCD,串口,SPI接口,IIC,EEPROM 等设备上

使用特权

评论回复
9
ccxlslr| | 2013-5-8 21:09 | 只看该作者
unsigned int lcd_char_printf(const char *fmt, ...)
{
    char buf[PRINTF_BUFFER_SIZE];

    va_list vp;
    va_start(vp, fmt);
    vsprintf(buf, fmt, vp);

    return lcd_char_puts(buf);
}

一个字符液晶的程序,能工作的,当然前提是要写一个输出字符串的函数

使用特权

评论回复
10
醉心369|  楼主 | 2013-5-9 10:30 | 只看该作者
ccxlslr 发表于 2013-5-8 21:09
unsigned int lcd_char_printf(const char *fmt, ...)
{
    char buf;

这个函数是不是还少一条语句va_end(vp)呢?

使用特权

评论回复
11
ccxlslr| | 2013-5-10 08:54 | 只看该作者
醉心369 发表于 2013-5-9 10:30
这个函数是不是还少一条语句va_end(vp)呢?

就是,这个程序曾经在Keil C51下调试的,Keil下va_end什么都没干。

其它编译器,不知道有何影响。大家记得加上。

使用特权

评论回复
12
1189594| | 2013-5-16 16:57 | 只看该作者
我也想问一下    我在2440里看到打印函数
unsigned int Uart_printf(const char *fmt, ...)
{
    char buf[128];

    va_list vp;
    va_start(vp, fmt);
    vsprintf(buf, fmt, vp);
    Uart_printf(buf);
    va_end(vp);
}

但是vsprintf(buf, fmt, vp)没用到,这个函数居然还能用!而且还能打印正确的字符.....   求解?

使用特权

评论回复
13
醉心369|  楼主 | 2013-5-17 13:53 | 只看该作者
1189594 发表于 2013-5-16 16:57
我也想问一下    我在2440里看到打印函数
unsigned int Uart_printf(const char *fmt, ...)
{

关于2440,我不太了解。如果用c++编程,可以用你所说的函数。问一下,2440是什么,用的是什么语言编程?

使用特权

评论回复
14
1189594| | 2013-5-23 09:09 | 只看该作者
2440是ARM9   用C

使用特权

评论回复
15
醉心369|  楼主 | 2013-5-24 14:55 | 只看该作者
1189594 发表于 2013-5-23 09:09
2440是ARM9   用C

如果用C的话,支持函数重载吗?我记得不支持啊,Uart_printf()不是函数重载吗

使用特权

评论回复
16
醉心369|  楼主 | 2013-6-1 14:59 | 只看该作者
看到这样一句话,当串口中断打开时,在每次调用完printf()和puts()函数后,必须检测是否发送完毕,即检测TI是否为1,当发送完毕后要把TI清零,否则程序就会出错。
这是为什么啊

使用特权

评论回复
17
醉心369|  楼主 | 2013-6-13 11:28 | 只看该作者
自己顶一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

283

帖子

2

粉丝