原创 KEIL C51中的vsprintf不能正确输出

2009-4-8 00:13 6165 12 11 分类: 软件与OS

https://static.assets-stash.eet-china.com/album/old-resources/2009/4/7/1adff0a1-c24b-43e9-8883-ffd3ac0e5670.rar" target=_blank> 
 UART_Printf("LCM %d %d\r", 2, 5); 
 
 来做测试. Hello World语句输出, 但LCM的输出有问题. 主要是输出常量2,却变成512.怎么会这样,这样的输出我不知道用过多少次.
 
 void UART_Printf(char *fmt,...)
 {
  va_list ap;
 
  va_start(ap,fmt);
  vsprintf(string, fmt, ap);
  va_end(ap);
  UART_SendStr((char *)string); //等待直到串口发送完毕
 } 
 
 跟踪了一下, 在vsprintf(string, fmt, ap)之后,变量STRING的内容跟输出一样, 说明是这个函数有问题. 打开vsprintf的帮助提示, %d是定义unsigned int的输出, 把上面的2和5,先定义一个unsigned int变量,进行测试, 输出OK. 但我仅需要unsigned char类型的输出怎么办. 仔细看了一下文档, 当输出unsigned char变量时, 需要加入b前缀.这样上面的语句变成:
 UART_Printf("LCM %bd %bd\r", 2, 5); 
 这样输出就行了.最后输出: LCM 2 5
 附上我的测试项目文件,供需要的朋友应用.

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条