자습서: 파트너 애플리케이션 빌드 및 디버그

이 자습서에서는 상위 수준 애플리케이션과 실시간 지원 애플리케이션을 모두 포함하는 샘플 프로젝트를 빌드하고 디버그하는 방법을 보여 하며, 여기서 두 앱은 상위 수준 A7 코어와 실시간 M4 코어 간에 통신합니다. 상위 수준 애플리케이션 및 실시간 지원 애플리케이션에 대한 기본 정보는 Azure Sphere 애플리케이션 개요 를 참조하세요.

이 자습서에서는 다음 방법을 알아봅니다.

  • GNU Arm 도구 체인 설치
  • 출력을 표시하도록 하드웨어 설정
  • 개발 및 디버깅 사용
  • Azure Sphere 샘플 리포지토리 복제
  • 터미널 에뮬레이터를 시작하여 출력 보기
  • 한 쌍의 파트너 애플리케이션 빌드, 실행 및 디버그

중요

이러한 지침에서는 Seeed Studios의 MT3620 개발 키트와 같은 MT3620 RDB(참조 보드 디자인) 하드웨어를 따르는 하드웨어를 사용하고 있다고 가정합니다. 다른 Azure Sphere 하드웨어를 사용하는 경우 제조업체의 설명서를 참조하여 UART가 노출되었는지 여부와 액세스 방법을 확인합니다. 출력을 다르게 표시하고 다른 UART를 사용하도록 app_manifest.json 파일의 샘플 코드 및 Uarts 필드를 업데이트하도록 하드웨어를 설정해야 할 수 있습니다.

필수 구성 요소

  • Windows용 또는 Linux CMake 및 Ninja를 설치합니다.
  • Windows 또는 Linux Visual Studio Code 설치합니다.
  • Windows용 또는 Linux CMake 및 Ninja를 설치합니다.

GNU Arm Embedded Toolchain 설치

  • Visual Studio 2022: Visual Studio 2022를 사용하는 경우 Arm 개발자 웹 사이트에서 GNU Arm Embedded Toolchain(arm-none-eabi)을 설치합니다.
  • Visual Studio 2019: Visual Studio 2019의 Visual Studio용 Azure Sphere 확장과 함께 도구 체인이 자동으로 설치됩니다. Visual Studio 2019를 사용하는 경우 출력을 표시하도록 하드웨어 설정을 진행합니다. 그러나 GNU Arm Embedded Toolchain을 수동으로 설치한 경우 Visual Studio에서 설치한 버전을 사용합니다.

Arm 개발자 웹 사이트에 도구 체인을 설치하려면 ARM Cortex-M4 프로세서용 컴파일러가 포함된 GNU Arm Embedded Toolchain(arm-none-eabi)을 찾습니다. 지침에 따라 OS 플랫폼용 컴파일러를 다운로드하고 설치합니다.

기본적으로 Visual Studio Code 도구 체인을 검색하고 설치한 버전을 찾아야 합니다. 도구 체인과 관련된 빌드 문제가 발생하는 경우 기본 설정>확장>>AzureSphere를 검사 "Azure Sphere: Arm Gnu 경로"가 GNU Arm Embedded Toolchain 설치 디렉터리를 식별하도록 합니다.

출력을 표시하도록 하드웨어 설정

현재 각 실시간 코어는 TX 전용 UART를 지원합니다. RTApps는 이 UART를 사용하여 디바이스에서 로그 출력을 보낼 수 있습니다. 애플리케이션 개발 및 디버깅 중에는 일반적으로 출력을 읽고 표시하는 방법이 필요합니다. HelloWorld_RTApp_MT3620_BareMetal 샘플은 애플리케이션이 UART에 쓸 수 있는 방법을 보여줍니다.

FTDI Friend와 같은 USB-직렬 어댑터를 사용하여 실시간 코어의 UART를 컴퓨터의 USB 포트에 연결합니다. 또한 출력을 표시하려면 115200-8-N-1 터미널 설정(115200 bps, 8비트, 패리티 비트 없음, 1스톱 비트)을 사용하여 직렬 연결을 설정하려면 터미널 에뮬레이터 가 필요합니다.

RTApp의 출력을 표시하도록 하드웨어를 설정하려면 다음 단계를 수행합니다. 핀 위치를 확인하려면 하드웨어 제조업체의 설명서를 참조해야 합니다. Seeed Studios의 MT3620 개발 키트와 같은 MT3620 RDB(참조 보드 디자인) 하드웨어를 따르는 하드웨어를 사용하는 경우 RDB 인터페이스 헤더 를 살펴보면 핀 위치를 확인하는 데 도움이 될 수 있습니다.

  1. USB-직렬 어댑터의 GND를 개발 키트의 GND에 연결합니다. MT3620 RDB 하드웨어에서 GND는 헤더 3, 핀 2입니다.

  2. USB-직렬 어댑터의 RX를 개발 키트의 IOM4-0 TX에 연결합니다. MT3620 RDB 하드웨어에서 IOM4-0 TX는 헤더 3, 핀 6입니다.

  3. USB-직렬 어댑터를 개발 컴퓨터의 무료 USB 포트에 연결하고 직렬 디바이스가 연결된 포트를 결정합니다.

    • Windows에서 장치 관리자 시작하고컨테이너별 디바이스보기를> 선택하고 'USB UART'를 찾습니다. 예를 들어 FT232R USB UART는 FTDI Friend 어댑터를 나타냅니다.

    • Linux에서 다음 명령을 입력합니다.

      dmesg | grep ttyUSB
      

      포트 이름은 ttyUSBn이어야 합니다. 여기서 n 은 포트 번호를 나타냅니다. dmesg 명령에 여러 USB 포트가 나열되면 일반적으로 연결된 것으로 보고된 마지막 포트에 연결된 포트입니다. 예를 들어 다음에서는 ttyUSB4를 사용합니다.

    ~$ dmesg | grep ttyUSB
    [  144.564350] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB0
    [  144.564768] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB1
    [  144.565118] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB2
    [  144.565593] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB3
    [  144.570429] usb 1-1.1.3: FTDI USB Serial Device converter now attached to ttyUSB4
    [  254.171871] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
    
  4. 터미널 에뮬레이터 프로그램을 시작하고 115200-8-N-1 터미널을 어댑터에서 사용하는 COM 포트로 엽니다. 포트 및 속도를 지정하는 방법을 알아보려면 터미널 에뮬레이터에 대한 설명서를 참조하세요.

개발 및 디버깅 사용

Azure Sphere 디바이스에서 샘플 애플리케이션을 빌드하거나 새 애플리케이션을 개발하려면 먼저 개발 및 디버깅을 사용하도록 설정해야 합니다. 기본적으로 Azure Sphere 디바이스는 "잠김"입니다. 즉, 개발 중인 애플리케이션이 PC에서 로드되는 것을 허용하지 않으며 애플리케이션의 디버깅을 허용하지 않습니다. 디버깅을 위해 디바이스를 준비하면 이 제한이 제거되고 디버깅에 필요한 소프트웨어가 로드되고 디바이스 기능이 잠금 해제됩니다 .

실시간 코어를 디버그하려면 az sphere device enable-development 명령을 사용합니다. 이 명령은 디버깅을 위해 PC의 애플리케이션을 허용하도록 디바이스를 구성하고 클라우드 애플리케이션 업데이트를 허용하지 않는 개발 디바이스 그룹에 디바이스를 할당합니다. 애플리케이션 개발 및 디버깅 중에는 클라우드 애플리케이션 업데이트가 개발 중인 애플리케이션을 덮어쓰지 않도록 디바이스를 이 그룹에 남겨 두어야 합니다.

Windows에서는 디버깅 서버와 각 코어 유형에 필요한 드라이버를 디바이스에 로드하는 매개 변수를 추가 --enable-rt-core-debugging 해야 합니다.

  1. 아직 로그인하지 않은 경우 Azure Sphere에 로그인합니다.

    az login
    
  2. 관리자 권한으로 PowerShell 또는 Windows 명령 프롬프트를 사용하여 명령줄 인터페이스를 엽니다. 매개 변수는 --enable-rt-core-debugging 디버거용 USB 드라이버를 설치하기 때문에 관리자 권한이 필요합니다.

  3. 다음 명령을 입력합니다.

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. 관리자 권한이 더 이상 필요하지 않으므로 명령이 완료된 후 창을 닫습니다. 모범 사례로 항상 작업을 수행할 수 있는 가장 낮은 권한을 사용해야 합니다.

az sphere device enable-development 명령이 실패하는 경우 도움말은 Azure Sphere 문제 해결을 참조하세요.

샘플 애플리케이션 다운로드

다음과 같이 InterCore Communications 애플리케이션을 다운로드할 수 있습니다.

  1. 브라우저에서 Microsoft 샘플 브라우저를 가리킵니다.
  2. Search 상자에 "Azure Sphere"를 입력합니다.
  3. 검색 결과에서 Azure Sphere - 코어 간 통신 을 선택합니다.
  4. ZIP 다운로드를 선택합니다.
  5. 다운로드한 파일을 열고 로컬 디렉터리로 추출합니다.

파트너 애플리케이션 빌드 및 실행

  1. Visual Studio를 시작합니다. 로컬 폴더 열기를 선택하고 IntercoreComms 애플리케이션을 추출한 폴더로 이동합니다.

    중요

    Visual Studio 2022 버전 17.1 이상을 사용하고 22.02 Azure Sphere 릴리스 전에 IntercoreComms 샘플을 추출한 경우 최상위 프로젝트 폴더에 CMakeWorkspaceSettings.json 파일을 추가해야 합니다.

  2. MT3620 RDB를 사용하지 않는 경우 하드웨어와 일치하도록 애플리케이션 하드웨어 정의 파일CMakeLists.txt 파일에 대한 app_manifest.json 파일을 업데이트합니다.

  3. CMake 생성이 자동으로 시작되지 않으면 CMakeLists.txt 파일을 선택합니다.

  4. Visual Studio에서출력>보기>에서 출력 표시: CMake 출력은 메시지 CMake generation startedCMake generation finished를 표시해야 합니다.

  5. 빌드 모두 빌드>를 선택합니다. 메뉴가 없으면 솔루션 탐색기 열고 CMakeLists.txt 파일을 마우스 오른쪽 단추로 클릭하고 빌드를 선택합니다. IntercoreComms_HL & IntercoreComms RT 애플리케이션의 출력 위치가 출력 창에 표시됩니다.

  6. 시작 항목>IntercoreComms(모든 코어) 선택을 선택합니다.

  7. 디버그 디버그>를 선택하거나 F5 키를 눌러 애플리케이션을 배포하고 디버그합니다.

  8. 출력 창의 메뉴에서 출력을 선택하고디바이스 출력을 선택합니다. 출력 창에는 상위 수준 애플리케이션 출력이 표시됩니다.

    Remote debugging from host 192.168.35.1, port 58817
    High-level intercore comms application
    Sends data to, and receives data from a real-time capable application.
    Received 19 bytes: rt-app-to-hl-app-07
    Sending: hl-app-to-rt-app-00
    Sending: hl-app-to-rt-app-01
    
  9. 연결된 터미널 에뮬레이터는 실시간 지원 프로그램의 출력을 표시해야 합니다.

    Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
    Message size: 19 bytes:
    Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30
    Text: hl-app-to-rt-app-00
    Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
    Message size: 19 bytes:
    Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:31
    Text: hl-app-to-rt-app-01
    
  10. 디버거를 사용하여 중단점을 설정하고, 변수를 검사하고, 다른 디버깅 작업을 시도합니다.

  1. Visual Studio Code IntercoreComms 애플리케이션을 추출한 폴더를 엽니다. Visual Studio Code intercore.code-workspace 파일을 검색하고 작업 영역을 열 것인지 묻습니다. 작업 영역 열기를 선택하여 실시간 애플리케이션과 상위 수준 애플리케이션을 한 번에 모두 엽니다.

  2. MT3620 RDB를 사용하지 않는 경우 하드웨어와 일치하도록 애플리케이션 하드웨어 정의 파일CMakeLists.txt 파일에 대한 app_manifest.json 파일을 업데이트합니다.

  3. F5 키를 눌러 디버거를 시작합니다. 프로젝트가 이전에 빌드되지 않았거나 파일이 변경되고 다시 빌드가 필요한 경우 디버깅이 시작되기 전에 Visual Studio Code 프로젝트를 빌드합니다.

  4. Azure Sphere 출력 창에 "이미지 배포..."가 표시되어야 합니다. 그 뒤에 SDK 및 컴파일러의 경로가 잇따릅니다.

  5. 출력 창에는 상위 수준 애플리케이션 출력이 표시됩니다.

    Remote debugging from host 192.168.35.1, port 58817
    High-level intercore comms application
    Sends data to, and receives data from a real-time capable application.
    Received 19 bytes: rt-app-to-hl-app-07
    Sending: hl-app-to-rt-app-00
    Sending: hl-app-to-rt-app-01
    
  6. 연결된 터미널 에뮬레이터는 실시간 지원 프로그램의 출력을 표시해야 합니다.

    Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
    Message size: 19 bytes:
    Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30
    Text: hl-app-to-rt-app-00
    Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
    Message size: 19 bytes:
    Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:31
    Text: hl-app-to-rt-app-01
    
  7. Visual Studio Code 디버깅 기능을 사용하여 중단점을 설정하고, 변수를 검사하고, 다른 디버깅 작업을 시도합니다.

문제 해결

OpenOCD가 연결되기 전에 애플리케이션이 실행을 시작할 수 있습니다. 따라서 코드 초기에 설정된 중단점이 누락될 수 있습니다. 이에 대한 간단한 해결 방법은 OpenOCD가 연결될 때까지 앱 시작을 지연하는 것입니다.

  1. 애플리케이션 진입점 RTCoreMain의 시작 부분에 다음 코드를 삽입합니다. 이렇게 하면 변수 ftrue로 설정될 때까지 애플리케이션이 루프에 while 들어가고 유지됩니다.

    static _Noreturn void RTCoreMain(void)
    {
      .
      .
      .
     volatile bool f = false;
     while (!f) {
        // empty.
     }
      .
      .
      .
    }
    
  2. F5 키를 눌러 디버깅으로 앱을 시작한 다음 실행에 침입합니다.

  3. 로컬 디버그 창에서 값을 f 0에서 1로 변경합니다.

  4. 평소와 같이 코드를 단계별로 실행합니다.

CLI를 사용하여 빌드할 때 먼저 실시간 지원 애플리케이션을 빌드 및 배포한 다음, 상위 수준 애플리케이션을 빌드하고 배포합니다.

실시간 지원 애플리케이션 빌드 및 배포

  1. IntercoreComms 애플리케이션을 추출한 폴더로 이동한 다음 IntercoreComms/IntercoreComms_RTApp_MT3620_BareMetal 폴더를 선택합니다.

  2. app_manifest.json 파일을 열고 상위 수준 앱의 구성 요소 ID가 AllowedApplicationConnections 기능에 표시되는지 확인합니다.

  3. PowerShell, Windows 명령 프롬프트 또는 Linux 명령 셸을 사용하여 명령줄 인터페이스를 엽니다. 프로젝트 빌드 디렉터리로 이동합니다.

  4. 프로젝트 빌드 디렉터리의 명령 프롬프트에서 다음 매개 변수를 사용하여 CMake를 실행합니다.

    cmake --preset <preset-name> <source-path>
    
    • --preset <preset-name>

      CMakePresets.json 정의된 빌드 구성 사전 설정 이름입니다.

    • --build <cmake-path>

      CMake 캐시를 포함하는 이진 디렉터리입니다. 예를 들어 Azure Sphere 샘플에서 CMake를 실행하는 경우 빌드 명령은 입니다 cmake --build out/ARM-Debug.

    • <source-path>

      샘플 애플리케이션에 대한 원본 파일이 포함된 디렉터리의 경로입니다. 이 예제에서 Azure Sphere 샘플 리포지토리는 AzSphere라는 디렉터리에 다운로드되었습니다.

      CMake 매개 변수는 공백으로 구분됩니다. 줄 연속 문자(Windows 명령줄의 경우^ , Linux 명령줄의 경우 \ 또는 PowerShell의 경우 ')는 가독성을 위해 사용할 수 있지만 필수는 아닙니다.

    다음 예제에서는 IntercoreComms RTApp에 대한 CMake 명령을 보여 줍니다.

    Windows 명령 프롬프트

     cmake ^
    --preset "ARM-Debug" ^
     "C:\AzSphere\azure-sphere-samples\Samples\IntercoreComms\IntercoreComms_RTApp_MT3620_BareMetal"
    

    Windows PowerShell

     cmake `
    --preset "ARM-Debug" `
     "C:\AzSphere\azure-sphere-samples\Samples\IntercoreComms\IntercoreComms_RTApp_MT3620_BareMetal"
    
  5. 프로젝트 빌드 디렉터리의 명령 프롬프트에서 Ninja를 실행하여 애플리케이션을 빌드하고 이미지 패키지 파일을 만듭니다.

    ninja -C out/ARM-Debug
    

    Ninja는 결과 애플리케이션 및 .imagepackage 파일을 지정된 디렉터리에 배치합니다.

    다음 명령을 사용하여 CMake를 통해 Ninja를 호출할 수도 있습니다.

    cmake --build out/<binary-dir>
    

    CMake 캐시를 포함하는 이진 디렉터리로 설정합니다 <binary-dir> . 예를 들어 Azure Sphere 샘플에서 CMake를 실행하는 경우 빌드 명령은 입니다 cmake --build out/ARM-Debug.

    특히 CMake 명령을 변경한 후 문제를 해결할 때 전체 빌드를 삭제하고 다시 시도합니다.

  6. 디바이스에 이미 배포된 애플리케이션을 삭제합니다.

    az sphere device sideload delete
    
  7. 프로젝트 빌드 디렉터리의 명령 프롬프트에서 ninja가 만든 이미지 패키지를 로드합니다.

    az sphere device sideload deploy --image-package <path-to-imagepackage>
    

    애플리케이션이 로드된 직후에 실행되기 시작합니다.

  8. 이미지의 구성 요소 ID를 가져옵니다.

    az sphere image-package show --image-package <path-to-imagepackage>
    

    명령은 이미지 패키지에 대한 모든 메타데이터를 반환합니다. 애플리케이션의 구성 요소 ID는 애플리케이션 이미지 형식의 ID 섹션에 표시됩니다. 예를 들어:

    ...
      "Identity": {
        "ComponentId": "<component-id>",
        "ImageId": "<image-id>",
        "ImageType": "Application"
      },
    ...
    

상위 수준 애플리케이션 빌드 및 배포

  1. IntercoreComms 애플리케이션을 추출한 폴더로 이동한 다음 IntercoreComms/IntercoreComms_HighLevelApp 폴더를 선택합니다.

  2. app_manifest.json 파일을 열고 RTApp의 구성 요소 ID가 AllowedApplicationConnections 기능에 표시되는지 확인합니다.

  3. PowerShell, Windows 명령 프롬프트 또는 Linux 명령 셸을 사용하여 명령줄 인터페이스를 엽니다. 프로젝트 빌드 디렉터리로 이동합니다.

  4. 프로젝트 빌드 디렉터리의 명령 프롬프트에서 다음 매개 변수를 사용하여 CMake를 실행합니다.

    cmake --preset <preset-name> <source-path>
    
    • --preset <preset-name>

      CMakePresets.json 정의된 빌드 구성 사전 설정 이름입니다.

    • --build <cmake-path>

      CMake 캐시를 포함하는 이진 디렉터리입니다. 예를 들어 Azure Sphere 샘플에서 CMake를 실행하는 경우 빌드 명령은 입니다 cmake --build out/ARM-Debug.

    • <source-path>

      샘플 애플리케이션에 대한 원본 파일이 포함된 디렉터리의 경로입니다. 이 예제에서 Azure Sphere 샘플 리포지토리는 AzSphere라는 디렉터리에 다운로드되었습니다.

      CMake 매개 변수는 공백으로 구분됩니다. 줄 연속 문자(Windows 명령줄의 경우^ , Linux 명령줄의 경우 \ 또는 PowerShell의 경우 ')는 가독성을 위해 사용할 수 있지만 필수는 아닙니다.

    다음 예제에서는 IntercoreComms 상위 수준 애플리케이션에 대한 CMake 명령을 보여 줍니다.

    Windows 명령 프롬프트

     cmake ^
     --preset "ARM-Debug" ^
     "C:\AzSphere\azure-sphere-samples\Samples\IntercoreComms\IntercoreComms_HighLevelApp"
    

    Windows PowerShell

     cmake `
     --preset "ARM-Debug" `
     "C:\AzSphere\azure-sphere-samples\Samples\IntercoreComms\IntercoreComms_HighLevelApp"
    
  5. 프로젝트 빌드 디렉터리의 명령 프롬프트에서 Ninja를 실행하여 애플리케이션을 빌드하고 이미지 패키지 파일을 만듭니다.

    ninja -C out/ARM-Debug
    

    Ninja는 결과 애플리케이션 및 .imagepackage 파일을 지정된 디렉터리에 배치합니다.

    다음 명령을 사용하여 CMake를 통해 Ninja를 호출할 수도 있습니다.

    cmake --build out/<binary-dir>
    

    CMake 캐시를 포함하는 이진 디렉터리로 설정합니다 <binary-dir> . 예를 들어 Azure Sphere 샘플에서 CMake를 실행하는 경우 빌드 명령은 입니다 cmake --build out/ARM-Debug.

    특히 CMake 명령을 변경한 후 문제를 해결할 때 전체 빌드를 삭제하고 다시 시도합니다.

  6. 프로젝트 빌드 디렉터리의 명령 프롬프트에서 ninja가 만든 이미지 패키지를 로드합니다.

    az sphere device sideload deploy --image-package <package-name>
    

    애플리케이션이 로드된 직후에 실행되기 시작합니다.

  7. 이미지의 구성 요소 ID를 가져옵니다.

    az sphere image-package show --image-package <path-to-imagepackage>
    

    명령은 이미지 패키지에 대한 모든 메타데이터를 반환합니다. 애플리케이션의 구성 요소 ID는 애플리케이션 이미지 형식의 ID 섹션에 표시됩니다. 예를 들어:

    ...
      "Identity": {
        "ComponentId": "<component-id>",
        "ImageId": "<image-id>",
        "ImageType": "Application"
      },
    ...
    

디버깅을 사용하도록 설정된 파트너 애플리케이션 실행

  1. 실행 중인 경우 실시간 애플리케이션을 중지합니다.

    az sphere device app stop --component-id <component id>
    
  2. 디버깅을 위해 애플리케이션을 다시 시작합니다.

    az sphere device app start -- --debug-mode true --component-id <component id>
    

    이 명령은 애플리케이션이 실행 중인 코어를 반환합니다.

      <component id>
      App state: running
      Core        : Real-time 0
    
  3. 애플리케이션이 빌드된 sysroot에 대한 Openocd 폴더로 이동합니다. sysroots는 Azure Sphere SDK 설치 폴더에 설치됩니다. 예를 들어 Windows에서 폴더는 기본적으로 Linux/opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux의 에 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd 설치됩니다.

  4. 다음 예제와 같이 를 실행 openocd 합니다. 이 예제에서는 앱이 코어 0에서 실행되고 있다고 가정합니다. 앱이 코어 1에서 실행되는 경우 "targets io0"을 "targets io1"로 바꿉니다.

       openocd -f mt3620-rdb-ftdi.cfg -f mt3620-io0.cfg -c "gdb_memory_map disable" -c "gdb_breakpoint_override hard" -c init -c "targets io0" -c halt -c "targets"
    
  5. 새 Azure Sphere 명령 프롬프트(Windows Azure Sphere 클래식 CLI), 표준 명령 프롬프트 또는 PowerShell(Windows Azure CLI) 또는 터미널 창(Linux)을 엽니다.

  6. 실시간 지원 애플리케이션 .out 파일이 포함된 폴더로 이동하고 GNU Arm Embedded 도구 체인의 일부인 를 시작 arm-none-eabi-gdb합니다.

    Windows 명령 프롬프트

    "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
    

    Windows PowerShell

     & "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
    
  7. OpenOCD 서버는 :4444에 GDB 서버 인터페이스를 제공합니다. 디버깅 대상을 설정합니다.

    target remote :4444

  8. 이제 gdb 명령을 실시간 지원 애플리케이션에 실행할 수 있습니다. HandleSendTimerDeferred 함수에 중단점을 추가합니다.

    break HandleSendTimerDeferred
    
  9. 연결된 터미널 에뮬레이터는 실시간 지원 애플리케이션의 출력을 표시해야 합니다.

  10. 새 Azure Sphere 명령 프롬프트(Windows Azure Sphere 클래식 CLI), 표준 명령 프롬프트 또는 PowerShell(Windows Azure CLI) 또는 터미널 창(Linux)을 엽니다.

  11. 상위 수준 애플리케이션 .imagepackage 파일이 포함된 폴더로 이동합니다.

  12. 실행 중인 경우 상위 수준 애플리케이션을 중지합니다.

    az sphere device app stop --component-id <component id>
    
  13. 디버깅을 사용하여 상위 수준 애플리케이션을 다시 시작합니다.

    az sphere device app start --debug-mode true --component-id <component id> --debug-mode
    
  14. 터미널 에뮬레이터를 열고 포트 2342에서 192.168.35.2에 대한 텔넷 또는 TCP 연결을 설정하여 상위 수준 앱의 출력을 확인합니다.

  15. 다음 명령을 사용하여 gdb를 시작합니다.

    Windows 명령 프롬프트

    "C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
    

    Windows PowerShell

    & "C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
    

    참고

    Azure Sphere SDK는 애플리케이션 런타임 버전, sysroots 및 베타 API에 설명된 대로 애플리케이션이 다른 API 집합을 대상으로 할 수 있도록 여러 sysroots와 함께 제공됩니다. sysroots는 Sysroots 아래의 Azure Sphere SDK 설치 폴더에 설치됩니다.

  16. 포트 2345에서 원격 디버깅 대상을 IP 주소 192.168.35.2로 설정합니다.

    target remote 192.168.35.2:2345

  17. SendMessageToRTApp 함수에 중단점을 추가합니다.

    break SendMessageToRTApp

  18. 계속하려면 를 입력 c 하고 텔넷/TCP 터미널에서 출력을 관찰한 다음 실시간 애플리케이션 디버깅 세션이 포함된 명령 프롬프트 또는 터미널 창으로 전환합니다.

  19. 를 입력 c 하여 연결된 직렬 세션에서 출력을 계속 관찰합니다.

실시간 지원 애플리케이션과 상위 수준 애플리케이션 간에 전환하여 디버깅 세션 간에 앞뒤로 작업할 수 있습니다. 두 출력 창에 다음과 유사한 출력이 표시됩니다.

Starting debugger....
                     Process /mnt/apps/25025d2c-66da-4448-bae1-ac26fcdd3627/bin/app created; pid = 40
                     Listening on port 2345
                                           Remote debugging from host 192.168.35.1, port 56522
              High-level intercore comms application
                                                    Sends data to, and receives data from a real-time capable application.
                                          Sending: hl-app-to-rt-app-00
                                                                      Sending: hl-app-to-rt-app-01
IntercoreComms_RTApp_MT3620_BareMetal
App built on: Nov 17 2020, 09:25:19
Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
Message size: 19 bytes:
Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30
Text: hl-app-to-rt-app-00

각 디버깅 세션을 종료하려면 gdb 프롬프트에 를 입력 q 합니다.

다음 단계