Aracılığıyla paylaş


Öğretici: Gerçek zamanlı uyumlu bir uygulama oluşturma

Bu öğreticide, Azure Sphere cihazında gerçek zamanlı çekirdekler için örnek bir uygulama oluşturma adımları gösterilmektedir. Gerçek zamanlı özellikli uygulamalar hakkında temel bilgiler için bkz. Azure Sphere uygulamalarına genel bakış .

Bu öğreticide şunları nasıl yapacağınızı öğreneceksiniz:

  • Örnek uygulama indirme
  • GNU Arm araç zincirini yükleme
  • Çıkışı görüntülemek için donanımı ayarlama
  • Geliştirmeyi ve hata ayıklamayı etkinleştirme
  • Çıkışı görüntülemek için terminal öykünücüsü başlatma
  • Gerçek zamanlı uyumlu bir uygulama oluşturma, çalıştırma ve hata ayıklama

Önemli

Bu yönergelerde, Seeed Studios'un MT3620 Dev Kit'i gibi MT3620 başvuru panosu tasarımı (RDB) donanımına göre donanım kullandığınız varsayılır. Farklı Azure Sphere donanımı kullanıyorsanız, UART'nin kullanıma açık olup olmadığını ve buna nasıl erişilir öğrenmek için üreticinin belgelerine bakın. Çıkışı farklı görüntülemek için donanımı ayarlamanız ve app_manifest.json dosyasının örnek kodunu ve Uarts alanını farklı bir UART kullanacak şekilde güncelleştirmeniz gerekebilir.

Önkoşullar

  • Windows veya Linuxiçin CMake ve Ninja yükleyin.
  • Windows veya Linuxiçin Visual Studio Code yükleyin.
  • Windows veya Linuxiçin CMake ve Ninja yükleyin.

Örnek uygulamayı indirme

HelloWorld uygulamasını aşağıdaki gibi indirebilirsiniz:

  1. Tarayıcınızı Microsoft Samples Browser'ın üzerine gelin.
  2. Arama kutusuna "Azure Sphere" yazın.
  3. Arama sonuçlarından Azure Sphere - Merhaba Dünya'ı seçin.
  4. ZIP'i İndir'i seçin.
  5. İndirilen dosyayı açın ve yerel bir dizine ayıklayın.

GNU Arm Embedded Toolchain'i yükleme

GNU Arm Embedded Toolchain'i Arm geliştirici web sitesinden indirip yükleyebilirsiniz. Geliştirme ortamını otomatik olarak yüklemek ve yapılandırmak için vcpkg yapıtlarını da kullanabilirsiniz.

  • Visual Studio 2022: Visual Studio 2022 kullanıyorsanız Arm geliştirici web sitesinden GNU Arm Embedded Toolchain'i (arm-none-eabi) yükleyin.
  • Visual Studio 2019: Araç zinciri, Visual Studio 2019'da Visual Studio için azure-sphere uzantısıyla otomatik olarak yüklenir. Visual Studio 2019 kullanıyorsanız , Çıkışı görüntülemek için donanımı ayarlama bölümüne geçin. Ancak GNU Arm Embedded Toolchain'i el ile yüklediyseniz Visual Studio yüklediğiniz sürümü kullanır.

Araç zincirini yüklemek için Arm geliştirici web sitesinde ARM Cortex-M4 işlemci derleyicisini içeren GNU Arm Embedded Toolchain'i (arm-none-eabi) bulun. İşletim sistemi platformunuzun derleyicisini indirmek ve yüklemek için buradaki yönergeleri izleyin.

Varsayılan olarak, Visual Studio Code araç zincirini arar ve yüklediğiniz sürümü bulmalıdır. Araç zinciriyle ilgili derleme sorunlarıyla karşılaşırsanız yolu aşağıdaki gibi girin:

  1. Dosya>Tercihleri>Ayarları>Uzantıları>Azure Sphere'ı seçin.
  2. Azure Sphere: Arm Gnu Yolu ayarında GNU Arm Embedded Toolchain yükleme yolunu girin.

Araç zincirini yüklemek için Arm geliştirici web sitesinde ARM Cortex-M4 işlemci derleyicisini içeren GNU Arm Embedded Toolchain'i (arm-none-eabi) bulun. İşletim sistemi platformunuzun derleyicisini indirmek ve yüklemek için buradaki yönergeleri izleyin.

Çıkışı görüntülemek için donanımı ayarlama

Şu anda her gerçek zamanlı çekirdek yalnızca TX UART'ı destekler. RTApps, cihazdan günlük çıkışı göndermek için bu UART'ı kullanabilir. Uygulama geliştirme ve hata ayıklama sırasında genellikle çıkışı okumak ve görüntülemek için bir yol gerekir. HelloWorld_RTApp_MT3620_BareMetal örneği, bir uygulamanın UART'ye nasıl yazabileceğini gösterir.

Gerçek zamanlı çekirdek üzerindeki UART'ı makinenizdeki bir USB bağlantı noktasına bağlamak için FTDI Friend gibi bir USB'den seriye bağdaştırıcı kullanın. Çıkışı görüntülemek için 115200-8-N-1 terminal ayarlarıyla (115200 bps, 8 bit, eşlik biti yok, tek durak bit) seri bağlantı kurmak için de bir terminal öykünücüsü gerekir.

Donanımı RTApp çıkışı görüntüleyecek şekilde ayarlamak için şu adımları izleyin. Pin konumlarını belirlemek için donanım üreticinizin belgelerine başvurmanız gerekir. Seeed Studios'un MT3620 Dev Kit'i gibi MT3620 başvuru panosu tasarımı (RDB) donanımına uygun bir donanım kullanıyorsanız RDB arabirim üst bilgilerine bakmak pin konumlarını belirlemenize yardımcı olabilir.

  1. USB-seri bağdaştırıcısındaki GND'yi geliştirme setinizde GND'ye bağlayın. MT3620 RDB donanımında GND Üst Bilgi 3, pin 2'dir.
  2. USB-seri bağdaştırıcı üzerindeki RX'i geliştirme setinizde IOM4-0 TX'e bağlayın. MT3620 RDB donanımında IOM4-0 TX Üst Bilgi 3, pin 6'dır.
  3. USB-seri bağdaştırıcısını geliştirme makinenizdeki ücretsiz bir USB bağlantı noktasına bağlayın ve seri cihazın hangi bağlantı noktasına bağlı olduğunu belirleyin. Windows'ta Aygıt Yöneticisi başlatın,Cihazları kapsayıcıya göregörüntüle'yi> seçin ve 'USB UART' ifadesini arayın. Örneğin, FT232R USB UART FTDI Arkadaş bağdaştırıcısını gösterir.
  4. Bir terminal öykünücüsü programı başlatın ve bağdaştırıcı tarafından kullanılan COM bağlantı noktasına bir 115200-8-N-1 terminali açın. Bağlantı noktasının ve hızın nasıl belirtileceğini öğrenmek için terminal öykünücüsü belgelerine bakın.

Çıkışı görüntülemek için donanımı ayarlama

Şu anda her gerçek zamanlı çekirdek yalnızca TX UART'ı destekler. RTApps, cihazdan günlük çıkışı göndermek için bu UART'ı kullanabilir. Uygulama geliştirme ve hata ayıklama sırasında genellikle çıkışı okumak ve görüntülemek için bir yol gerekir. HelloWorld_RTApp_MT3620_BareMetal örneği, bir uygulamanın UART'ye nasıl yazabileceğini gösterir.

Gerçek zamanlı çekirdek üzerindeki UART'ı makinenizdeki bir USB bağlantı noktasına bağlamak için FTDI Friend gibi bir USB'den seriye bağdaştırıcı kullanın. Çıkışı görüntülemek için 115200-8-N-1 terminal ayarlarıyla (115200 bps, 8 bit, eşlik biti yok, tek durak bit) seri bağlantı kurmak için de bir terminal öykünücüsü gerekir.

Donanımı RTApp çıkışı görüntüleyecek şekilde ayarlamak için şu adımları izleyin. Pin konumlarını belirlemek için donanım üreticinizin belgelerine başvurmanız gerekir. Seeed Studios'un MT3620 Dev Kit'i gibi MT3620 başvuru panosu tasarımı (RDB) donanımına uygun bir donanım kullanıyorsanız RDB arabirim üst bilgilerine bakmak pin konumlarını belirlemenize yardımcı olabilir.

  1. USB-seri bağdaştırıcısındaki GND'yi geliştirme setinizde GND'ye bağlayın. MT3620 RDB donanımında GND Üst Bilgi 3, pin 2'dir.

  2. USB-seri bağdaştırıcı üzerindeki RX'i geliştirme setinizde IOM4-0 TX'e bağlayın. MT3620 RDB donanımında IOM4-0 TX Üst Bilgi 3, pin 6'dır.

  3. USB-seri bağdaştırıcısını geliştirme makinenizdeki ücretsiz bir USB bağlantı noktasına bağlayın ve seri cihazın hangi bağlantı noktasına bağlı olduğunu belirleyin.

    • Windows'ta Aygıt Yöneticisi başlatın,Cihazları kapsayıcıya göregörüntüle'yi> seçin ve 'USB UART' ifadesini arayın. Örneğin, FT232R USB UART FTDI Arkadaş bağdaştırıcısını gösterir.

    • Linux'ta aşağıdaki komutu yazın:

      dmesg | grep ttyUSB
      

      Bağlantı noktası ttyUSBn olarak adlandırılmalıdır; burada n bağlantı noktası numarasını gösterir. Komutta dmesg birkaç USB bağlantı noktası listeleniyorsa, genellikle son bağlantı noktasıyla bağlantılı olan bağlantı noktası ekli olarak bildirilir. Örneğin, aşağıdakilerde ttyUSB4 kullanabilirsiniz:

    ~$ 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. Bir terminal öykünücüsü programı başlatın ve bağdaştırıcı tarafından kullanılan COM bağlantı noktasına bir 115200-8-N-1 terminali açın. Bağlantı noktasının ve hızın nasıl belirtileceğini öğrenmek için terminal öykünücüsü belgelerine bakın.

Geliştirmeyi ve hata ayıklamayı etkinleştirme

Azure Sphere cihazınızda örnek bir uygulama oluşturabilmeniz veya bunun için yeni uygulamalar geliştirebilmeniz için önce geliştirmeyi ve hata ayıklamayı etkinleştirmeniz gerekir. Varsayılan olarak, Azure Sphere cihazları "kilitlidir"; başka bir ifadeyle, geliştirme aşamasındaki uygulamaların bir bilgisayardan yüklenmesine izin vermezler ve uygulamaların hata ayıklamasına izin vermezler. Cihazı hata ayıklamaya hazırlamak bu kısıtlamayı kaldırır ve hata ayıklama için gereken yazılımları yükler ve cihaz özelliklerinin kilidini açar .

Gerçek zamanlı çekirdeklerde hata ayıklamak için az sphere device enable-development komutunu kullanın. Bu komut, cihazı hata ayıklama için bir bilgisayardan uygulamaları kabul etmek üzere yapılandırıp cihazı bulut uygulaması güncelleştirmelerine izin vermeyen Geliştirme cihaz grubuna atar. Uygulama geliştirme ve hata ayıklama sırasında, bulut uygulaması güncelleştirmelerinin geliştirme aşamasındaki uygulamanın üzerine yazmaması için cihazı bu grupta bırakmanız gerekir.

Windows'da hata ayıklama sunucularını ve her çekirdek türü için gerekli sürücüleri cihaza yükleyen parametresini eklemeniz --enable-rt-core-debugging gerekir.

  1. Henüz yapmadıysanız Azure Sphere'da oturum açın:

    az login
    
  2. Yönetici ayrıcalıklarıyla PowerShell veya Windows Komut İstemi kullanarak bir komut satırı arabirimi açın. --enable-rt-core-debugging parametresi, hata ayıklayıcısı için USB sürücüleri yüklediğinden yönetici ayrıcalığı gerektirir.

  3. Aşağıdaki komutu girin:

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. Yönetici ayrıcalığı artık gerekli olmadığından, komut tamamlandıktan sonra pencereyi kapatın. En iyi uygulama olarak, her zaman bir görevi gerçekleştirebilecek en düşük ayrıcalığı kullanmanız gerekir.

az sphere device enable-development komutu başarısız olursa yardım için bkz. Azure Sphere sorunlarını giderme.

Visual Studio ile HelloWorld RTApp uygulamasını derleme ve çalıştırma

  1. Visual Studio'yu başlatın. Yerel klasör aç'ı seçin, indirilen Azure_Sphere___Hello_World.zip dosyasını ayıkladığınız klasöre gidin ve HelloWorld_RTApp_MT3620_Baremetal klasörünü seçin.

  2. MT3620 RDB kullanmıyorsanız , app_manifest.json dosyasını ve örnek kodu doğru UART'yi (örneğin ISU1) belirtecek şekilde güncelleştirin.

  3. CMake oluşturma işlemi otomatik olarak başlatılmazsa CMakeLists.txt dosyasını seçin.

  4. Visual Studio Çıkış penceresinde, CMake çıkışı ve iletilerini CMake generation started.CMake generation finished.göstermelidir.

  5. Tümünü Derle'yi> seçin. Menü yoksa Çözüm Gezgini açın, CMakeLists.txt dosyasına sağ tıklayın ve Oluştur'u seçin. HelloWorld_RTApp_MT3620_Baremetal uygulamasının çıkış konumu Çıkış penceresinde görünür.

  6. Başlangıç Öğesi Seç menüsünde HelloWorld_RTApp_MT3620_Baremetal (RTCore) öğesini seçin.

  7. Uygulamayı dağıtmak için F5 tuşuna basın.

  8. Bağlı terminal öykünücüsü, HelloWorld_RTApp_MT3620_Baremetal programından çıktı göstermelidir. Program aşağıdaki sözcükleri bir saniyelik aralıklarla gönderir:

    Tick

    Tock

  9. Kesme noktaları ayarlamak, değişkenleri incelemek ve diğer hata ayıklama görevlerini denemek için hata ayıklayıcısını kullanın.

Visual Studio Code ile HelloWorld RTApp uygulamasını derleme ve çalıştırma

  1. Visual Studio Code'da, indirilen Azure_Sphere___Hello_World.zip dosyasını ayıkladığınız klasörde HelloWorld_RTApp_MT3620_BareMetal klasörünü açın. Bir set seçmeniz istenirse Set kullanma'yı seçin.

  2. MT3620 RDB donanımı kullanmıyorsanız , app_manifest.json dosyasını ve örnek kodu doğru UART'yi (örneğin ISU1) belirtecek şekilde güncelleştirin.

  3. Hata ayıklayıcıyı başlatmak için F5 tuşuna basın. Proje daha önce oluşturulmamışsa veya dosyalar değişmişse ve yeniden derleme gerekiyorsa, Visual Studio Code hata ayıklama başlamadan önce projeyi oluşturur.

  4. Azure Sphere çıkış penceresinde "Görüntü dağıtiliyor..." gösterilmelidir ardından SDK ve derleyicinin yolları.

  5. Bağlı terminal öykünücüsü, HelloWorld_RTApp_MT3620_Baremetal programından çıktı göstermelidir. Program aşağıdaki sözcükleri bir saniyelik aralıklarla gönderir:

    Tick

    Tock

  6. Kesme noktalarını ayarlamak, değişkenleri incelemek ve diğer hata ayıklama görevlerini denemek için Visual Studio Code hata ayıklama özelliklerini kullanın.

Sorun giderme

Uygulama, OpenOCD bağlantı oluşturmadan önce yürütülüyor olabilir. Sonuç olarak, kodun başında ayarlanan kesme noktaları kaçırılabilir. Bunun için basit bir geçici çözüm, OpenOCD bağlanana kadar uygulamanın başlatılmasını geciktirmektir.

  1. Uygulama giriş noktası RTCoreMain'in başına aşağıdaki kodu ekleyin. Bu, değişkeni ftrue olarak ayarlanana kadar uygulamanın bir döngüye girmesine ve döngüde while kalmasına neden olur.

     volatile bool f = false;
     while (!f) {
        // empty.
     }
    
  2. Uygulamayı hata ayıklama (F5) ile başlatmak için F5 tuşuna basın ve ardından yürütmeye bölün.

  3. Yerel ayarlar hata ayıklama bölmesinde değerini sıfırdan bire değiştirinf.

  4. Kodda her zamanki gibi ilerleyin.

Örneği oluşturma

  1. PowerShell, Windows Komut İstemi veya Linux komut kabuğunu kullanarak bir komut satırı arabirimi açın. Proje derleme dizininize gidin.

  2. Proje derleme dizininizden komut isteminde CMake'i aşağıdaki parametrelerle çalıştırın:

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

      CMakePresets.json'de tanımlanan derleme yapılandırması önayar adı.

    • --build <cmake-path>

      CMake önbelleğini içeren ikili dizin. Örneğin, CMake'i bir Azure Sphere örneğinde çalıştırırsanız derleme komutu olacaktır cmake --build out/ARM-Debug.

    • <source-path>

      Örnek uygulamanın kaynak dosyalarını içeren dizinin yolu. Örnekte Azure Sphere örnek deposu AzSphere adlı bir dizine indirildi.

      CMake parametreleri boşluklarla ayrılır. Satır devamlılığı karakteri (Windows komut satırı için^, Linux komut satırı için \ veya PowerShell için ' ) okunabilirlik için kullanılabilir, ancak gerekli değildir.

    Aşağıdaki örneklerde RTApp için CMake komutları gösterilmektedir. Belirtildiği yerde dosya yolunu> sisteminizdeki GNU Arm Embedded Toolchain yükleme yolu ile değiştirin<.

    Windows Komut İstemi

    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. Uygulamayı derlemek ve görüntü paketi dosyasını oluşturmak için Ninja'yi çalıştırın:

    ninja -C out/ARM-Debug
    

    Ninja, sonuçta elde edilen uygulamayı ve .imagepackage dosyalarını belirtilen dizine yerleştirir.

    Aşağıdaki komutla CMake aracılığıyla Ninja'ya da çağrı yapabilirsiniz:

    cmake --build out/<binary-dir>
    

    CMake önbelleğini içeren ikili dizine ayarlayın <binary-dir> . Örneğin, CMake'i bir Azure Sphere örneğinde çalıştırırsanız derleme komutu olacaktır cmake --build out/ARM-Debug.

Sorun giderme sırasında, özellikle CMake komutlarınızda herhangi bir değişiklik yaptıktan sonra derlemenizin tamamını silin ve yeniden deneyin.

Örneği çalıştırma

  1. Cihaza zaten dağıtılmış olan tüm uygulamaları silin:

    az sphere device sideload delete
    
  2. Proje dizininizden komut isteminde ninja tarafından oluşturulan görüntü paketini yükleyin:

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

    Uygulama yüklendikten kısa süre sonra çalışmaya başlar. Bağlı terminal öykünücüsnde aşağıdakiler görüntülenir:

    Tick
    
    Tock
    
    Tick
    .
    .
    .
    
  3. Görüntünün bileşen kimliğini alın:

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

    komutu, görüntü paketi için tüm meta verileri döndürür. Uygulamanın bileşen kimliği, Uygulama Görüntü Türü'ne ilişkin Kimlik bölümünde görünür. Örneğin:

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

    Uygulamanın durumunu durdurmak, başlatmak ve almak için aşağıdaki komutları kullanabilirsiniz:

    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>
    

Örnekte hata ayıklama

  1. Çalışıyorsa uygulamayı durdurun.

    az sphere device app stop --component-id <component id>
    
  2. Hata ayıklama için uygulamayı yeniden başlatın.

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

    Bu komut, uygulamanın üzerinde çalıştığı çekirdeği döndürür.

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. Uygulamanın oluşturulduğu sysroot için Openocd klasörüne gidin. Sysroot'lar Azure Sphere SDK yükleme klasörüne yüklenir. Örneğin, Windows'da klasör varsayılan olarak konumunda ve Linux'ta C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd/opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linuxyüklenir.

  4. Aşağıdaki örnekte gösterildiği gibi komutunu çalıştırın openocd . Örnekte uygulamanın çekirdek 0 üzerinde çalıştığı varsayılır. Uygulama çekirdek 1'de çalışıyorsa "targets io0" yerine "targets io1" yazın.

    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. application .out dosyasını içeren klasöre gidin ve GNU Arm Embedded Toolchain'in bir parçası olan dosyasını başlatın arm-none-eabi-gdb:

    Windows Komut İstemi

    "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. OpenOCD sunucusu ,4444 üzerinde bir GDB sunucu arabirimi sağlar. Hata ayıklama için hedefi ayarlayın.

    target remote :4444

  7. Artık gdb komutlarını çalıştırabilirsiniz.

  8. Bağlı terminal öykünücüsü uygulamanın çıkışını göstermelidir.

İş ortağı uygulamalarını kullanma

Azure Sphere cihazına bir uygulama yüklediğinizde, Azure Sphere dağıtım araçları varsayılan olarak tüm mevcut uygulamaları siler. Birbiriyle iletişim kuran uygulamalar geliştirirken bunun olmasını önlemek için uygulamaları iş ortağı olarak işaretlemeniz gerekir. Uygulamalardan birini dağıttığınızda iş ortakları silinmez. Ayrıntılar için bkz. Uygulamaları iş ortağı olarak işaretleme .

Sonraki adımlar