推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

固件printf重定向乱码问题

资料介绍

固件里的"printf"重定向:为什么有时候输出乱码 一、printf重定向是嵌入式常用技巧 嵌入式里,printf默认输出到串口(UART),靠"重定向"实现——把printf的输出重定向到串口发送函数(fputc)。很多人重定向后,发现输出乱码、丢字、卡顿,不知道问题出在哪。 这篇讲printf重定向的原理和常见问题。 二、printf重定向怎么做 实现fputc(或__io_putchar):把单个字符送到串口 printf内部调用fputc,把格式化好的字符一个个送到串口 所以重定向的关键是"fputc正确地把字符发到串口" cint fputc(int ch, FILE *f) { // 把ch通过串口发出去(等串口发送完成) return ch;} 三、printf重定向的常见问题 3.1 波特率不匹配 printf重定向到串口,串口波特率要跟上位机(串口助手)一致。波特率不匹配,输出乱码。 排查:确认串口波特率设置和上位机一致。 3.2 重定向函数没写好 fputc如果没正确等待串口发送完成(发一个字符没等发完就返回),字符可能丢失、乱码。 排查:fputc里要等串口发送完成(发送寄存器空、发送完成标志)。 3.3 阻塞(等串口发完) printf输出量大、串口慢(波特率低),fputc要等串口发完,阻塞主流程。printf多了,系统卡顿。 排查:控制printf输出量(别刷屏)、或改成非阻塞(用缓冲/DMA,但复杂)。 3.4 中断里用printf 中断里调用printf,阻塞(等串口发)+ 可能重入问题(前面聊过),造成中断响应慢、输出乱。 排查:别在中断里printf(置标志,主循环再输出)。 3.5 缓冲区溢出 printf格式化到内部缓冲区,如果格式串和参数不匹配、或输出太长,可能越界。

部分文件列表

文件名 大小
固件printf重定向乱码问题.docx 37K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载