我重定向了printf,加入'\r',为何有些首字符不显示呢?
用的是51单片机,因为打开了串口的中断,printf无法显示了,于是我重定向了printf中的putchar,可是,char putchar(char c)
{
g_TI_flag = 0;
if(c=='\n')
{
//SBUF = '\r'; // send LF before CR
//while(0==g_TI_flag);
}
SBUF = c;
while(0==g_TI_flag);
return c;
}
如果注释掉上面的两行(在换行'\n',前面加上回车'\r'),就能够正常显示,如下printf("net_weight\r\n");
printf("net_weight\r\n");如果不注释掉上面的两行,则有些printf种的第一个字符就消失了。printf("x----------------------x\n", in_buff); 下面是中断函数void uart_interrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
in_buff = SBUF;
if('\r'==in_buff)
{
in_buff = 0;
g_cmd_arrive = 1;
}
g_in_buf_pointer++;
if(25==g_in_buf_pointer)
{
g_in_buf_pointer = 0;
memset(in_buff, 0, sizeof(in_buff));
}
LED1 = 0;
}
if(TI)
{
TI = 0;
g_TI_flag = 1;
LED2 = 0;
}
} 顶一下吧 额,看不太懂,帮顶一下 char putchar(char c)
{
if(c=='\n')
{
g_TI_flag = 0;
SBUF = '\r'; // send LF before CR
while(0==g_TI_flag);
}
g_TI_flag = 0;
SBUF = c;
while(0==g_TI_flag);
return c;
}
不用解释了吧。。。。。。 mark…
顶一个… 我觉得这个是串口软件的问题,你换一个试试。我隐约记得windows下要 "\r\n", unix下只要"\n"就可以换行了。谁来证实一下,免得误导了其他人。 百度了一下,证实了我的观点。
在代码中写的 "\n" 在windows下有时会被自动转换为 "\r\n",而有时就不会。我记得Edit 控件就需要显式地输出 "\r\n",而写文本文件时就会自动转换。
页:
[1]