历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2021年10月21日 | stm32专题十二:DEBUG调试宏 C语言 调试宏

2021-10-21 来源:eefocus

调试宏在c编程中比较重要,通常用于前期测试打印调试信息,然后正式发布时,只需要修改宏,就能取消打印全部调试信息,非常方便。


fmt为希望输出的调试信息,比较关键的就是(fmt,...)和##__VA_ARGS__,__VA_ARGS__用于把...替换成宏并连接。


典型用法:


void DefaultFlashSet(void)

{

  // 若Flash标记地址的值没有被正确的写入,则重新写入,只会在全片擦除后执行

if ((InternalFlashRead(FLASH_SIGN_ADDR) != FLASH_WRITE_SIGN)) {

DEBUG_INFO("Flash擦除");

    InternalFlashWrite(FLASH_WRITE_ADDR, MAX_LED_NUM);

  }

else {

DEBUG_INFO("读取数据成功");

}

}

DEBUG_INFO("这是第%d条调试打印", 6);


串口打印结果

debug.h


/**

 ******************************************************************************

 *              Copyright (c) 2019 temp. All Rights Reserved.

 * @file    debug.h

 * @author  

 * @brief   调试宏头文件

 * @version V1.0

 * @data    2019/08/09

 * @note    None

 ******************************************************************************

 */

 

#ifndef __DEBUG_H

#define __DEBUG_H

 

#include

 

#define DEBUG

 

#ifdef DEBUG

 

#define DEBUG_LINE()

  printf("Log: [%s:%s] line = %dn", __FILE__, __func__, __LINE__)

#define DEBUG_INFO(fmt, ...)                                               

  printf("Log: [%s:%s] line = %dn" fmt "n", __FILE__, __func__, __LINE__,

         ##__VA_ARGS__)

 

#else

 

#define DEBUG_LINE()

#define DEBUG_INFO(fmt, ...)

 

#endif

 

#endif /* __DEBUG_H */


推荐阅读

史海拾趣

问答坊 | AI 解惑

学习单片机需要掌握的硬件问题,大家一起分享

学习单片机需要掌握的硬件问题,大家一起分享 就单片机学习过程中硬件设计方面的几个基本问题一起分享 1、电阻电容的封装形式如何选择,有没有什么原则?比如,同样是 104 的电容有 0603、0805 的封装,同样是 10uF 电容有 3216、0805、3528 ...…

查看全部问答>

施耐德触摸屏XBTGT5330之COM1或COM2口进行串口通讯得进

想利用XBTGT5330的COM口(com1或com2口)与第三方厂家的仪表进行串行通讯 该第三方的通讯协议符合modbus协议。其具体协议数据格式为: 开始符       指令代码          ...…

查看全部问答>

高人求救

请问A/D转换显示 S3C44BO 4路LCD显示曲线 屏幕显示三分钟 超过三分钟将右半屏移到左半屏 每秒采样60次,外接5V电压 请高手指点…

查看全部问答>

+++++++++GPRS数据串口转以太网

我的ARM开发板通过串口连接的GPRS MODEM上网,它也有以太网口,我想把接收的GPRS数据转发到以太网口上(它所在的局域网),请问难不难啊。…

查看全部问答>

单片机的汇编指令使用基础

1 .MOV A,Rn 寄存器内容送入累加器2 .MOV A,direct 直接地址单元中的数据送入累加器3 .MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器4 .MOV A,#data 立即数送入累加器5 .MOV Rn,A 累加器内容送入寄存器6 .MOV Rn,direct 直接地址单元中的数据送入寄 ...…

查看全部问答>

C6455 TCP2中TCPIC0~15有一半的寄存器写不进去

在CCS3.3下,查看寄存器的值,发现TCP2中TCPIC0~TCPIC15中,有一半的寄存器不能write,分别是TCPIC(1,3,5,7,9,11,13,15),是因为哪个控制器锁住了吗? 情况紧急,请求各位帮助,谢谢!…

查看全部问答>

LPC1500体验+(4)使用SWM将功能动态分配到任意引脚

本帖最后由 mars4zhu 于 2014-9-23 11:14 编辑 LPCXpresso1549试用报告——(3)使用SWM将功能动态分配到任意引脚 文档编号AN-0001-A0关键字LPCXpresso1549, LPCOpen, LPC1549, Keil MDK, ARM Cortex-M, SWM, 功能分配任意引脚摘要本文记 ...…

查看全部问答>

关于程序计数器PC的理解

51单片机的程序计数器PC的16位的也就是65536 ARM的程序计数器是32位也就是4G的空间地址 如何理解这写内容呢? PC指针是否就限制了程序的大小呢,或者说是程序的长短。 以STC89C52为例 程序存储空间是8K   PC的最大数是65536。 …

查看全部问答>

Micropython Timer回调函数的疑问

import pyb import time from pyb import Pin,Timer from DHT11 import DHT11 S=DHT11(\'Y2\') A=\'\'    def f(t):         global A,S         pyb.LED(1).toggle()     ...…

查看全部问答>

TI TMS320C2000 I2C模块参考指南

TI TMS320C2000 I2C模块参考指南 …

查看全部问答>