2016-03-14 7 views
1

У меня есть проект, который включает в себя разговор с чипами OneWire (DS2431) через коммутатор I2C (PCA9548). То, что я хочу сделать, - это правильно настроить коммутатор (просто напишите байт в его регистр состояний), затем используйте mbed-штырь SDA для связи OneWire. Коммутатор не заботится о линии SDA (он может даже передавать DC в обоих направлениях), и я успешно тестировал его с OneWire. Проблема заключается в переключении программного обеспечения с I2C на OneWire на тот же вывод.
Я пробовал это простым способом: создание глобального экземпляра I2C, затем экземпляр OneWire, но последний всегда перегружает предыдущий, так что я могу либо работать с I2C, либо OneWire. Есть ли способ уничтожить один экземпляр и создать его снова?Как я могу переключиться с I2C на OneWire на тот же вывод на mbed?

+0

Инстанцирование другого экземпляра I2C, необходимо настроить контакты снова на конструкторе. Я не думаю, что уничтожение необходимо (или даже реализовано для установки предыдущей конфигурации) – xvan

ответ

0

Вы можете сделать это несколькими способами, но одним из самых простых способов является объявление экземпляра I2C и OneWire внутри вашей основной функции.

Если вам нужно получить доступ к экземпляру 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(); 
}