2017-10-05 1 views
-3

J'essaie d'utiliser un DS18B20 multiple avec un Arduino. Dans la plupart des exemples, le capteur est initalized comme ceci:Indirection: Arduino

#define ONE_WIRE_BUS 2 
OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature sensors(&oneWire); 
sensors-> begin(); 

Pour bus multiple, je peux ajouter un autre appareil:

#define ONE_WIRE_BUS_B 5 
OneWire oneWire_B(ONE_WIRE_BUS_B); 
DallasTemperature sensors_B(&oneWire_B); 
sensors_B-> begin(); 

Depuis mon programme, je ne sais pas combien de bus, et quel GPIO ils vont utiliser, j'ai essayé d'utiliser indirection (pour un maximum de 5 bus).

OneWire* onewire_bus[5];       
DallasTemperature* ds_bus[5]; 

J'initialize différents bus avec:

onewire_bus[0] = new OneWire(2); 
ds_bus[0] = new DallasTemperature(onewire_bus[0]); 
ds_bus[0]-> begin();   

...

onewire_bus[1] = new OneWire(5); 
ds_bus[1] = new DallasTemperature(onewire_bus[1]); 
ds_bus[1]-> begin();   

Cette approche fait le gel du conseil d'administration, ce qui est clairement un symptôme de mauvais adressage.

Quel est le problème avec la façon dont j'utilise l'indirection?

+1

c ou C++? Quelle est la question? – user463035818

+0

Veuillez fournir [mcve]. Je ne vois rien de manifestement faux (en termes de gestion des pointeurs) dans le code affiché. –

+0

La question ne concerne pas le programme écrit dans [tag: c], donc ne le marque pas. –

Répondre

0

Merci pour vos commentaires. Ce n'était pas un problème de mémoire complet, mais cela m'a conduit à l'erreur. Il s'agissait d'un problème matériel: Il semble que certaines données n'étaient pas stockées correctement dans une partie de la SRAM ... J'ai précédemment observé que certaines chaînes n'étaient pas affichées correctement (ce n'était pas un problème car il s'agissait uniquement de messages de débogage Ce n'était pas vraiment un problème d'indirection, mais l'indirection m'a fait utiliser la mauvaise partie de la mémoire. Changement de puce résolu mon problème.

Pour plus d'informations Test de la mémoire est assez facile et m'a sauvé beaucoup de temps (voir Check if SRAM is damaged?) - Pour plus d'informations le test complètement échoué sur mon « endommagé » et les résultats ont été bord pas affichés

Cordialement,