将 printf 重定向到 UART 时,输出行呈阶梯状
Posted
技术标签:
【中文标题】将 printf 重定向到 UART 时,输出行呈阶梯状【英文标题】:When redirecting printf to UART, output lines have a stair-stepped appearance 【发布时间】:2021-12-20 15:45:32 【问题描述】:我刚开始使用 STM32 微控制器,我正在将 printf
的输出重定向到 UART。出于某种奇怪的原因,显示的终端不断添加代码中不存在的额外空格。我似乎找不到原因。
这是显示输出的截图;请注意阶梯状的外观,因为每个 printf
语句都被换成了一个比前一个缩进更深的新行:
这是我用来重定向printf
的代码:
int _write(int file, char *ptr, int len)
HAL_USART_Transmit(&husart3, (uint8_t*)ptr, len, HAL_MAX_DELAY);
return len;
我调用这段代码如下:
printf("program starting...\n");
int counter = 0;
while(1)
printf("counter = %d\n", counter);
counter++;
HAL_Delay(1000);
什么可能导致这种奇怪的包装行为,我该如何解决?
【问题讨论】:
Please do not upload images of code/errors when asking a question. 我将如何展示我面临的问题? 在终端程序中选择文本,复制并粘贴为文本。要保留格式,请使用
按钮、按 Ctrl+K 或将其括在三个反斜杠中 - 与代码相同。
【参考方案1】:
您的终端 - 像大多数终端一样 - 像旧打字机一样解释 \n
和 \r
:
\n
将滚轮移动一行
\r
将托架移动到纸张的左侧
输出显示只有滚轮被移动了,但小车没有回到最左边的位置。
两种选择:
输出\r\n
而不仅仅是\n
配置您的终端,使\n
足以移动到下一行并返回最左边的位置。
【讨论】:
以上是关于将 printf 重定向到 UART 时,输出行呈阶梯状的主要内容,如果未能解决你的问题,请参考以下文章
即使我将输出重定向到 /dev/null,printf 仍然会产生成本吗?