全志科技
直播中

那年我十七_

11年用户 533经验值
私信 关注
[问答]

为什么XR806开发板使用ckermit终端查看打印的信息却很混乱呢

  • 刚开始接触 XR806, 根据官方指导說明一步步将 wifi_skylark  demo 編譯了出來,使用 ckermit 終端查看打印,發現很凌亂。具體效果是:

    實在是不美觀,因爲之前碰到過類似的問題簡單來說就是沒有將 n 識別出回車 r 的效果。這種現象的解決方法有多種
    這次我選擇了修改putchar() 的方法。通過一步步的跟蹤代碼,發現 console 的基本流程是:
int __wrap_putchar(int c)
     //  stdio_set_write(stdout_write)
        board_uart_write()
  • 我修改的部分在 stdio_set_write 函數,具體是:
  • diff --git a/xr806/xr_skylark/project/common/startup/gcc/retarget_stdout.c b/xr806/xr_skylark/project/common/startup/gcc/retarget_stdout.c
    index 487c75b..9cd725f 100755
    --- a/xr806/xr_skylark/project/common/startup/gcc/retarget_stdout.c
    +++ b/xr806/xr_skylark/project/common/startup/gcc/retarget_stdout.c
    @@ -175,7 +175,17 @@ static int stdout_write(const char *buf, int len)
       }
    #endif

    -  return board_uart_write(g_stdout_uart_id, buf, len);
    +  if (buf[len - 1] == 'n')
    +  {
    +    char r_ch[1] = {'r'};
    +    int rlen = board_uart_write(g_stdout_uart_id, buf, len);
    +    board_uart_write(g_stdout_uart_id, r_ch, 1);
    +      return rlen;
    +  }
    +  else
    +  {
    +      return board_uart_write(g_stdout_uart_id, buf, len);
    +  }
    測試之後發現打印信息變成了這樣:

    命令行的顯示效果還是會出現問題,繼續跟蹤代碼,修改部分:
    @@ -439,7 +439,16 @@ int console_write(uint8_t *buf, int32_t len)
       console_priv_t *console;

       console = &g_console;
    -  return HAL_UART_Transmit_Poll(console->uart_id, buf, len);
    +  if (buf[len - 1] == 'n')
    +  {
    +    uint8_t r_ch[1] = {'r'};
    +      HAL_UART_Transmit_Poll(console->uart_id, buf, len);
    +      return HAL_UART_Transmit_Poll(console->uart_id, r_ch, 1);
    +  }
    +  else
    +  {
    +      return HAL_UART_Transmit_Poll(console->uart_id, buf, len);
    +  }
    }

    /**
  • 打上以上連個補丁後,console 的輸出就美觀多了。



回帖(2)

乔丽娜

2021-12-28 15:28:54
tio 添加 -m INLCRNL 参数将 n 自动调整为 rn 防止输出乱掉
tio -m INLCRNL /dev/ttyUSB0
举报

许海明

2021-12-28 15:29:25

如果是用SecureCRT的话在串口选项上勾选这个选项可以完美解决。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分