能不能将串口打印函数重定向到自己软件模拟的uart上?

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

能不能将串口打印函数重定向到自己软件模拟的uart上?

Postby joseph_ji » Thu Jul 22, 2021 11:00 am

软件环境:esp-idf v4.3
硬件环境:esp32c3
问题描述:因为项目里面需要使用到3个uart:2个其他功能规划+1个日志打印调试;由于c3只有两个串口资源,所以我们打算用一个io引脚来模拟uart,用于打印日志;请问这种做法可以实现吗?可以将打印函数重定向到该模拟uart吗?如果可以,麻烦指导一下重定向需要修改哪几个函数?
ps:打印的函数主要涉及到printf()和ESP_LOGE()、ESP_LOGI()等函数;
目前我的软件已实现simulation_putchar()单字节打印,和simulation_printf()(模仿printf()函数),请问怎样能最方便的将代码里的printf()、ESP_LOGE()、ESP_LOGI()等函数重定向到我自己实现的打印函数上;

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: 能不能将串口打印函数重定向到自己软件模拟的uart上?

Postby ESP_Gargamel » Fri Jul 23, 2021 3:13 am

是可以重定向的,比如你可以参看:https://github.com/espressif/esp-qcloud ... er/src/log 里 log 的实现,是把 log 直接写到 flash 里,主要是 esp_log_set_vprintf 接口,具体你看下相关 sample。
但你用模拟 uart 的话,波特率应该上不去吧,会否影响系统整体性能。

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

Re: 能不能将串口打印函数重定向到自己软件模拟的uart上?

Postby joseph_ji » Fri Jul 23, 2021 9:12 am

ESP_Gargamel wrote:
Fri Jul 23, 2021 3:13 am
是可以重定向的,比如你可以参看:https://github.com/espressif/esp-qcloud ... er/src/log 里 log 的实现,是把 log 直接写到 flash 里,主要是 esp_log_set_vprintf 接口,具体你看下相关 sample。
但你用模拟 uart 的话,波特率应该上不去吧,会否影响系统整体性能。
感谢回复,我们只是拿模拟uart来打印日志,应该不会影响性能,系统正常运行之后,打印的就比较少了;关于重定向,我使用了你说的esp_log_set_vprintf()接口,确实可以重定向ESP_LOGI()、ESP_LOGE()...等函数;但是对于printf()这个标准库函数,并没有重定向;请问有什么方式可以把printf()函数也重定向吗?我们的工程较大,一个一个替换掉printf()实在太没效率了?

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: 能不能将串口打印函数重定向到自己软件模拟的uart上?

Postby ESP_Gargamel » Fri Jul 23, 2021 11:21 am

现在只有 uart0 和 自定义 uart 挂到 vfs 上,还有 USB Serial,没有考虑模拟 uart 的情况。
1、一种比较极端的方式是去 hack 一下 vfs_uart.c
2、如果可以用两个脚的话,可以用 GPIO18 和 GPIO19 的 USB Serial 来做打印,Component config → ESP System Settings → Channel for console output 下选 USB Serial/JTAG Controller

Archi.Xie
Posts: 7
Joined: Sat Oct 09, 2021 11:35 am

Re: 能不能将串口打印函数重定向到自己软件模拟的uart上?

Postby Archi.Xie » Sat Oct 09, 2021 1:35 pm

在Component config → ESP System Settings 下面没有找到 Channel for console output额?大佬有截图么?

yangff
Posts: 11
Joined: Thu Jun 22, 2017 2:11 pm

Re: 能不能将串口打印函数重定向到自己软件模拟的uart上?

Postby yangff » Sun Oct 10, 2021 5:04 am

Archi.Xie wrote:
Sat Oct 09, 2021 1:35 pm
在Component config → ESP System Settings 下面没有找到 Channel for console output额?大佬有截图么?
只有带usb的芯片才能用吧,s2 s3 c3这些

Who is online

Users browsing this forum: Bing [Bot] and 171 guests