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

[复制链接]
 楼主| eNsEmpire 发表于 2007-3-5 15:37 | 显示全部楼层 |阅读模式
在编写串口程序的时候是不是一定要用到以下这段代码才能将数据成功地发送到超级终端上去?<br /><br /><br /><br />void&nbsp;Uart_Printf(char&nbsp;*string,...)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;va_list&nbsp;ap;<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;str[256];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;va_start(ap,string);<br />&nbsp;&nbsp;&nbsp;&nbsp;vsprintf(str,string,ap);<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_SendString(str);<br />&nbsp;&nbsp;&nbsp;&nbsp;va_end(ap);<br />}<br /><br />我自己编写的代码如下:<br /><br />void&nbsp;Uart_Printf(char&nbsp;*string,...)<br />{<br />&nbsp;int&nbsp;temp;<br />&nbsp;while(1)<br />&nbsp;{<br />&nbsp;&nbsp;if(*string&nbsp;==&nbsp;'\0')<br />&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;temp&nbsp;=&nbsp;(int)*string;<br />&nbsp;&nbsp;string&nbsp;++;<br />&nbsp;&nbsp;Uart_SendByte(temp);<br />&nbsp;&nbsp;<br />&nbsp;}<br />}<br /><br />void&nbsp;Uart_SendByte(int&nbsp;sendbyte)<br />{<br />&nbsp;char&nbsp;senddata;<br />&nbsp;int&nbsp;i;<br />&nbsp;while(!(UTRSTAT0&nbsp;&&nbsp;0x2));&nbsp;//等待TX&nbsp;Buffer&nbsp;Register的数据发送完毕<br />&nbsp;for(i=0;i&lt1000;i++);&nbsp;&nbsp;//延时<br />&nbsp;senddata&nbsp;=&nbsp;(char)sendbyte;&nbsp;&nbsp;//转化成字符输出<br />&nbsp;UTXH0&nbsp;=&nbsp;senddata;<br />}<br /><br />在AXD调试中,我发现senddata的值是正确的,通过disassembly我也发现系统将senddata的值加载到了UTXH0,但超级终端里却没有显示出来。<br /><br />我用了第一段的代码后(vsprintf),发现超级终端显示了一些乱码(比之前什么都没有显示好多了)<br /><br />因此我有个疑问,是不是在编写串口程序的时候一定要有第一段的代码,才能将所需的数据显示在超级终端啊?<br /><br />
阿南 发表于 2007-3-5 20:56 | 显示全部楼层

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

  
rockos 发表于 2007-3-5 23:05 | 显示全部楼层

re

楼主,&nbsp;C语言中可变参数函数是有编码规则的,&nbsp;这个规则正如第一个函数所示.&nbsp;详细信息可以参考ansi&nbsp;c的标准,&nbsp;或者随便一本讲C语法的书,&nbsp;通常得到的模板都如第一个函数所示,&nbsp;大同小异.<br /><br />你自己写的函数不能正常使用变参功能,&nbsp;最终的输出结果是未知的.<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部