Verwenden von Speicher in Azure Sphere

In diesem Thema wird beschrieben, wie Sie Speicher auf einem Azure Sphere-Gerät verwenden. Azure Sphere bietet zwei Arten von Speicher: schreibgeschützter Flashspeicher und änderbarer Speicher.

Schreibgeschützter Speicher wird verwendet, um Anwendungsimagepakete auf einem Gerät zu speichern, sodass der Inhalt nicht geändert werden kann, ohne die Anwendung zu aktualisieren. Dies kann beliebige Daten wie Benutzeroberflächenobjekte, statische Konfigurationsdaten, binäre Ressourcen einschließlich Firmwareimages, die zum Aktualisieren externer MCUs verwendet werden, oder Initialisierungsdaten für veränderlichen Speicher umfassen. Der für Anwendungen verfügbare Arbeitsspeicher enthält zusätzliche Details zur verfügbaren Speichermenge.

Änderbarer Speicher speichert Daten, die beim Neustart eines Geräts beibehalten werden. Wenn Sie beispielsweise die Systemzeit mithilfe der lokalen Zeitzone verwalten möchten, können Sie die Zeitzoneneinstellungen im veränderlichen Speicher speichern. Einige weitere Beispiele sind Einstellungen, die ein Benutzer ändern kann, oder heruntergeladene Konfigurationsdaten. Das Beispiel für änderbaren Speicher zeigt, wie Sie änderbaren Speicher in einer Anwendung verwenden.

Hinweis

Das wiederholte Aktualisieren des Flashs trägt ihn schließlich ab und macht ihn ungültig. Daher sollten Sie Ihren Code so entwerfen, dass unnötige Updates des Flashs vermieden werden. Wenn Sie z. B. den Anwendungsstatus vor dem Beenden speichern möchten, damit Sie den gespeicherten Zustand nach einem Neustart wiederherstellen können, sollten Sie den Status der Anwendung nur dann im Flashmodus speichern, wenn sich der Zustand geändert hat.

Verwenden von schreibgeschütztem Speicher

Sie können diese Applibs-Funktionen verwenden, um schreibgeschützten Speicher zu verwalten. Ein Beispiel, das diese Funktionen verwendet, finden Sie unter Herstellen einer Verbindung mit Webdiensten mithilfe von curl.

Schreibgeschützte Speicheranforderungen

Anwendungen, die schreibgeschützten Speicher verwenden, müssen die entsprechenden Headerdateien enthalten.

Schließen Sie die Speicher- und unistd-Header in Ihr Projekt ein:

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

Hinzufügen einer Datei zu einem Imagepaket

Um eine Datei zum schreibgeschützten Speicher auf dem Azure Sphere-Gerät hinzuzufügen, können Sie sie Ihrem Projekt als Ressource hinzufügen und in das Imagepaket der Anwendung einschließen:

  • Verwenden Sie azsphere_target_add_image_package , um die Imagepaketdatei und alle Ressourcendateien anzugeben, 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 angezeigt 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 änderbarem Speicher

Wenn Sie änderbaren Speicher für Ihre Anwendung konfigurieren, wird er der Komponenten-ID der Anwendung zugewiesen und kann nicht von einer Anwendung mit einer anderen Komponenten-ID aufgerufen werden. Wenn sich die Komponenten-ID der Anwendung ändert, 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 der Anwendung zugewiesene änderbare Speicher gelöscht. Wenn dieselbe Anwendung dann wieder auf das Gerät geladen wird, ist der veränderliche Speicher leer. Wenn Sie die Anwendung jedoch aktualisieren, ohne sie zu löschen, werden die veränderlichen Speicherinhalte beibehalten.

Der Befehl az sphere device app show-quota zeigt die Menge des derzeit verwendeten veränderlichen Speichers an.

Das Azure Sphere-Betriebssystem verfügt über Mechanismen zum Schutz vor Stromverlust, um eine Beschädigung kritischer Konfigurationszustände und Dateisystemmetadaten zu vermeiden. Die änderbare Speicher-API profitiert von diesen Features. Der tatsächliche Inhalt des ä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 Stromausfalls nach der Wiederherstellung in der Datei selbst widergespiegelt werden.

Sie können diese Applibs-Funktionen verwenden, um änderbare Speicherdaten zu verwalten:

Anforderungen an veränderlichen Speicher

Anwendungen, die änderbaren Speicher verwenden, müssen die entsprechenden Headerdateien enthalten und dem Anwendungsmanifest veränderliche Speichereinstellungen hinzufügen.

Headerdateien für änderbaren Speicher

Schließen Sie die Speicher- und unistd-Header in Ihr Projekt ein:

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

Anwendungsmanifest

Um die APIs in diesem Thema verwenden zu können, müssen Sie die MutableStorage Funktion zum Anwendungsmanifest hinzufügen und dann das SizeKB Feld festlegen. Das Feld SizeKB ist eine ganze Zahl, die die Größe Ihres änderbaren Speichers in Kibibyte angibt. Der Maximalwert ist 64, und der Speicher wird entsprechend der Löschblockgröße des Geräts zugeordnet. Die Zuordnung erfolgt durch Aufrunden des SizeKB-Werts auf die nächste Blockgröße, wenn der Wert nicht ein ganzes Vielfaches der Blockgröße des Geräts ist.

Hinweis

Der MT3620 hat eine Löschblockgröße von 8 KB, sodass alle Werte, die kein Vielfaches von 8 sind, aufgerundet werden. Wenn Sie beispielsweise 12 KB in der MutableStorage-Funktion angeben, erhalten Sie 16 KB auf einem MT3620.

Im folgenden Beispiel 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 persistenter Daten

Um Daten in den persistenten Speicher zu schreiben, rufen Sie zunächst die Applibs-Funktion Storage_OpenMutableFile auf, um einen Dateideskriptor für eine persistente Datendatei abzurufen. Rufen Sie als Nächstes die write -Funktion auf, um die Daten in die persistente Datendatei zu schreiben. Wenn die Datenmenge, die Sie schreiben möchten, ihre änderbare Speicherbelegung überschreitet, kann die Schreibfunktion erfolgreich sein. Die einzigen geschriebenen Daten sind jedoch der Teil, der die Speicherbelegung nicht überschreitet. Um sicherzustellen, dass alle Daten geschrieben werden, müssen Sie den Rückgabewert des write Funktionsaufrufs überprüfen.

Lesen persistenter Daten

Um Daten aus dem persistenten Speicher zu lesen, rufen Sie Storage_OpenMutableFile einen Dateideskriptor für die persistente Datendatei abzurufen, und rufen Sie dann die read Funktion auf, um die Daten zu lesen.

Löschen persistenter Daten

Um Daten aus dem persistenten Speicher zu löschen, rufen Sie Storage_DeleteMutableFile auf.