打印
[ZLG-ARM]

arm1138开发板串口例子,为何发送退格用"空格+退格"

[复制链接]
4735|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
javasdk|  楼主 | 2010-2-3 22:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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个格,看来的确是不对. 可是怎么也没想明白为什么要输出这个奇怪的空格呢?

相关帖子

沙发
易达口香糖| | 2010-2-4 10:21 | 只看该作者
还有这种事啊

使用特权

评论回复
板凳
javasdk|  楼主 | 2010-2-4 19:08 | 只看该作者
请高手帮助解答,不胜感激!

使用特权

评论回复
地板
juventus9554| | 2010-2-6 23:28 | 只看该作者
不懂,帮顶了……

使用特权

评论回复
5
linhai2009| | 2010-2-7 12:46 | 只看该作者
很奇怪,关注中……

使用特权

评论回复
6
贾君鹏子| | 2010-2-7 22:06 | 只看该作者
哎,这么多回复每一个实质性回答的

使用特权

评论回复
7
歪 歪| | 2010-2-9 15:48 | 只看该作者
你用串口监视分析仪抓下原始数据,一个字节一个字节分析,就知道原因了.
比如:你去掉空格,然后看发生了什么事情;
加上空格再分析一下,
分析仪不会删除任何字符,确保你能分析到原始数据.

http://www.armecos.com/freedown/ ... good/comspy-v20.rar

使用特权

评论回复
8
易达口香糖| | 2010-2-9 18:47 | 只看该作者
呵呵,不懂嘛,只能帮着顶顶帖子

使用特权

评论回复
9
javasdk|  楼主 | 2010-2-11 11:01 | 只看该作者
这里是ZLG的论坛, 居然没有高手来帮忙啊?
   高手快来啊

使用特权

评论回复
10
llljh| | 2010-2-11 11:18 | 只看该作者
都回家安顿过年去了……

使用特权

评论回复
11
lnlh21| | 2010-7-11 13:03 | 只看该作者
这个很简单啊,楼主要把流程搞懂
c = uartGetc();                              
uartPutc(c);                                        //  这里已经发了一个'\b'了
   if (n > 0)
            {
                *(--s) = '\0';
                n--;
                uartPuts(" \b");                            //  这里又发了一个\b 当然是2个了
            }

使用特权

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

本版积分规则

15

主题

28

帖子

0

粉丝