c++ - 如何在 mbed 上的同一引脚上从 I2C 切换到 OneWire?

标签 c++ destructor i2c mbed

我有一个项目涉及通过 I2C 开关 (PCA9548) 与 OneWire 芯片 (DS2431) 通信。我想做的是正确配置开关(只需将一个字节写入其状态寄存器),然后使用 mbed SDA 引脚进行 OneWire 通信。该开关不关心 SDA 线路(它甚至可以在两个方向上通过 DC)并且我已经成功地使用 OneWire 对其进行了测试。问题是在同一引脚上将软件从 I2C 切换到 OneWire。
我已经尝试过简单的方法:制作一个全局 I2C 实例,然后是一个 OneWire 实例,但最后一个总是破坏前一个,这样我就可以让 I2C 或 OneWire 工作。有没有办法销毁一个实例并重新创建它?

最佳答案

您可以通过几种方式实现它,但最简单的方式之一是在您的主函数中声明 I2C 和 OneWire 实例。

如果您需要访问main之外的OneWire实例,您可以将它分配给一个指针。

这是一些伪代码:

OneWire *oneWireGlobal;

void func1() {
    oneWireGlobal->writeBit(0xFF);
}

void main() {
    I2C i2c(I2C_SDA, I2C_SCL);

    [I2C operations here...]

    OneWire oneWire(I2C_SDA);
    oneWireGlobal = &oneWire; // Be sure to do this before accessing "oneWireGlobal"

    [oneWire operations here...]

    func1();
}

关于c++ - 如何在 mbed 上的同一引脚上从 I2C 切换到 OneWire?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35990331/

相关文章:

c++ - 在现代 C++ 中处理中型字节数组的正确方法是什么?

c++ - 数据库打不开错误qt c++

linux - 如何将 IOCTL 从 i2c-dev.c 转发到适配器驱动程序 (i2c-rt3352.c)

c++ - 在调用析构函数之前对象的生命周期结束了吗?

通过 SMBus/I2C 更改带有 bcm2835 的 mlx90614 从机地址

c++ - 对`i2c_smbus_read_word_data(int, unsigned char) 的 undefined reference

c++ - 处理使用 new 运算符创建的数组时出现问题

C++ 标准没有说明枚举类的 operator!=() 和 operator==()

c++ - C++中的对象销毁

C++ 抽象类析构函数