Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

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

    Wireless & Analog Series
    3
    5
    2058
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • iysheng
      iysheng LV 5 last edited by

      刚开始接触 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 Reply Last reply Reply Quote Share 1
      • nihui
        nihui LV 6 last edited by

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

        tio -m INLCRNL /dev/ttyUSB0
        
        iysheng 1 Reply Last reply Reply Quote Share 1
        • C
          cszzlsw LV 4 last edited by

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

          iysheng 1 Reply Last reply Reply Quote Share 0
          • iysheng
            iysheng LV 5 @nihui last edited by

            @nihui 恩,厲害了,感謝。

            1 Reply Last reply Reply Quote Share 0
            • iysheng
              iysheng LV 5 @cszzlsw last edited by

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

              1 Reply Last reply Reply Quote Share 0
              • 1 / 1
              • First post
                Last post

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

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