关于 C语言的问题

eduqh 2009-12-06 06:46:42
大家好:

下面的这段代码是在ADS下面编译的

Uart_Printf("\nNow, Downloading [ADDRESS:%xh,TOTAL:%d]\n");

串口输出显示:Now, Downloading [ADDRESS:190h,TOTAL:400]

如果改成:

Uart_Printf("\nNow, Downloading [%xh,%d]\n");

串口输出显示:

Now, Downloading [190h,400]

请问大家里面的190h和400是怎么来的?
请高数指教。


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

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

void Uart_SendString(char *pt)
{
while(*pt)
Uart_SendByte(*pt++);
}


void Uart_SendByte(int data) //若:void 则:Error :type disagreement for 'Uart_SendByte'
{
if(whichUart==0)
{
if(data=='\n')
{
while(!(rUTRSTAT0 & 0x2));
Delay(10); //because the slow response of hyper_terminal
WrUTXH0('\r');
}
while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
Delay(10);
WrUTXH0(data);
}
else if(whichUart==1)
{
if(data=='\n')
{
while(!(rUTRSTAT1 & 0x2));
Delay(10); //because the slow response of hyper_terminal
rUTXH1 = '\r';
}
while(!(rUTRSTAT1 & 0x2)); //Wait until THR is empty.
Delay(10);
rUTXH1 = data;
}
else if(whichUart==2)
{
if(data=='\n')
{
while(!(rUTRSTAT2 & 0x2));
Delay(10); //because the slow response of hyper_terminal
rUTXH2 = '\r';
}
while(!(rUTRSTAT2 & 0x2)); //Wait until THR is empty.
Delay(10);
rUTXH2 = data;
}
}
...全文
118 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
freshui 2009-12-08
  • 打赏
  • 举报
回复
Uart_Printf("\nNow, Downloading [ADDRESS:%xh,TOTAL:%d]\n");
函数Uart_Printf原先一般是
Uart_Printf(char *fmt, ...)
程序分析fmt字符串,每看到一个%号,就分析它后面的一个字符是什么
如果是X,它就安int方式从栈上取一个参数,然后将其值转换成十六进制ascii值的方式从串口打出来,如果是c,那他就按char型取一个参数,以此类推

如果你函数后面没有给需要的参数,它还是从栈上拿,就过就是乱码
当然说乱码只是一种宏观的说法,特定程序一般这个值还是比较固定,因为栈你一直在用,不会被清掉的,打印的值就是你上次使用过或者马上将要给别的code使用的的栈上的数据
z569362161 2009-12-07
  • 打赏
  • 举报
回复
看高人解答。
hbvanguard 2009-12-06
  • 打赏
  • 举报
回复
分析程序后发现Uart_SendByte()函数里面的rUTRSTAT0 ,rUTRSTAT1,rUTRSTAT2几个变量不清楚内部结构,
猜测应该是以10毫秒的频率检测串口上收到的数据,然后打印出来。
ADDRESS:190h,//发送数据的地址源
TOTAL:400 //数据个数
  • 打赏
  • 举报
回复
是栈上的2个数据。
logiciel 2009-12-06
  • 打赏
  • 举报
回复
正常情况应该在以下语句中指定2个变量(或表达式),如:

Uart_Printf("\nNow, Downloading [ADDRESS:%xh,TOTAL:%d]\n", x1, x2);

现在没有指定,该语句仍可执行,但打印随机数,如190h和400。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧