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

Visual Studio, Visual Studio Code 또는 CLI(명령줄)를 사용하여 상위 수준 애플리케이션과 거의 동일한 방식으로 RTApps(실시간 지원 애플리케이션)를 개발하고 디버그할 수 있습니다.

필수 구성 요소

개발 및 디버깅 사용

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 문제 해결을 참조하세요.

개발 및 디버깅 사용

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

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

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

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

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

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

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

다음 오류 메시지와 함께 az sphere device enable-development 명령이 실패하는 경우 Azure Sphere 문제 해결 을 참조하세요.

error: The device did not accept the device capability configuration. Please check the Azure Sphere OS on your device is up-to-date using 'az sphere device show-deployment-status'.

Visual Studio Code 사용하여 RTApp 빌드

RTApp을 빌드하려면 다음을 수행합니다.

  1. Visual Studio Code Azure Sphere 샘플 리포지토리의 복제본에서 HelloWorld_RTApp_MT3620_BareMetal 폴더를 엽니다. 키트를 선택하라는 메시지가 표시되면 "키트 사용 안 함"을 선택합니다.

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

  3. 연결된 터미널 에뮬레이터는 애플리케이션의 출력을 표시해야 합니다. 프로그램은 1초 간격으로 다음 단어를 보냅니다.

    Tick

    Tock

    참고

    Visual Studio Code Intellisense를 제공하지만 CMakeLists.txt 수정하면 자동으로 업데이트되지 않습니다. CMake: 캐시 삭제 및 다시 구성 명령을 실행하여 Intellisense를 새로 고쳐야 합니다. CMake 대상 보기는 왼쪽 막대의 CMake 확장 보기에서 찾을 수 있습니다.

Visual Studio를 사용하여 RTApp 빌드

RTApp을 빌드하려면 다음을 수행합니다.

  1. Visual Studio에서 파일>CMake 를 선택하고 샘플이 포함된 폴더로 이동합니다.

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

  3. Visual Studio에서출력>보기>에서 출력 표시: CMake 출력은 메시지를 CMake generation started. 표시하고CMake generation finished.

  4. CMake 메뉴(있는 경우)에서 모두 빌드를 선택합니다. 메뉴가 없으면 솔루션 탐색기 열고 CMakeLists.txt 파일을 마우스 오른쪽 단추로 클릭하고 빌드를 선택합니다. Azure Sphere 애플리케이션의 출력 위치가 출력 창에 표시됩니다.

  5. F5 키를 눌러 애플리케이션을 배포합니다.

  6. 연결된 터미널 에뮬레이터는 애플리케이션의 출력을 표시해야 합니다. 프로그램은 1초 간격으로 다음 단어를 보냅니다.

    Tick

    Tock

    참고

    • Visual Studio는 CMake 캐시에서 데이터를 수집하여 Azure Sphere RTApps에 대한 Intellisense를 제공합니다. Visual Studio는 RTApp의 CMakeLists.txt 또는 CMakeSettings.json 파일이 변경 될 때마다 캐시를 업데이트합니다.

    • 기본적으로 Visual Studio는 폴더 보기를 사용합니다. CMake 프로젝트의 논리적 보기를 선호하는 경우 CMake 대상 보기로 변경할 수 있습니다. 솔루션 탐색기 폴더 토글 아이콘을 선택합니다.

      솔루션 및 폴더 보기 간 전환

      드롭다운 메뉴에서 CMake 대상 보기를 선택합니다.

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

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

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

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

      4. 코드를 정상적으로 단계별로 실행합니다.

CLI를 사용하여 RTApp 빌드

다음 지침에서는 CMake를 사용한다고 가정합니다. CMake를 사용하지 않고 명령줄에서 빌드하려는 경우 Azure Sphere SDK와 함께 설치된 AzureSphereToolchainBase.cmake 및 AzureSphereRTCoreToolchain.cmake 파일을 확인하여 적절한 컴파일러 및 링커 옵션을 확인할 수 있습니다.

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

  2. 프로젝트 빌드 디렉터리의 명령 프롬프트에서 다음 매개 변수를 사용하여 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의 경우 ')는 가독성을 위해 사용할 수 있지만 필수는 아닙니다.

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

    Windows 명령 프롬프트

    cmake ^
    --preset "ARM-Debug" ^
    "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"
    

    Windows PowerShell

    cmake `
    --preset "ARM-Debug" `
    "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"
    
  3. 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.

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

    az sphere device sideload delete
    
  5. Ninja에서 만든 이미지 패키지를 배포합니다.

    az sphere device sideload deploy --image-package <package-name>
    
  6. 이미지의 구성 요소 ID를 가져옵니다.

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

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

    ...
      "Identity": {
        "ComponentId": "<component-id>",
        "ImageId": "<image-id>",
        "ImageType": "Application"
      },
    ...
    
  7. 앱이 실행 중인 코어를 결정합니다.

    기본적으로 RTApp은 디바이스에서 사용 가능한 첫 번째 실시간 코어에 배포됩니다. 현재 특정 코어를 지정할 수 없습니다. 애플리케이션이 실행 중인 코어를 확인하려면 az sphere device app 명령을 사용하여 애플리케이션을 중지한 다음 다시 시작합니다. 명령에서 애플리케이션에 대한 구성 요소 ID를 제공합니다. 예를 들어:

    az sphere device app stop --component-id <component id>
    <component id>: App state: stopped
    
    az sphere device app start --component-id <component id>
    <component id>
    App state: running
    Core     : Real-time 0
    
  8. 연결된 터미널 에뮬레이터는 애플리케이션의 출력을 표시해야 합니다. 프로그램은 1초 간격으로 다음 단어를 보냅니다.

    Tick

    Tock

RTApp의 로그 출력

MT3620의 각 실시간 코어에는 출력을 로깅하기 위한 전용 UART가 있습니다. 실시간 코어는 ISU UART에도 액세스할 수 있습니다. MT3620 RDB는 애플리케이션의 로그 출력을 표시하는 데 사용할 수 있는 TX 핀만 노출합니다. 다른 하드웨어는 이를 다르게 노출하거나 전혀 노출하지 않을 수 있습니다. 로그 출력을 보려면 빠른 시작에 설명된 대로 이 출력을 표시하도록 하드웨어를 설정합니다. 전용 UART에는 애플리케이션 매니페스트 요구 사항이 필요하지 Uart 않지만 RTApp에 대한 출력을 로깅하는 것 이외의 용도로 사용하면 안 됩니다.

파트너 앱을 사용하여 개발

Azure Sphere 디바이스에 애플리케이션을 로드하는 경우 Azure Sphere 배포 도구는 기본적으로 모든 기존 애플리케이션을 삭제합니다. 서로 통신하는 애플리케이션을 개발할 때 이런 일이 발생하지 않도록 하려면 애플리케이션을 파트너로 표시해야 합니다. 애플리케이션 중 하나를 배포하는 경우 해당 파트너는 삭제되지 않습니다. 자세한 내용은 애플리케이션을 파트너로 표시 를 참조하세요.

문제 해결

문제가 발생하는 경우 실시간 지원 애플리케이션 문제 해결을 참조하세요.

추가 리소스

MT3620 칩의 M4 실시간 코어를 대상으로 하는 RTApps에 대한 추가 드라이버 및 샘플은 Azure Sphere 파트너의 GitHub에서 사용할 수 있습니다.