easyarm1138(cortex m3)开发板的串口例子,为什么发送退格要用"空格+退格"
例子是在这里 \CD_ARM1138\1138\EasyARM1138开发指南\【03】几个基本例程\【E】UART控制台
这个控制台完成的是通过串口9600bps, 发送on/off指令, 从而控制开发板上的led on/off
关键函数在这里 :
int uartGets(char *s, int size)
{
char c;
int n = 0;
*s = '\0';
if (size < 2) return(0);
size--;
for (;;)
{
c = uartGetc(); // 接收1个字符
uartPutc(c); // 回显输入的字符
if (c == '\b') // 遇退格<Backspace>修改
{
if (n > 0)
{
*(--s) = '\0';
n--;
uartPuts(" \b"); // 显示空格和退格<Backspace>
}
}
if (c == '\r') // 遇回车<Enter>结束
{
uartPuts("\r\n"); // 显示回车换行<CR><LF>
break;
}
if (n < size) // 如果小于长度限制
{
if (isprint(c)) // 如果接收到的是可打印字符
{
*(s++) = c; // 保存接收到的字符到缓冲区
*s = '\0';
n++;
}
}
}
return(n); // 返回接收到的有效字符数目
}
首先, 电脑上的串口接收程序就要很特别,不能用我们平常用的sscom32调试, 而要用超级终端,
第二,就是很奇怪的
uartPuts(" \b"); // 显示空格和退格<Backspace>
要先输出一个空格再跟着\b, 我斗胆改了一下,将空格去掉,谁知道一个backspace居然向前退了2个格,看来的确是不对. 可是怎么也没想明白为什么要输出这个奇怪的空格呢? |