完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的项目在使用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两种方法目前都无效! |
|
相关推荐
1个回答
|
|
要实现在ESP32-C3上使用USB CDC-ACM进行调试,同时避免在putchar后自动添加换行符"n",可以按照以下步骤操作:
1. 首先,确保你的项目已经配置为使用USB CDC-ACM作为控制台输出。你已经通过`idf.py menuconfig`进行了配置,这是正确的。 2. 接下来,需要修改ESP-IDF的源代码,以禁用在putchar函数中自动添加换行符的功能。这可以通过修改`components/esp_system/port/soc/esp32c3/port.c`文件实现。 3. 在`port.c`文件中,找到`void _putchar(char c)`函数。这个函数是ESP-IDF中实现putchar的地方。 4. 修改`_putchar`函数,使其不再在每个字符后添加换行符。你可以通过以下方式实现: ```c void _putchar(char c) { if (c == 'n') { // 如果字符是换行符,发送回车符 esp_rom_uart_tx_one_char('r'); } else { // 否则,只发送当前字符 esp_rom_uart_tx_one_char(c); } } ``` 5. 保存修改并重新编译你的项目。 6. 烧录修改后的固件到ESP32-C3。 7. 现在,当你使用putchar函数发送字符时,它将不再自动添加换行符。 请注意,这种方法可能会影响其他依赖于自动换行功能的代码。如果你的项目中有其他地方使用了putchar,可能需要对这些部分进行相应的修改。 |
|
|
|
只有小组成员才能发言,加入小组>>
142个成员聚集在这个小组
加入小组530浏览 6评论
447浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
429浏览 5评论
425浏览 4评论
402浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 16:54 , Processed in 0.527854 second(s), Total 46, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号