Aracılığıyla paylaş


Azure Sphere cihaz hata ayıklama çıktısını alma

IoT Çözümü geliştirirken genellikle cihazlardan gelen hata ayıklama çıkışına erişmeniz gerekir. Bu, Visual Studio/Code'a bir hata ayıklama bağlantısıyla (ancak komut satırından da elde edilebilir) elde edilebilir ancak Visual Studio/Code'a bağlı olmayan cihazlar için hata ayıklama çıkışını da görüntülemeniz gerekebilir. Bu tür cihazlar uzun süreli testler çalıştırıyor veya hatta üretime dağıtılmış olabilir. Hata ayıklama verilerine erişmek için çeşitli seçenekler vardır:

  • Geliştirme bilgisayarına bağlı bir cihazdan hata ayıklama çıktısı alma
  • Geliştirme bilgisayarına bağlı olmayan bir cihaz için hata ayıklama çıktısı alma
  • Dış depolamada günlüğe kaydetme
  • Azure'da günlüğe kaydetme

Geliştirme bilgisayarına bağlı bir cihazdan hata ayıklama çıktısı alma

Sorun: Visual Studio/Visual Code kullanarak hata ayıklama sırasında hata ayıklama çıkışı nasıl elde edilir?

Seçenekler:

  • Üst düzey uygulama

    Azure Sphere üst düzey uygulaması , Log_Debug API'sini kullanarak hata ayıklama sırasında bağlı bir bilgisayara printf stili biçimlendirme ile hata ayıklama çıkışı gönderebilir. Bu çıkış Visual Studio kullanılarak veya hata ayıklama penceresi Visual Studio Code ya da komut satırından görüntülenebilir.

    Uygulamanızda hata ayıklama ayrıntısı bayrakları ayarlamayı ve uygulamanız çalıştığında ne kadar hata ayıklama çıkışının görüntüleneceğini denetlemek için CMake derleme tanımlarını kullanmayı düşünebilirsiniz. CMakeLists.txt dosyanızda derleme zamanı tanımı oluşturabilirsiniz:

    add_compile_definitions(DEBUG_FLAG)

    Daha sonra üst düzey uygulama kodunuzda kullanarak #ifdefuygulamanız tarafından görüntülenen hata ayıklama çıktısı miktarını artırabilir veya azaltabilirsiniz, örneğin:

    #ifdef DEBUG_FLAG
        Log_Debug("My Message\n");
    #endif
  • Gerçek zamanlı uyumlu uygulama

    Azure Sphere gerçek zamanlı özellikli bir uygulama (M4 çekirdeklerinden birinde çalışan), hata ayıklama/günlük bilgilerini ayrılmış bir M4 yalnızca iletme UART'sine yazabilir. Bunun için FTDI Friend gibi bir USB/Seri bağdaştırıcı ve terminal öykünücüsü gerekir.

    Azure Sphere Merhaba Dünya örneği, M4 hata ayıklama UART'sine nasıl yazdırılacağını gösterir.

    CodeThink ve MediaTek'ten de örnek uygulamalar kullanılabilir:

    Hata ayıklama bayrağı derleme zamanı tanımları gerçek zamanlı özellikli (M4) uygulamalarda da kullanılabilir.

  • Gerçek zamanlı özellikli bir uygulamadan üst düzey bir uygulamaya durum göndermek için çekirdekler arası iletişimleri kullanma

    Üst düzey ve gerçek zamanlı özellikli bir uygulamayı birleştiren bir sistem oluşturuyorsanız, her iki uygulamanın sistem durumunu günlüğe kaydetmek için üst düzey uygulamayı kullanmak isteyebilirsiniz. Bunun için çekirdekler arası iletişimler kullanılabilir; Azure Sphere Çekirdekler Arası İletişim örneği , üst düzey ve gerçek zamanlı özellikli bir uygulama arasında ileti geçirmek için basit bir arabirim uygular.

    Bu Azure Sphere öğrenme modülü , çekirdekler arasında özel iletiler geçirmek için çekirdekler arası mesajlaşma modeliyle birlikte Azure Sphere ve Azure RTOS'un nasıl kullanılacağını gösterir.

Geliştirme bilgisayarına bağlı olmayan bir cihaz için hata ayıklama çıktısı alma

Sorun: Cihazınız bir geliştirme bilgisayarına bağlı olmadığında hata ayıklama çıkışını günlüğe kaydetme

Seçenekler:

  • Ağ veya UART üzerinden hata ayıklama çıkışı gönderme

    Bir cihaz geliştirme bilgisayarına bağlandığında hata ayıklama günlüğü bilgilerini almak oldukça kolaydır. Ancak, bir cihaz bilgisayara bağlı olmadığında hata ayıklama/günlük bilgilerini de toplamak isteyebilirsiniz. Örneğin, uzun süreli testler çalıştıran bir cihaz kümeniz olabilir.

    Cihazlarınız bir ağa bağlıysa, ağ üzerinden hata ayıklama çıkışını bilgileri toplayıp çözümleyebilecek bir uygulamaya göndermek isteyebilirsiniz. Bu Azure Sphere Galerisi uygulaması , bir UDP yuvası üzerinden bu çıkışı göndermek ve almak için varsayılan Log_Debug davranışının nasıl geçersiz kılındığını gösterir.

    Varsayılan yüksek evel uygulama Log_Debug davranışını geçersiz kılmak için kullanılan mekanizmanın, örneğin Azure Sphere UART'lerinden birinde verilerin çıkışını almak üzere hata ayıklama günlüğü bilgilerini başka yerlere göndermek için de kullanılabileceğini unutmayın. bu UART örneğini , iletilerinizi bir UART'da günlüğe kaydetmek üzere UDPDebugLog Galerisi uygulamasıyla birleştirmek için başvuru olarak kullanabilirsiniz.

  • hata ayıklama çıkışını Azure IoT Hub/Azure IoT Central'a gönderme

    Hata ayıklama çıkışı, sorunları ortaya çıktı olarak tanılamak için yararlı olsa da, işlem sonrası için bir cihazdan telemetri/günlük bilgilerini depolamak da yararlı olabilir.

    Azure IoT Hub veya Azure IoT Central örneğini ayarlamak, iş mantığınızın bir parçası olarak kullanılabilecek cihaz telemetri verilerini göndermeniz için bir uç nokta sağlar. Ayrıca, telemetri/iş verilerinden ayrı olarak işlenebilen cihaz durumu/günlük bilgilerini de gönderebilirsiniz.

    Azure'a Günlüğe Kaydetme örneği, günlük iletilerinin IoT Hub telemetri olarak nasıl iletilip gelişmiş sorgu için bir Azure Veri Gezgini kümesinde depolanmalarını gösterir.

    • Azure IoT Hub

      Azure IoT Hub örneğiniz depolama/analiz için Bir Azure Veritabanı'na veri gönderecek şekilde yapılandırılabilir; iletileri filtrelemek de isteyebilirsiniz; bu durum EventHub ve Azure İşlevi aracılığıyla gerçekleştirilebilir.

      Azure IoT Hub için bir Azure İşlevi'ne veri göndererek iletileri işleyebilirsiniz. Azure İşlevleri makalesinin Azure IoT Hub tetikleyicisi, Azure İşlevi'ni bir Azure IoT Hub örneğine bağlamayı açıklar.

    • Azure IoT Central

      Azure IoT Central , verilerinizi aşağıdakiler gibi çeşitli uç noktalara sürekli olarak dışarı aktarma özelliğini içerir:

      • Azure Event Hubs
      • Azure Service Bus Kuyruğu
      • Azure Service Bus konu
      • Azure Blob Depolama
      • Web Kancası

      Web Kancası, oluşturduğunuz bir REST API Uç Noktasıdır; bu bir Azure İşlevi olabilir.

    Azure İşlevinizdeki iletileri verileri gönderen Cihaz Kimliğine göre filtrelemek isteyebileceğinizi unutmayın. Azure İşlevi'nde aşağıdaki kodu kullanarak Cihaz Kimliği'ni alabilirsiniz:

    public static async Task Run(EventData message, ILogger log)
    {
        var deviceId=message.SystemProperties["iothub-connection-device-id"];

        // Code to filter the messages goes here...
    }

Azure IoT Hub ve Azure IoT Central, istenen durumu (IoT Hub/Central uygulamasında ayarlanır) ve bildirilen durumu (cihazdan gelen durum) içeren Device Twins'i destekler. günlük verilerinin ayrıntı düzeyi için istenen durumu ayarlamak için Azure IoT Hub/Merkezi Cihaz İkizi kullanabilirsiniz (günlük sıklığını artırma/azaltma veya günlük verilerinin zenginliği). Azure IoT Örneği, Cihaz İkizi Desired State değişikliklerini işlemeyi gösterir.

Verileri depolamaya kaydetme

Azure Sphere, üst düzey bir uygulama için 64 KB'a kadar değiştirilebilir depolamayı destekler. Bu, ayarları, uygulama durumunu veya diğer verileri kalıcı hale getirmek için kullanılabilir. Uygulama geliştiricileri verileri seri hale getirmekten/seri durumdan çıkararak değişken depolama alanına aktarmadan/okuma durumundan (uygulama bildiriminin nasıl yapılandırıldığına bağlı olarak 64 KB'a kadar) anahtar/değer çiftinin (sözlük) nasıl kullanılacağını gösteren bir proje içerir.

Bir tür dış depolama alanına 64 KB'tan fazla Günlük/Durum verisi yazmak isteyebilirsiniz. Bu, aralıklı bağlantısı olan veya 64 KB'tan fazla veri depolaması/alması gereken cihazlar için yararlı olabilir.

Bir seçenek, verileri depolamak için SPI flash kullanarak dış depolama alanı eklemektir. Bu proje , aşağı akış cihazı için havadan güncelleştirme depolamak için SPI flash kullanır ve azure Sphere uygulamasından telemetri/durum verilerinin günlüğe kaydedilmesini destekleyecek şekilde değiştirilebilir.