打印

请教串口程序vsprintf函数问题!

[复制链接]
3411|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eNsEmpire|  楼主 | 2007-3-5 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在编写串口程序的时候是不是一定要用到以下这段代码才能将数据成功地发送到超级终端上去?



void Uart_Printf(char *string,...)
{
    va_list ap;
    char str[256];

    va_start(ap,string);
    vsprintf(str,string,ap);
    Uart_SendString(str);
    va_end(ap);
}

我自己编写的代码如下:

void Uart_Printf(char *string,...)
{
 int temp;
 while(1)
 {
  if(*string == '\0')
   break;
  temp = (int)*string;
  string ++;
  Uart_SendByte(temp);
  
 }
}

void Uart_SendByte(int sendbyte)
{
 char senddata;
 int i;
 while(!(UTRSTAT0 & 0x2)); //等待TX Buffer Register的数据发送完毕
 for(i=0;i<1000;i++);  //延时
 senddata = (char)sendbyte;  //转化成字符输出
 UTXH0 = senddata;
}

在AXD调试中,我发现senddata的值是正确的,通过disassembly我也发现系统将senddata的值加载到了UTXH0,但超级终端里却没有显示出来。

我用了第一段的代码后(vsprintf),发现超级终端显示了一些乱码(比之前什么都没有显示好多了)

因此我有个疑问,是不是在编写串口程序的时候一定要有第一段的代码,才能将所需的数据显示在超级终端啊?

相关帖子

沙发
阿南| | 2007-3-5 20:56 | 只看该作者

可以跟踪进行,看最后是否从串口中(UTXH0)输出数据,波特率对

使用特权

评论回复
板凳
rockos| | 2007-3-5 23:05 | 只看该作者

re

楼主, C语言中可变参数函数是有编码规则的, 这个规则正如第一个函数所示. 详细信息可以参考ansi c的标准, 或者随便一本讲C语法的书, 通常得到的模板都如第一个函数所示, 大同小异.

你自己写的函数不能正常使用变参功能, 最终的输出结果是未知的.

使用特权

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

本版积分规则

2

主题

1

帖子

0

粉丝