来自bq769x0 arduino库的示例代码无法编译



我尝试使用arduino库从github:https://github.com/LibreSolar/bq769x0-arduino-library/blob/master/bq769x0.h但它甚至不能编译。错误连接到:

#if BQ769X0_DEBUG
void printRegisters(void);      
#endif

当我注释它时,它会编译,但我当然需要它来调试。我认为这是一个简单的问题,但是我没有太多的编程经验。请帮助。

我试着评论它,我认为它的工作,但我没有看到任何结果在串行监视器

这叫做"条件编译"。如果定义了预处理器值BQ769X0_DEBUG,则声明并定义了bq769x0类成员函数printRegisters(即存在)。如果没有定义BQ769X0_DEBUG,则该函数不存在,并且尝试调用它是一个错误。

如果要使用该函数,请在包含头文件之前定义它:

#define BQ769X0_DEBUG   // Enable debug features
#include <bq769x0.h>
bq769x0 BMS(bq76920, BMS_I2C_ADDRESS);

我相当肯定这将工作在Arduino作为AFAIK,它不预编译库。

请注意,如果您决定通过不定义它来禁用调试功能:

// #define BQ769X0_DEBUG
#include <bq769x0.h>
bq769x0 BMS(bq76920, BMS_I2C_ADDRESS);
// BMS.printRegisters does not exist!

,以后调用该函数将会出错。要解决这个问题,您可以在代码中使用代码保护:

void loop()
{
BMS.update();  // should be called at least every 250 ms
#ifdef BQ769X0_DEBUG
BMS.printRegisters();
#endif
}

另一个选项是将库头从:

#if BQ769X0_DEBUG
void printRegisters(void);      
#endif

#if BQ769X0_DEBUG
void printRegisters(void);
#else
void printRegisters(void) {}
#endif

在本例中,如果没有定义BQ769X0_DEBUG,则创建printRegisters函数,但不做任何事情。调用它不会导致错误。

或者,创建自己的宏:
#ifdef BQ769X0_DEBUG
#define PRINT_REGISTERS BMS.printRegisters()
#else
#define PRINT_REGISTERS
#endif

然后将用法改为:

void loop()
{
BMS.update();  // should be called at least every 250 ms
PRINT_REGISTERS;
}

注意:这个宏被硬编码为使用BMS对象。需要修改才能使用其他的

相关内容

  • 没有找到相关文章

最新更新