代码调试之串口打印

Posted 迷途小菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码调试之串口打印相关的知识,希望对你有一定的参考价值。

以前习惯用jlink调试代码,最近发现jlink老是出现问题,丢固件、无法仿真等等,甚是苦恼,无奈用串口打印的方式来替代jlink调试;

 

串口调试需要使用到半主机模式,具体的调用代码如下:

#pragma import(__use_no_semihosting)

struct __FILE
{
    int handle;

};

FILE __stdout;

void _sys_exit ( int x )
{

    x = x;
}

int fputc ( int ch, FILE *f )
{
    while ( USART_GetFlagStatus ( USART2, USART_FLAG_TC ) == RESET );

    USART_SendData ( USART2, ( uint8_t ) ch );
    return ch;
}

 

之后便可以使用串口(串口2)进行打印数据了,数据直接可以显示到PC端或者其他串口接口设备,为方便调试添加如下调试信息:

#define DEBUG_PRINT_INFO(...) printf(__VA_ARGS__)
#define DEBUG_PRINT_VAR(X, ...) printf("file: "__FILE__",function: %s"", Line: %d:"X"\r\n",__FUNCTION__,__LINE__,##__VA_ARGS__) 

第一个函数只是打印我们自定义的信息,第二个函数除了可以打印我们自定义的信息,还可以打印当前运行到的文件、函数名、行号信息,方便了问题查找。

 

以上是关于代码调试之串口打印的主要内容,如果未能解决你的问题,请参考以下文章

使用RTT代替UART,把你的JLink变成串口调试助手~

rk3399修改调试串口

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

PHP代码-psysh调试代码片段工具

3D打印Marlin2.0固件源代码分析之参数存储方式实现

Proteus仿真基于VSM 串口printf调试输出示例