Öğ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 Azure Sphere SDK'sını yükleyin.
- Bir katalog seçin ve cihazınızı talep edin.
- Ağı yapılandırın ve cihaz işletim sistemini güncelleştirin.
Örnek uygulamayı indirme
HelloWorld uygulamasını aşağıdaki gibi indirebilirsiniz:
- Tarayıcınızı Microsoft Samples Browser'ın üzerine gelin.
- Arama kutusuna "Azure Sphere" yazın.
- Arama sonuçlarından Azure Sphere - Merhaba Dünya'ı seçin.
- ZIP'i İndir'i seçin.
- İ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:
- Dosya>Tercihleri>Ayarları>Uzantıları>Azure Sphere'ı seçin.
- 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.
- 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.
- 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.
- 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.
- 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.
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.
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.
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
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.
Henüz yapmadıysanız Azure Sphere'da oturum açın:
az login
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.Aşağıdaki komutu girin:
az sphere device enable-development --enable-rt-core-debugging --catalog <CatalogName> --resource-group <ResourceGroupName>
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
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.
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.
CMake oluşturma işlemi otomatik olarak başlatılmazsa CMakeLists.txt dosyasını seçin.
Visual Studio Çıkış penceresinde, CMake çıkışı ve iletilerini
CMake generation started.
CMake generation finished.
göstermelidir.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.
Başlangıç Öğesi Seç menüsünde HelloWorld_RTApp_MT3620_Baremetal (RTCore) öğesini seçin.
Uygulamayı dağıtmak için F5 tuşuna basın.
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
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
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.
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.
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.
Azure Sphere çıkış penceresinde "Görüntü dağıtiliyor..." gösterilmelidir ardından SDK ve derleyicinin yolları.
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
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.
Uygulama giriş noktası RTCoreMain'in başına aşağıdaki kodu ekleyin. Bu, değişkeni
f
true olarak ayarlanana kadar uygulamanın bir döngüye girmesine ve döngüdewhile
kalmasına neden olur.volatile bool f = false; while (!f) { // empty. }
Uygulamayı hata ayıklama (F5) ile başlatmak için F5 tuşuna basın ve ardından yürütmeye bölün.
Yerel ayarlar hata ayıklama bölmesinde değerini sıfırdan bire değiştirin
f
.Kodda her zamanki gibi ilerleyin.
Örneği oluşturma
PowerShell, Windows Komut İstemi veya Linux komut kabuğunu kullanarak bir komut satırı arabirimi açın. Proje derleme dizininize gidin.
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<.
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ırcmake --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
Cihaza zaten dağıtılmış olan tüm uygulamaları silin:
az sphere device sideload delete
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 . . .
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
Çalışıyorsa uygulamayı durdurun.
az sphere device app stop --component-id <component id>
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
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-linux
yüklenir.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.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
OpenOCD sunucusu ,4444 üzerinde bir GDB sunucu arabirimi sağlar. Hata ayıklama için hedefi ayarlayın.
target remote :4444
Artık gdb komutlarını çalıştırabilirsiniz.
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
- Azure RTOS'u Azure Sphere ile çalıştırmayı öğrenin
- Gerçek zamanlı uyumlu çekirdekler için ek örnekleri keşfedin:
- Azure Sphere uygulamaları hakkında daha fazla bilgi edinin