Freigeben über


Verwenden von Speicher unter Azure Sphere

Wichtig

Dies ist die Dokumentation zu Azure Sphere (Legacy). Azure Sphere (Legacy) wird am 27. September 2027 eingestellt, und Benutzer müssen bis zu diesem Zeitpunkt zu Azure Sphere (integriert) migrieren. Verwenden Sie die Versionsauswahl oberhalb des Inhaltsverzeichniss, um die Dokumentation zu Azure Sphere (Integriert) anzuzeigen.

In diesem Thema wird beschrieben, wie Sie Speicher auf einem Azure Sphere-Gerät verwenden. Azure Sphere verfügt über zwei Arten von Speicher: schreibgeschützten Flashspeicher und veränderlichen Speicher.

Schreibgeschützter Speicher wird verwendet, um Pakete mit Anwendungsimages auf einem Gerät zu speichern, sodass der Inhalt nicht geändert werden kann, ohne die Anwendung zu aktualisieren. Dies kann alle Daten umfassen, z.B. Ressourcen der Benutzeroberfläche, statische Konfigurationsdaten, binäre Ressourcen (einschließlich Firmwareimages für die Aktualisierung von externen Mikrocontrollern) oder Initialisierungsdaten für veränderlichen Speicher. Ausführlichere Informationen zu den verfügbaren Speichermengen finden Sie unter Für Anwendungen verfügbarer Arbeitsspeicher.

Im veränderlichen Speicher werden Daten gespeichert, die bei einem Neustart des Geräts beibehalten werden. Wenn Sie beispielsweise die Systemzeit anhand der lokalen Zeitzone verwalten möchten, können Sie die Einstellungen für die Zeitzone im veränderlichen Speicher ablegen. Andere Beispiele hierfür sind Einstellungen, die von einem Benutzer geändert werden können, oder heruntergeladene Konfigurationsdaten. Im Beispiel für veränderlichen Speicher wird veranschaulicht, wie Sie veränderlichen Speicher in einer Anwendung verwenden.

Hinweis

Die Aktualisierung des Blitzes trägt es schließlich ab und macht ihn ungültig. Daher sollten Sie Ihren Code entwerfen, um unnötige Updates des Flash zu vermeiden. Wenn Sie z. B. den Anwendungszustand vor dem Beenden speichern möchten, damit Sie den gespeicherten Zustand nach einem Neustart wiederherstellen können, sollten Sie den Zustand der Anwendung nur dann im Flash speichern, wenn sich der Zustand geändert hat.

Verwenden des schreibgeschützten Speichers

Sie können die hier angegebenen Applibs-Funktionen nutzen, um schreibgeschützten Speicher zu verwalten. Ein Beispiel, in dem diese Funktionen verwendet werden, finden Sie unter Herstellen einer Verbindung mit Webdiensten mithilfe von curl.

Anforderungen an schreibgeschützten Speicher

Für Anwendungen, für die schreibgeschützter Speicher genutzt wird, müssen die entsprechenden Headerdateien eingefügt werden.

Fügen Sie den Speicher und die unistd-Header in Ihr Projekt ein:

#include <unistd.h>
#include <applibs/storage.h>

Hinzufügen einer Datei zu einem Imagepaket

Zum Hinzufügen einer Datei zu schreibgeschütztem Speicher auf dem Azure Sphere-Gerät können Sie sie dem Projekt als Ressource hinzufügen und in das Imagepaket der Anwendung einschließen. Verwenden Sie diese Funktionen in „CMakeLists.txt“, um die Datei als Ressource hinzuzufügen:

  • Verwenden Sie azsphere_target_add_image_package zum Angeben der Imagepaketdatei und von Ressourcendateien, die beim Erstellen eingeschlossen werden sollen. Zum Beispiel:

    azsphere_target_add_image_package(${PROJECT_NAME} RESOURCE_FILES "file1.dat" "file2.dat")

Die Dateien „file1.dat“ und „file2.dat“ sollten jetzt im Imagepaket aufgeführt werden. Weitere Informationen zu diesen Funktionen finden Sie unter Verwenden von CMake-Funktionen.

Hinweis

Absolute Pfade werden für RESOURCE_FILES nicht unterstützt.

Verwenden von veränderlichem Speicher

Wenn Sie veränderlichen Speicher für Ihre Anwendung konfigurieren, wird er der Komponenten-ID der Anwendung zugewiesen. Eine Anwendung, die über eine andere Komponenten-ID verfügt, kann nicht darauf zugreifen. Sollte sich die Komponenten-ID der Anwendung ändern, hat die neue Anwendung keinen Zugriff auf den veränderlichen Speicher der vorherigen Anwendung.

Wenn Sie eine Anwendung von einem Gerät löschen, wird auch der veränderliche Speicher gelöscht, der der Anwendung zugewiesen ist. Falls dieselbe Anwendung dann zurück auf das Gerät geladen wird, ist der veränderliche Speicher leer. Wenn Sie die Anwendung aber aktualisieren, ohne sie zu löschen, wird der Inhalt des veränderlichen Speichers beibehalten.

Mit dem Befehl azsphere device app show-quota wird die Menge des veränderlichen Speichers angezeigt, die gerade verwendet wird.

Das Azure Sphere-Betriebssystem verfügt über Mechanismen zum Schutz vor Stromverlust, um Beschädigungen kritischer Konfigurationszustands- und Dateisystemmetadaten zu vermeiden. Die veränderbare Speicher-API profitiert von diesen Features. Der tatsächliche Inhalt des veränderbaren Speichers hängt jedoch davon ab, ob und in welcher Reihenfolge Puffer geleert werden, sodass keine Garantie besteht, dass alle ausstehenden Änderungen zum Zeitpunkt des Stromverlusts in der Datei selbst nach der Wiederherstellung widergespiegelt werden.

Sie können diese Applibs-Funktionen nutzen, um die Daten des veränderlichen Speichers zu verwalten:

Anforderungen für veränderlichen Speicher

Für Anwendungen, für die veränderlicher Speicher genutzt wird, müssen die passenden Headerdateien eingefügt und die Einstellungen für den veränderlichen Speicher dem Anwendungsmanifest hinzugefügt werden.

Headerdateien für veränderlichen Speicher

Fügen Sie den Speicher und die unistd-Header in Ihr Projekt ein:

#include <unistd.h>
#include <applibs/storage.h>

Anwendungsmanifest

Für die Verwendung der APIs in diesem Thema müssen Sie die Funktion MutableStorage dem Anwendungsmanifest hinzufügen und dann das Feld SizeKB festlegen. Das Feld „SizeKB“ ist eine ganze Zahl, mit dem die Größe Ihres veränderlichen Speichers in Kibibyte angegeben wird. Der maximale Wert beträgt 64, und der Speicher wird gemäß der Löschblockgröße des Geräts zugeordnet. Die Zuordnung erfolgt, indem der Wert „SizeKB“ auf die nächste Blockgröße aufgerundet wird, falls der Wert nicht einem ganzen Vielfachen der Blockgröße des Geräts entspricht.

Hinweis

Für die MT3620-Einheit gilt eine Löschblockgröße von 8 KB, sodass alle Werte, bei denen es sich nicht um ein Vielfaches von 8 handelt, aufgerundet werden. Wenn Sie beispielsweise für die Funktion „MutableStorage“ 12 KB angeben, erhalten Sie für MT3620 16 KB.

Im Beispiel unten wird die Speicherfunktion „MutableStorage“ dem Anwendungsmanifest mit einer Größe von 8 KB hinzugefügt.

{
  "SchemaVersion": 1,
  "Name" : "Mt3620App_Mutable_Storage",
  "ComponentId" : "9f4fee77-0c2c-4433-827b-e778024a04c3",
  "EntryPoint": "/bin/app",
  "CmdArgs": [],
   "Capabilities": {
    "AllowedConnections": [],
    "AllowedTcpServerPorts": [],
    "AllowedUdpServerPorts": [],
    "MutableStorage": { "SizeKB": 8 },
    "Gpio": [],
    "Uart": [],
    "WifiConfig": false,
    "NetworkConfig": false,
    "SystemTime": false
  }
}

Schreiben von beständigen Daten

Sie können Daten in den beständigen Speicher schreiben, indem Sie die Applibs-Funktion Storage_OpenMutableFile aufrufen, um einen Dateideskriptor für eine beständige Datendatei abzurufen. Rufen Sie als Nächstes die Funktion write auf, um die Daten in die beständige Datendatei zu schreiben. Falls die Datenmenge, die geschrieben werden soll, die Zuordnung Ihres veränderlichen Speichers überschreitet, ist die Schreibfunktion ggf. erfolgreich. Es wird aber nur der Teil der Daten geschrieben, für den der zugeordnete Speicher nicht überschritten wird. Um sicherzustellen, dass alle Daten geschrieben werden, müssen Sie den Rückgabewert des write-Funktionsaufrufs überprüfen.

Lesen von beständigen Daten

Rufen Sie zum Lesen von Daten aus dem beständigen Speicher Storage_OpenMutableFile auf, um einen Dateideskriptor für die Datei mit den beständigen Daten abzurufen. Rufen Sie anschließend die Funktion read auf, um die Daten zu lesen.

Löschen von beständigen Daten

Rufen Sie zum Löschen von Daten aus dem beständigen Speicher Storage_DeleteMutableFile auf.