직렬 포트나 비디오 없이 임베디드 프로세서를 디버깅하는 데 사용할 수 있는 간단한 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/69492

  •  09-06-2019
  •  | 
  •  

문제

우리는 비디오나 직렬 포트가 없는 작은 임베디드 시스템을 가지고 있습니다(예:printf를 통해 텍스트를 출력할 수 없습니다).
초기화 시퀀스를 통해 코드의 진행 상황을 추적하고 싶습니다.
이를 돕기 위해 우리가 할 수 있는 간단한 일이 있습니까?
OS를 실행하지 않으며 하드웨어 플랫폼은 어느 정도 사용자 정의가 가능합니다.

도움이 되었습니까?

해결책

가장 간단하고 확장성이 뛰어난 솔루션은 상태 LED입니다.바이너리 형식으로 또는 초점을 좁힐 수 있는 경우 특정 동작이 발생할 때 동작에 따라 LED를 전환합니다.

가장 강력한 것은 하드웨어 JTAG 장치입니다.중단점을 설정할 필요도 없습니다. 단순히 애플리케이션을 중지하고 메모리 상태를 검사하는 것만으로도 충분할 수 있습니다.일부 하드웨어 플랫폼은 메모리 감시나 하드웨어 중단점과 같은 "멋진" 옵션을 지원하지 않습니다.전자는 일반적으로 프로세서를 지속적으로 중지하고 메모리를 읽는 방식으로 해결되는 반면(10MHz 시스템을 1kHz 시스템으로 전환) 후자는 때때로 코드 교체(대상 명령을 다른 점프로 교체)를 사용하여 수행되며 때로는 다른 문제를 가립니다. .이러한 문제와 해당 문제가 적용되는 내장 프로세서를 알고 있어야 합니다.

다른 팁

디버깅에 도움이 되도록 사용할 수 있는 몇 가지 전략이 있습니다.

사용 가능한 출력 핀이 있는 경우 이를 LED(또는 오실로스코프)에 연결하고 출력 핀을 높음/낮음으로 전환하여 코드에서 특정 지점에 도달했음을 나타낼 수 있습니다.
예를 들어, 1번 깜박이면 프로그램이 로드되고, 2번 깜박이면 foozbar가 초기화되고, 3번 깜박이면 입력을 받을 수 있습니다.

사용 가능한 출력 라인이 여러 개인 경우 7세그먼트 LED를 사용하여 더 많은 정보(깜박임 대신 숫자/문자)를 전달할 수 있습니다.

메모리를 읽을 수 있고 일부 RAM을 사용할 수 있는 경우 sprint 기능을 사용하여 printf와 유사한 디버깅을 수행할 수 있지만 화면/직렬 포트로 이동하는 대신 메모리에 기록됩니다.

수행하려는 디버깅 유형에 따라 다릅니다. 특히 임시 추적 방법을 사용하거나 수명 동안 상태 표시로 사용할 수 있는 도구를 제공하려는 경우 더욱 그렇습니다. 프로젝트(또는 제품).

일회적으로, 회로 내 디버거에 대한 심도 있는 소스 추적 및 디버깅(예:jtag)가 매우 도움이 될 수 있습니다.그러나 디버깅에서 중단점을 설정하고 메모리와 레지스터를 조사해야 하는 경우 가장 유용합니다. 따라서 시간이 중요한 문제를 처리하는 경우에는 거의 이점이 없습니다.

시스템 실행에 큰 영향을 주지 않고 프로그램 상태를 확인해야 하는 경우 예비 I/O 핀에 연결된 LED를 사용하는 것이 도움이 될 것입니다.이는 디지털 스토리지 오실로스코프(DSO) 또는 로직 분석기에 대한 입력으로 사용될 수도 있습니다.이 기술은 DSO에서 식별할 수 있는 고유한 펄스 패턴을 선택하여 더욱 강력하게 만들 수 있습니다.

하지만 보다 다양한 디버깅 도구를 사용하려면 직렬 포트가 좋은 솔루션입니다.비용과 PCB 공간을 절약하려면 RS232 변환기가 포함된 플러그인 모듈을 사용하는 것이 유용할 수 있습니다.

제품의 정상적인 작동의 일부로 상태에 대한 장기간 표시를 제공하려는 경우 LED는 역시 저렴하고 간단한 방법입니다.그러나 이러한 상황에서는 육안 검사로 쉽게 식별할 수 있을 만큼 느린 펄스 패턴을 선택하는 것이 가장 좋습니다.이것은 시간이 지남에 따라 "정상적인" 행동을 나타내는 특정 패턴을 배우게 될 것입니다.

시스템의 IO 핀에서 비트뱅킹을 사용하여 직렬 통신(UART)을 쉽게 에뮬레이트할 수 있습니다.이를 카드의 핀 중 하나에 연결하고 PC의 직렬 포트로 연결되는 RS232 변환기(TTL-RS232 변환기는 구매 또는 제작이 쉽습니다)에 연결합니다.

JTAG 디버거도 옵션이지만 설정이 번거롭습니다.

JTAG가 없으면 다른 사람들이 제안한 LED를 사용하는 것이 좋습니다. 하지만 문제를 추적하기 위해 테스트/재구축 주기를 거치는 경향이 있습니다.

시간이 더 많고, 하드웨어 핀과 메모리도 여유가 있다면 언제든지 저속 직렬 인터페이스를 비트배싱할 수 있습니다.나는 과거에 그것이 꽤 유용하다는 것을 알았습니다.

다른 사람들은 출력 핀을 사용하는 몇 가지 꽤 좋은 아이디어를 제안했기 때문에 비록 그것이 매우 좋은 솔루션이 될 수 있고 매우 비용 효율적일 수 있지만 나는 그것을 제안하지 않겠습니다.예산과 대상 프로세서가 이를 지원하는 경우 하드웨어 추적 시스템(구식 에뮬레이터 또는 버스 스누핑 추적을 지원하는 고급 BDM)이 이러한 유형의 작업에 적합할 수 있습니다.하지만 매우 비쌉니다.

비트뱅 소프트웨어 UART를 사용한다는 아이디어는 좋지만 이를 작성하려면 약간의 노력이 필요하고 일부 무료 타이머와 인터럽트도 필요합니다.하드웨어에 사용되지 않은 다른 직렬 인터페이스(SPI, I2C 등)가 있는 경우 이를 사용하는 것이 더 쉬울 것입니다.작은 마이크로컨트롤러를 사용하면 인터페이스를 RS-232로 변환할 수 있습니다.

비트 뱅잉을 해야 한다면 동기식 직렬을 만드는 것이 타이밍에 중요하지 않기 때문에 더 간단한 대안이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top