电子产业一站式赋能平台

PCB联盟网

搜索
查看: 124|回复: 0
收起左侧

没有串口或者串口不够用了如何打印信息

[复制链接]
匿名  发表于 2024-8-6 17:23:00 |阅读模式
输出调试信息是嵌入式开发中必不可少的调试利器,嵌入式开发的一个特点是很多时候没有操作系统,或者没有文件系统,常规的打印log到文件的方法基本不适用。
    最常用的是通过串口输出uart log,例如51单片机,只要实现串口驱动,通过串口输出就可以了。
    串口这种方法实现简单,大部分嵌入式芯片都有串口功能。但是这样简单的功能有时候却不是那么好用,比如:
一款新拿到的芯片,没有串口驱动时如何打印log?
某些应用下对时序要求比较高,串口输出log占用时间太长怎么办?比如usb枚举。
某些bug正常运行时会出现,当打开串口log时又不再复现怎么办?
一些封装中没有串口,或者串口已经被用作其他用途,要如何输出log?
    本文介绍单片机没有串口时,如何打印调试信息。1 输出log信息到SRAM    准确来说这里并不是输出log,而是以一种方式不使用串口就可以看到log。在芯片开发阶段都可以连接仿真器调试,可以使用打断点的方法调试,但是有些操作如果不能被打断就没法使用断点调试了。这时候可以考虑将log打印到SRAM中,整个操作结束后再通过仿真器查看SRAM中的log buffer,这样就实现了间接的log输出。
    本文使用的测试平台是stm32f407 discovery,基于usb host实验代码,对于其他嵌入式平台原理也是通用的。
    首先定义一个结构体用于打印log,如下:
  • typedef struct {   volatile u8     type;   u8*             buffer;             /* log buffer指针*/   volatile u32    write_idx;          /* log写入位置*/   volatile u32    read_idx;           /* log 读取位置*/}log_dev;    定义一段SRAM空间作为log buffer
  • static u8 log_buffer[LOG_MAX_LEN];    log buffer是环形缓冲区,在小的buffer就可以无限打印log,缺点也很明显,如果log没有及时输出就会被新的覆盖。Buffer大小根据SRAM大小分配,这里使用1kB。
        为了方便输出参数,使用printf函数来格式化输出,需要做如下配置。
  • 回复

    使用道具

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表