Tutorial: Membuat aplikasi berkemampuan real-time

Tutorial ini memperlihatkan cara menyusun aplikasi sampel untuk inti real-time di perangkat Azure Sphere. Lihat Gambaran umum aplikasi Azure Sphere untuk informasi dasar tentang aplikasi berkemampuan real-time.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Mengunduh aplikasi sampel
  • Instal toolchain Arm GNU
  • Menyiapkan perangkat keras untuk menampilkan output
  • Mengaktifkan pengembangan dan proses debug
  • Memulai emulator terminal untuk melihat output
  • Membuat, menjalankan, dan men-debug aplikasi berkemampuan real-time

Penting

Instruksi ini menganggap Anda menggunakan perangkat keras yang mengikuti perangkat keras desain papan referensi (RDB) MT3620, seperti MT3620 Dev Kit dari Seeed Studios. Jika Anda menggunakan perangkat keras Azure Sphere yang berbeda, hubungi dokumentasi produsen untuk mengetahui apakah UART terekspos dan cara mengaksesnya. Anda mungkin perlu menyiapkan perangkat keras untuk menampilkan output secara berbeda dan memperbarui kode sampel dan bidang Uart dari file app_manifest.json untuk menggunakan UART yang berbeda.

Prasyarat

Unduh aplikasi sampel

Anda dapat mengunduh aplikasi HelloWorld sebagai berikut:

  1. Arahkan browser Anda ke Browser Sampel Microsoft.
  2. Ketikkan "Azure Sphere" dalam kotak Search.
  3. Pilih Azure Sphere - Halo Dunia dari hasil pencarian.
  4. Pilih Unduh ZIP.
  5. Buka file yang diunduh dan ekstrak ke direktori lokal.

Instal Toolchain GNU Arm Embedded

Anda dapat mengunduh dan menginstal Toolchain GNU Arm Embedded dari situs web pengembang Arm. Atau Anda dapat menggunakan artefak vcpkg untuk menginstal dan mengonfigurasi lingkungan pengembangan secara otomatis.

  • Visual Studio 2022: Jika Anda menggunakan Visual Studio 2022, instal Toolchain GNU Arm Embedded (arm-none-eabi) dari situs web pengembang Arm.
  • Visual Studio 2019: Toolchain secara otomatis diinstal dengan ekstensi azure-sphere untuk Visual Studio di Visual Studio 2019. Jika Anda menggunakan Visual Studio 2019, lanjutkan ke Menyiapkan perangkat keras untuk menampilkan output. Namun, jika Anda menginstal Toolchain GNU Arm Embedded secara manual, Visual Studio akan menggunakan versi yang Anda instal.

Untuk menginstal toolchain, di situs web pengembang Arm, temukan Toolchain GNU Arm Embedded (arm-none-eabi) yang menyertakan kompilator untuk prosesor ARM Cortex-M4. Ikuti instruksi di sana untuk mengunduh dan menginstal kompiler untuk platform OS Anda.

Secara default, Visual Studio Code mencari toolchain dan akan menemukan versi yang Anda instal. Jika Anda mengalami masalah build yang terkait dengan toolchain, masukkan jalur sebagai berikut:

  1. PilihEkstensi>Pengaturan>Preferensi>File>Azure Sphere.
  2. Masukkan jalur penginstalan Toolchain GNU Arm Embedded di pengaturan Azure Sphere: Arm Gnu Path .

Untuk menginstal toolchain, di situs web pengembang Arm, temukan Toolchain GNU Arm Embedded (arm-none-eabi) yang menyertakan kompilator untuk prosesor ARM Cortex-M4. Ikuti instruksi di sana untuk mengunduh dan menginstal kompiler untuk platform OS Anda.

Menyiapkan perangkat keras untuk menampilkan output

Saat ini, setiap inti real-time mendukung UART khusus TX. RTApps bisa menggunakan UART ini untuk mengirim output log dari perangkat. Selama pengembangan dan proses debug aplikasi, Anda biasanya memerlukan cara untuk membaca dan menampilkan output. Contoh HelloWorld_RTApp_MT3620_BareMetal memperlihatkan bagaimana aplikasi bisa menulis ke UART.

Gunakan adaptor USB-to-serial seperti FTDI Friend, untuk menyambungkan UART pada inti real-time ke port USB di komputer Anda. Anda juga akan memerlukan emulator terminal untuk membuat koneksi seri dengan pengaturan terminal 115200-8-N-1 (115200 bps, 8 bit, tanpa bit paritas, satu stop bit) untuk menampilkan output.

Untuk menyiapkan perangkat keras untuk menampilkan output dari RTApp, ikuti langkah-langkah ini. Anda harus merujuk ke dokumentasi dari produsen perangkat keras untuk menentukan lokasi pin. Jika Anda menggunakan perangkat keras yang mengikuti perangkat keras desain papan referensi (RDB) MT3620, seperti MT3620 Dev Kit dari Seeed Studios, maka melihat header antarmuka RDB mungkin membantu Anda menentukan lokasi pin.

  1. Hubungkan GND pada adaptor USB-ke-serial ke GND di kit dev Anda. Pada perangkat keras MT3620 RDB, GND adalah Header 3, sematkan 2.
  2. Hubungkan RX pada adaptor USB-to-serial ke IOM4-0 TX di kit dev Anda. Pada perangkat keras MT3620 RDB, IOM4-0 TX adalah Header 3, sematkan 6.
  3. Sambungkan adaptor USB-ke-serial ke port USB gratis di mesin pengembangan Anda dan tentukan port mana perangkat serial tersambung. Di Windows, mulai Manajer Perangkat, pilih Tampilkan>Perangkat menurut wadah, dan cari 'UART USB". Misalnya, FT232R USB UART menunjukkan adaptor Teman FTDI.
  4. Mulai program emulator terminal dan buka terminal 115200-8-N-1 ke port COM yang digunakan oleh adaptor. Lihat dokumentasi emulator terminal untuk mengetahui cara menentukan port dan kecepatan.

Menyiapkan perangkat keras untuk menampilkan output

Saat ini, setiap inti real-time mendukung UART khusus TX. RTApps bisa menggunakan UART ini untuk mengirim output log dari perangkat. Selama pengembangan dan proses debug aplikasi, Anda biasanya memerlukan cara untuk membaca dan menampilkan output. Contoh HelloWorld_RTApp_MT3620_BareMetal memperlihatkan bagaimana aplikasi bisa menulis ke UART.

Gunakan adaptor USB-to-serial seperti FTDI Friend, untuk menyambungkan UART pada inti real-time ke port USB di komputer Anda. Anda juga akan memerlukan emulator terminal untuk membuat koneksi seri dengan pengaturan terminal 115200-8-N-1 (115200 bps, 8 bit, tanpa bit paritas, satu stop bit) untuk menampilkan output.

Untuk menyiapkan perangkat keras untuk menampilkan output dari RTApp, ikuti langkah-langkah ini. Anda harus merujuk ke dokumentasi dari produsen perangkat keras untuk menentukan lokasi pin. Jika Anda menggunakan perangkat keras yang mengikuti perangkat keras desain papan referensi (RDB) MT3620, seperti MT3620 Dev Kit dari Seeed Studios, maka melihat header antarmuka RDB mungkin membantu Anda menentukan lokasi pin.

  1. Hubungkan GND pada adaptor USB-ke-serial ke GND di kit dev Anda. Pada perangkat keras MT3620 RDB, GND adalah Header 3, sematkan 2.

  2. Hubungkan RX pada adaptor USB-to-serial ke IOM4-0 TX di kit dev Anda. Pada perangkat keras MT3620 RDB, IOM4-0 TX adalah Header 3, sematkan 6.

  3. Sambungkan adaptor USB-ke-serial ke port USB gratis di mesin pengembangan Anda dan tentukan port mana perangkat serial tersambung.

    • Di Windows, mulai Manajer Perangkat, pilih Tampilkan>Perangkat menurut wadah, dan cari 'UART USB". Misalnya, FT232R USB UART menunjukkan adaptor Teman FTDI.

    • Di Linux, ketikkan perintah berikut:

      dmesg | grep ttyUSB
      

      Port harus bernama ttyUSBn, di mana n menunjukkan nomor port. Jika perintah mencantumkan dmesg beberapa port USB, perintah yang tersambung ke biasanya yang terakhir dilaporkan sebagai terlampir. Misalnya, dalam hal berikut ini, Anda akan menggunakan 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. Mulai program emulator terminal dan buka terminal 115200-8-N-1 ke port COM yang digunakan oleh adaptor. Lihat dokumentasi emulator terminal untuk mengetahui cara menentukan port dan kecepatan.

Mengaktifkan pengembangan dan proses debug

Sebelum dapat membuat aplikasi sampel di perangkat Azure Sphere atau mengembangkan aplikasi baru untuk aplikasi tersebut, Anda harus mengaktifkan pengembangan dan proses debug. Secara default, perangkat Azure Sphere "terkunci"; yaitu, mereka tidak mengizinkan aplikasi yang sedang dikembangkan untuk dimuat dari PC, dan mereka tidak mengizinkan debugging aplikasi. Mempersiapkan perangkat untuk proses debug akan menghapus batasan ini dan memuat perangkat lunak yang diperlukan untuk men-debugging dan membuka kunci kemampuan perangkat .

Untuk melakukan debug pada inti real-time, gunakan perintah pengembangan aktifkan perangkat bola az . Perintah ini mengonfigurasi perangkat untuk menerima aplikasi dari PC untuk proses debug dan menetapkan perangkat ke grup Perangkat pengembangan, yang tidak mengizinkan pembaruan aplikasi cloud. Selama pengembangan dan debugging aplikasi, Anda harus meninggalkan perangkat dalam grup ini sehingga pembaruan aplikasi cloud tidak menimpa aplikasi yang sedang dikembangkan.

Di Windows, Anda harus menambahkan --enable-rt-core-debugging parameter, yang memuat server debugging dan driver yang diperlukan untuk setiap tipe inti ke perangkat.

  1. Masuk ke Azure Sphere jika Anda belum melakukannya:

    az login
    
  2. Buka antarmuka baris perintah menggunakan PowerShell atau Prompt Perintah Windows dengan hak istimewa administrator. Parameter --enable-rt-core-debugging memerlukan hak istimewa administrator karena menginstal driver USB untuk debugger.

  3. Masukkan perintah berikut:

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. Tutup jendela setelah perintah selesai karena hak istimewa administrator tidak lagi diperlukan. Sebagai praktik terbaik, Anda harus selalu menggunakan hak istimewa terendah yang dapat menyelesaikan tugas.

Jika perintah pengembangan mengaktifkan perangkat bola az gagal, lihat Memecahkan masalah Azure Sphere untuk bantuan.

Susun dan jalankan aplikasi HelloWorld RTApp dengan Visual Studio

  1. Mulai Visual Studio. Pilih Buka folder lokal, navigasikan ke folder tempat Anda mengekstrak file Azure_Sphere___Hello_World.zip yang diunduh, lalu pilih folder HelloWorld_RTApp_MT3620_Baremetal.

  2. Jika Anda tidak menggunakan MT3620 RDB, perbarui file app_manifest.json dan kode sampel untuk menentukan UART yang benar, misalnya ISU1.

  3. Jika pembuatan CMake tidak dimulai secara otomatis, pilih file CMakeLists.txt.

  4. Di jendela Output Visual Studio , output CMake akan menampilkan pesan CMake generation started. dan CMake generation finished..

  5. Pilih Build>Build Semua. Jika menu tidak ada, buka Penjelajah Solusi, klik kanan file CMakeLists.txt dan pilih Susun. Lokasi output aplikasi HelloWorld_RTApp_MT3620_Baremetal muncul di jendela Output .

  6. Pada menu Pilih Item Mulai , pilih HelloWorld_RTApp_MT3620_Baremetal (RTCore).

  7. Tekan F5 untuk menyebarkan aplikasi.

  8. Emulator terminal yang terhubung harus menampilkan output dari program HelloWorld_RTApp_MT3620_Baremetal. Program mengirimkan kata-kata berikut pada interval satu detik:

    Tick

    Tock

  9. Gunakan debugger untuk mengatur titik pecah, memeriksa variabel, dan mencoba tugas debugging lainnya.

Buat dan jalankan aplikasi HelloWorld RTApp dengan Visual Studio Code

  1. Di Visual Studio Code, buka folder HelloWorld_RTApp_MT3620_BareMetal dalam folder tempat Anda mengekstrak file Azure_Sphere___Hello_World.zip yang diunduh. Jika diminta untuk memilih kit, pilih Jangan gunakan kit.

  2. Jika Anda tidak menggunakan perangkat keras MT3620 RDB, perbarui file app_manifest.json dan kode sampel untuk menentukan UART yang benar, misalnya ISU1.

  3. Tekan F5 untuk memulai debugger. Jika proyek belum dibuat sebelumnya, atau jika file telah diubah dan disusun ulang diperlukan, Visual Studio Code akan menyusun proyek sebelum proses debug dimulai.

  4. Jendela output Azure Sphere akan memperlihatkan "Menyebarkan gambar..." diikuti dengan jalur ke SDK dan compiler.

  5. Emulator terminal yang terhubung harus menampilkan output dari program HelloWorld_RTApp_MT3620_Baremetal. Program mengirimkan kata-kata berikut pada interval satu detik:

    Tick

    Tock

  6. Gunakan fitur Visual Studio Code debugging untuk mengatur titik hentian, memeriksa variabel, dan mencoba tugas debugging lainnya.

Pemecahan masalah

Aplikasi mungkin mulai dijalankan sebelum OpenOCD membuat koneksi. Akibatnya, titik hentian yang diatur lebih awal dalam kode mungkin terlewatkan. Solusi sederhana untuk hal ini adalah dengan menunda dimulainya aplikasi hingga OpenOCD tersambung.

  1. Sisipkan kode berikut ini di awal titik entri aplikasi RTCoreMain. Ini akan menyebabkan aplikasi masuk dan tetap dalam while pengulangan hingga variabel f diatur ke true.

     volatile bool f = false;
     while (!f) {
        // empty.
     }
    
  2. Tekan F5 untuk memulai aplikasi dengan proses debug (F5) lalu eksekusi.

  3. Di panel Debug lokal , ubah nilai f dari nol menjadi satu.

  4. Langkah melalui kode seperti biasa.

Menyusun sampel

  1. Buka antarmuka baris perintah menggunakan PowerShell, Windows Command Prompt, atau shell perintah Linux. Navigasikan ke direktori build proyek Anda.

  2. Dari direktori build proyek Anda, di prompt perintah, jalankan CMake dengan parameter berikut:

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

      Nama prasetel konfigurasi build seperti yang ditentukan dalam CMakePresets.json.

    • --build <cmake-path>

      Direktori biner yang berisi singgahan CMake. Misalnya, jika Anda menjalankan CMake di sampel Azure Sphere, perintah build adalah cmake --build out/ARM-Debug.

    • <source-path>

      Jalur direktori yang berisi file sumber untuk aplikasi sampel. Dalam contoh, penyimpanan sampel Azure Sphere diunduh ke direktori yang disebut AzSphere.

      Parameter CMake dipisahkan oleh spasi. Karakter kelanjutan baris (^ untuk baris perintah Windows, \ untuk baris perintah Linux, atau ' untuk PowerShell) dapat digunakan untuk keterbacaan, tetapi tidak diperlukan.

    Contoh berikut ini memperlihatkan perintah CMake untuk RTApp. Jika ditunjukkan, ganti <jalur> file dengan jalur penginstalan untuk Toolchain GNU Arm Embedded pada sistem Anda.

    Prompt Perintah 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. Jalankan Ninja untuk membangun aplikasi dan membuat file paket gambar:

    ninja -C out/ARM-Debug
    

    Ninja menempatkan aplikasi yang dihasilkan dan file .imagepackage dalam direktori yang ditentukan.

    Anda juga dapat memanggil Ninja melalui CMake dengan perintah berikut:

    cmake --build out/<binary-dir>
    

    Atur <binary-dir> ke direktori biner yang berisi singgahan CMake. Misalnya, jika Anda menjalankan CMake di sampel Azure Sphere, perintah build adalah cmake --build out/ARM-Debug.

Saat memecahkan masalah, terutama setelah membuat perubahan pada perintah CMake, hapus seluruh build, lalu coba lagi.

Jalankan sampel

  1. Hapus aplikasi apa pun yang sudah disebarkan ke perangkat:

    az sphere device sideload delete
    
  2. Dari direktori proyek Anda, di prompt perintah, muat paket gambar yang dibuat ninja:

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

    Aplikasi akan mulai berjalan segera setelah dimuat. Berikut ini akan ditampilkan di emulator terminal yang terhubung:

    Tick
    
    Tock
    
    Tick
    .
    .
    .
    
  3. Dapatkan ID komponen untuk gambar:

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

    Perintah mengembalikan semua metadata untuk paket gambar. ID komponen untuk aplikasi muncul di bagian Identitas untuk Tipe Gambar Aplikasi. Misalnya:

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

    Anda bisa menggunakan perintah berikut ini untuk menghentikan, memulai, dan mendapatkan status aplikasi:

    az sphere device app stop --component-id <component id>
    
    az sphere device app start --component-id <component id>
    
    az sphere device app show-status --component-id <component id>
    

Debug sampel

  1. Hentikan aplikasi jika sedang berjalan.

    az sphere device app stop --component-id <component id>
    
  2. Mulai ulang aplikasi untuk proses debug.

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

    Perintah ini mengembalikan inti tempat aplikasi dijalankan.

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. Navigasikan ke folder Openocd untuk sysroot yang dibangun dengan aplikasi. Sysroots diinstal di folder penginstalan Azure Sphere SDK. Misalnya, di Windows folder diinstal secara default di dan di C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd Linux, di /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.

  4. Jalankan openocd seperti yang diperlihatkan contoh berikut ini. Contoh mengasumsikan aplikasi berjalan pada inti 0. Jika aplikasi berjalan di core 1, ganti "target io0" dengan "target 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. Navigasikan ke folder yang berisi file .out aplikasi dan mulai arm-none-eabi-gdb, yang merupakan bagian dari Toolchain GNU Arm Embedded:

    Prompt Perintah Windows

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

    Windows PowerShell

    & "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" HelloWorld_RTApp_MT3620_BareMetal.out
    
  6. Server OpenOCD menyediakan antarmuka server GDB pada :4444. Atur target untuk proses debug.

    target remote :4444

  7. Kini Anda dapat menjalankan perintah gdb.

  8. Emulator terminal yang terhubung harus menampilkan output dari aplikasi.

Menggunakan aplikasi mitra

Saat Anda memuat aplikasi ke perangkat Azure Sphere, alat penyebaran Azure Sphere secara default menghapus semua aplikasi yang sudah ada. Untuk mencegah hal ini terjadi ketika Anda mengembangkan aplikasi yang berkomunikasi satu sama lain, Anda perlu menandai aplikasi sebagai mitra. Saat Anda menyebarkan salah satu aplikasi, mitranya tidak akan dihapus. Lihat Menandai aplikasi sebagai mitra untuk detailnya.

Langkah berikutnya