我在RK3568测试printf耗时很好使用的是1500000波特率,但是别的平台115200的波特率printf耗时都没有这么高,如何解决?

img

我在RK3568测试printf耗时很好使用的是1500000波特率,但是别的平台115200的波特率printf耗时都没有这么高。
我们在使用调试串口波特率为1500000,发现APP程序 printf很耗时,觉得跟终端有关系。
我们在海思上测试 printf输出以下几个字符
hello world 0===00000000
耗时 13660(ns)海思 波特率115200
195416(ns) RK3568耗时1500000

请问这是什么问题影响的。

没有几十/几百毫秒,可以忽略不计

  • 以下回答由chatgpt基于相关博客总结生成:

    根据题目描述和参考资料,可以得出以下结论和解决方案。

    结论和分析

    在RK3568平台上,使用波特率为1500000时,使用printf输出的耗时非常高。根据参考资料中提供的信息,我们可以看出printf函数最终调用的是log_store函数。因此,问题的根本原因是log_store函数在高波特率下的耗时较长。

    解决方案

    1. 查看log_store函数源码: 根据参考资料,查看linux-source/kernel/printk/printk.c文件中的log_store函数源码,以了解其具体实现和可能存在的性能问题。
    2. 优化log_store函数: 根据log_store函数源码的分析,尝试对其进行优化,以减少在高波特率下的耗时。以下是可能的优化方向:
    3. 减少不必要的操作:检查log_store函数中是否存在可以省略的操作,如额外的日志处理或输出。
    4. 调整缓冲区大小:增大log_store函数中的缓冲区大小,以减少打印输出的次数,从而降低耗时。
    5. 使用更高效的输出方式:考虑使用更高效的输出方式来替代printf函数,如使用write函数直接向文件描述符写入数据。
    6. 调整内核参数:检查是否有相关的内核参数可以调整,以优化printf函数的性能。
    7. 使用其他日志输出方式: 如果对printf函数的性能优化困难,可以考虑使用其他的日志输出方式来代替printf,如使用dmesg命令查看内核日志,或者使用syslog来写入系统日志。

    以上是根据提供的信息给出的解决方案,建议根据具体情况进行尝试和调整。