导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    【XR806开发板试用】1. 优化 console 打印提示

    Wireless & Analog Series
    3
    5
    2058
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • iysheng
      iysheng LV 5 最后由 编辑

      刚开始接触 XR806, 根据官方指导說明一步步将 wifi_skylark demo 編譯了出來,使用 ckermit 終端查看打印,發現很凌亂。具體效果是:
      2021-12-20_17-15.png
      實在是不美觀,因爲之前碰到過類似的問題簡單來說就是沒有將 \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);
      +	}
       }
      

      測試之後發現打印信息變成了這樣:
      2021-12-20_17-33.png
      命令行的顯示效果還是會出現問題,繼續跟蹤代碼,修改部分:

      diff --git a/xr806/xr_skylark/src/console/console.c b/xr806/xr_skylark/src/console/console.c
      index 457ee23..72b5a0b 100755
      --- a/xr806/xr_skylark/src/console/console.c
      +++ b/xr806/xr_skylark/src/console/console.c
      @@ -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 的輸出就美觀多了。
      2021-12-20_17-15_1.png

      😊

      1 条回复 最后回复 回复 引用 分享 1
      • nihui
        nihui LV 6 最后由 编辑

        tio 添加 -m INLCRNL 参数将 \n 自动调整为 \r\n 防止输出乱掉

        tio -m INLCRNL /dev/ttyUSB0
        
        iysheng 1 条回复 最后回复 回复 引用 分享 1
        • C
          cszzlsw LV 4 最后由 编辑

          f2433919-95a5-4ba7-ac5f-a8f53c619120-image.png
          如果是用SecureCRT的话在串口选项上勾选这个选项可以完美解决

          iysheng 1 条回复 最后回复 回复 引用 分享 0
          • iysheng
            iysheng LV 5 @nihui 最后由 编辑

            @nihui 恩,厲害了,感謝。

            1 条回复 最后回复 回复 引用 分享 0
            • iysheng
              iysheng LV 5 @cszzlsw 最后由 编辑

              @cszzlsw 恩恩,這也是一種方法。

              1 条回复 最后回复 回复 引用 分享 0
              • 1 / 1
              • First post
                Last post

              Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

              行为准则 | 用户协议 | 隐私权政策