У меня есть проект, который включает в себя разговор с чипами OneWire (DS2431) через коммутатор I2C (PCA9548). То, что я хочу сделать, - это правильно настроить коммутатор (просто напишите байт в его регистр состояний), затем используйте mbed-штырь SDA для связи OneWire. Коммутатор не заботится о линии SDA (он может даже передавать DC в обоих направлениях), и я успешно тестировал его с OneWire. Проблема заключается в переключении программного обеспечения с I2C на OneWire на тот же вывод.
Я пробовал это простым способом: создание глобального экземпляра I2C, затем экземпляр OneWire, но последний всегда перегружает предыдущий, так что я могу либо работать с I2C, либо OneWire. Есть ли способ уничтожить один экземпляр и создать его снова?Как я могу переключиться с I2C на OneWire на тот же вывод на mbed?
1
A
ответ
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();
}
Инстанцирование другого экземпляра I2C, необходимо настроить контакты снова на конструкторе. Я не думаю, что уничтожение необходимо (или даже реализовано для установки предыдущей конфигурации) – xvan