2017-10-05 7 views
-3

Arduino와 함께 여러 DS18B20을 사용하려고합니다. 대부분의 예에서, 센서는 다음과 같이 initalized된다간접 지정 : Arduino

여러 버스를
#define ONE_WIRE_BUS 2 
OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature sensors(&oneWire); 
sensors-> begin(); 

, 나는 다른 장치에 추가 할 수 있습니다 내 프로그램에서

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

을하기 때문에, 나는 얼마나 많은 버스를 알고,하지 어떤 GPIO를 사용할 것인가, 간접 사용 (최대 5 개 버스 사용)을 시도했습니다.

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();   

이 방법은 분명히 잘못된 주소의 증상 보드 동결을하고있다 :

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

는 그럼으로 다양한 버스를 초기화합니다.

간접 지정을 사용하는 방법에있어 잘못된 점은 무엇입니까?

+1

c 또는 C++? 질문은 무엇입니까? – user463035818

+0

[mcve]를 제공하십시오. 표시된 코드에서 분명히 잘못된 (포인터 관리 측면에서) 어떤 것도 볼 수 없습니다. –

+0

질문은 [tag : c]로 작성된 프로그램이 아니므로 태그를 지정하지 마십시오. –

답변

0

의견을 보내 주셔서 감사합니다. 그것은 메모리 전체 문제는 아니었지만 이것은 오류로 안내합니다.

하드웨어 문제 : 일부 데이터가 SRAM의 일부에 올바르게 저장되지 않은 것 같습니다 ... 이전에 일부 문자열이 올바르게 표시되지 않았 음을 확인했습니다 (디버그 메시지이기 때문에 문제가되지 않았습니다).)

이것은 간접 참조의 문제는 아니지만 간접 참조로 인해 메모리의 잘못된 부분을 사용하게되었습니다. 칩 교체로 내 문제가 해결되었습니다. ,

정보는 완전히 보드 및 결과

감사를 표시하지 않았다 "손상"내에 실패한 테스트를 - 메모리 테스트 내용

은 매우 간단하며 많은 시간을 나에게 (참조 Check if SRAM is damaged?)를 저장