stand-alone 모드에서 프로그램이 실행되지 않는 이유
기술노트 21904
아키텍처:
ARM
컴포넌트:
debugger
업데이트:
2021-07-15 오후 7:09
소개
프로그램이 실행되지 않는 데는 여러 가지 이유가 있을 수 있습니다. 본 기술 노트는 다음 상황에 초점을 맞추었습니다.
상황은 다음과 같습니다:
- 프로그램이 C-SPY 디버거를 사용하고 연결된 디버거 프로브와 동작을 합니다.
- 프로그램이 stand-alone 모드(즉, 보드의 연결을 끊고 전원을 껐다가 켠 후)에서 작동하지 않습니다.
배경
C-SPY 디버거를 사용하여 응용프로그램을 실행하는 것과 stand-alone 프로그램을 실행하는 것 사이에는 큰 차이가 있습니다.
C-SPY 디버거로 응용 프로그램을 디버깅할 때 다음과 같이 많은 SFR이 설정됩니다:
- 플래시로더 소스코드
- 플래시로더가 사용하는 mac 파일
- 프로그램이 사용하는 mac 파일
응용 프로그램이 독립 실행 시 이 SFR은 응용 프로그램이 시작/초기화 코드로 설정해야 합니다.
또한 응용 프로그램이 독립 실행형 모드에서 작동하지 않는 이유에 대한 다른 설명도 있습니다. 아래 솔루션을 참조하십시오.
해결방법
- 플래시 로더가 사용 중인지 확인합니다(Options > Debugger > Download). 플래시 로더가 구성되어 있으면 플래시 로더 매크로 파일이 사용되는 것일 수 있습니다. .board 및 .flash 파일에서 매크로 파일 .mac에 대한 참조를 확인합니다. 매크로 파일을 열고 해당 파일의 기능을 확인합니다. 응용 프로그램 시작 코드에서 이 작업을 수행해야 하는지 고려하십시오. 플래시 로더를 사용하지 않도록 설정하면 확인할 수 있습니다.
- 응용 프로그램이 Setup 매크로 파일(Options > Debugger > Setup)을 사용하고 있는지 확인합니다. 매크로 파일을 열고 해당 파일의 기능을 확인합니다. 응용 프로그램 시작 코드에서도 같은 작업을 수행해야 합니까? 설치 매크로 파일을 사용하지 않도록 설정하면 쉽게 확인할 수 있습니다.
- 응용 프로그램 코드에서 printf()를 사용하면 프로젝트 설정에 따라 디버거가 연결되어 있지 않을 때 응용 프로그램이 영구적으로 중단될 수 있습니다. printf()의 사용을 확인하는 방법은 Options > General Options > Library Configuration > Library low-level interface 를 'None'으로 설정하는 것이다.
ARM Cortex의 경우 호출을printf()
로 유지할 수 있습니다. 그렇다면 Options > General Options > Library Configuration > stdout/stderr이 'Via SWO'로 설정되어 있는지 확인하십시오. - 비 비활성화 Options > General Options > Library Configuration > stdout/stderr > 'Via Semihosting' 은 응용 프로그램이 BKPT-명령어로 중지될 수 있습니다. 이러한 BKPT는 세미호스팅을 위해 SWI 인터럽트를 전송할 때 세미호스팅 시스템에 의해 사용된다. (Options > General Options > Library Configuration > Library low-level interface 설정: 'None')
- 대상 장치의 특정 하드웨어는 초기화하는 데 시간이 필요할 수 있습니다(PLL 등 응용 프로그램이 이러한 종류의 적응을 기다리지 않으면 문제가 발생할 수 있습니다. 디버거에서 실행할 때 응용 프로그램이 중지되는 경우가 많습니다(). 이렇게 하면 초기화할 시간이 생기지만 독립 실행 장치를 실행할 때는 추가 지연이 발생하지 않습니다. 확인하려면 긴 지연 루프를
main()
의 첫 번째 항목으로 추가합니다. 이 방법이 도움이 될 경우 장치 초기화를 대기 위해 코드를 추가해야 함을 나타냅니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.