Page 1 of 1

ESP32-C3 CDC-ACM must printf "\n" after putchar

Posted: Fri Mar 04, 2022 2:49 am
by Archi.Xie
Hello 各位,

我的项目在使用ESP32-C3,目前在调试USB CDC-ACM,我的程序中程序中希望通过USB CDC-ACM来putchar(向上位机传输字符)和getchar(从上位机获取字符)即可,不希望putchar后边必须跟上换行符"\n", 请问有什么解决之道吗?感谢!

1. idf.py menuconfig -> Component config -> ESP System Setting -> Channel for console output -> USB Serial/JTAG Controlller

2. ESP32C3的USB口只可作为JTAG和CDC-ACM, CDC-ACM在上电进入SPI-Flash烧录模式时可作为烧录串口,
在上电进入正常模式下可作为标准Unix Console控制台, 可以执行标准Unix系统调用

3. Caution: 由于unix上标准输入输出都是带有缓存的, 一般是行缓存, 对于标准输出, 需要输出的数据并不
是直接输出到终端上, 而是首先缓存到某个地方, 当遇到行刷新标志或者该缓存已满的情况下, 才会把缓
存的数据显示到终端设备上, 实践证明, ESP32C3下编程 putc/putchar/printf只会将字符放到发送缓冲
区, 只有缓冲区存满了(4096字节)或者执行了printf("\n")缓冲区中的字符才会发送出去!

在标准Unix环境下解决的方法有:
a. fflush(stdout)刷新标准输出缓冲区
b. setvbuf(stdout,NULL,_IONBF,0)关闭stdout缓冲区

但是ESP32C3 USB Console是硬件实现, a/b两种方法目前都无效!

Best Regards!