2013-10-22 8 views
0

다른 회사에서 개발 한 PIC32MX340F512 보드가 있는데이 보드에는 I2C 버스의 DS1338 RTCC 및 24LC32A EEPROM과 디스플레이 장치가 있습니다.이 버스에는 TSL2561 I2C 광 센서 , 나는 빛 센서가 일정한 레벨에 도달 할 때 SD 카드에 시간과 날짜와 빛 센서 값을 저장할 때 광 센서를 지속적으로 폴링하기위한 코드를 c로 작성했습니다. 이 모든 것은 잘 작동하지만 터널의 한쪽 끝에있는 입사광을 모니터링해야하는 터널 내부의 빛에 노출되지 않은 상태에서 시스템을 나가면 얼마만큼의 빛을 적용했는지에 관계없이 시스템이 응답하지 않게되고 전원을 끄더라도 다시 모든 것이 정상적으로 작동하기 시작합니다. 나는 한 사람의 개발팀이며 수개월 동안 문제를 찾아 내려고 노력해 왔습니다. 시스템이 멈추지 않도록 워치 독 타이머를 활성화했지만 문제는 여전히 지속되었습니다. 그런 다음 문제가 센서에 있는지 여부를 알아보기로 결정했다. 푸시 버튼을 사용하여 광 측정을 활성화했지만 4-5 시간이 지나면 PIC 캔트가 입력 핀의 변화를 감지하기도합니다. 하드웨어 리셋이 진행되는 모든 것을 무시하는 느낌으로 리셋 버튼이 포함되어 있으며 PIC가 리셋을 포함하여 아무 것도 응답하지 않는 것으로 보이는 처음 몇 시간 동안은 정상적으로 작동합니다. 나는 펌웨어에 아무런 문제가 없다는 것을 확신하고 있었지만,이 모든 일이 디스플레이 유닛 (pic16f1933과 lcd)에서 메인 유닛과 공유하고 다른 메시지들 사이에서 번갈아 가면서 영향을받지 않는 것처럼 보였다. 아무도 잘못 될 수있는 아이디어가 있습니까 (하드웨어/펌웨어 또는 센서). 별도로 구입 한 24V DC 전원 공급 장치를 사용하고 있습니다. PIC는 코드에서 절전 모드를 구현하지는 않지만 깊은 잠에 빠진 것처럼 보입니다. Nb 우리는 다른 많은 프로젝트에서 같은 보드를 사용하고 있습니다. 그런 문제를 보지 못했습니다. 미리 감사드립니다.몇 시간 후에 PIC32가 반응하지 않습니다.

답변

0

(ICD3 또는 PICkit 2/3와 같이) 회로 내 디버깅의 멋진 세계를 탐색해야한다고 생각합니다. 이 기능을 사용하면 실행을 일시 중지하고, 실행중인 코드 행을 정확하게 확인하고, 변수 값을 검사하고, 코드를 단계별로 실행하여 실행중인 부분과 실행 중이 아닌 부분을 확인하거나 정확히 어디에서 볼 수있는 특수 모드로 프로세서를 실행할 수 있습니다 실행이 잘못된 방향으로 진행됩니다. 문제를 재현하는 데 몇 시간이 걸리면 괜찮습니다. 디버깅 모드에서 밤새 실행해도되고 아침에 잠을 자거나 잠을 잘 수 있습니다. 이 시점에서 프로세서를 일시 중지하고 무한 루프 또는 무언가에 걸렸는지 확인할 수 있습니다. 이것은 종종 실행중인 코드 조각을 파고 들어 왜 예상대로 작동하지 않는지를 확인하는 유일한 방법입니다. 그러나 당신이 말한 것처럼, 수 시간 또는 수일이 걸리는 버그가 가장 까다 롭습니다. 행운을 빕니다!

0

디자인을 두 가지 주요 부분으로 나눌 수 있는데, sd 카드 인터페이스, rtc 읽기 및 광 센서 읽기입니다. 그것이 나 였다면 라이트 센서 읽기를 모방하지만 위조 된 데이터 만 반환하고 문제가 치료되는지 확인하는 코드 버전을 업로드 할 것입니다. 또한 다른 두 모듈과 별도로 동일한 작업을 수행하고 프로젝트의 세 가지 버전 중 하나에이 문제가 표시되지 않는지 확인하십시오. 거기에서 문제의 원인이되는 코드 블록을 찾을 때까지 계속 좁히십시오.

디버그 코드의 두 개 이상의 버전이 동일한 문제를 보이는 경우 내 생각에 통신 프로토콜 중 하나와 관련이 있습니다. SPI 주변 장치와 함께 DMA를 사용할 때 Pic32 실리콘 버전에 문제가있었습니다. 그래서 당신의 칩에 대한 정오표를 확인하는 것이 좋습니다.

여전히 문제를 찾을 수 없다면, 메모리 누수 또는 예약 된 메모리로 증가하는 배열을 확인하는 것이 좋습니다.

희망, 도움이 행운을 빕니다!