Uso dello spazio di archiviazione in Azure Sphere

Questo argomento descrive come usare l'archiviazione in un dispositivo Azure Sphere. Azure Sphere offre due tipi di memoria flash di sola lettura e memoria mutable.

L'archiviazione di sola lettura viene usata per archiviare i pacchetti di immagini dell'applicazione in un dispositivo in modo che il contenuto non possa essere modificato senza aggiornare l'applicazione. Possono essere inclusi dati come le risorse dell'interfaccia utente, i dati di configurazione statici, le risorse binarie, incluse le immagini del firmware usate per aggiornare mcus esterni o i dati di inizializzazione per l'archiviazione mutable. La memoria disponibile per le applicazioni fornisce ulteriori dettagli sulla quantità di spazio di archiviazione disponibile.

La memoria mutable archivia i dati che persistono al riavvio di un dispositivo. Ad esempio, se si vuole gestire l'ora di sistema usando il fuso orario locale, è possibile archiviare le impostazioni del fuso orario in un archivio modificabile. Altri esempi sono le impostazioni che un utente può modificare o i dati di configurazione scaricati. L'esempio di archiviazione modificabile mostra come usare lo spazio di archiviazione modificabile in un'applicazione.

Nota

Aggiornando ripetutamente il flash, alla fine lo consuma e lo rende non valido. Pertanto, è consigliabile progettare il codice per evitare aggiornamenti non necessari del flash. Ad esempio, se si vuole salvare lo stato dell'applicazione prima di uscire in modo da poter recuperare lo stato salvato dopo un riavvio, è consigliabile salvare lo stato dell'applicazione in modalità flash solo se lo stato è cambiato.

Uso dello spazio di archiviazione di sola lettura

È possibile usare queste funzioni applibs per gestire l'archiviazione di sola lettura. Per un esempio che usa queste funzioni, vedere Connettersi ai servizi Web con curl.

Requisiti di archiviazione di sola lettura

Le applicazioni che usano l'archiviazione di sola lettura devono includere i file di intestazione appropriati.

Includere lo spazio di archiviazione e le intestazioni nonistate nel progetto:

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

Aggiungere un file a un pacchetto di immagini

Per aggiungere un file per l'archiviazione di sola lettura nel dispositivo Azure Sphere, è possibile aggiungerlo al progetto come risorsa e includerlo nel pacchetto di immagini dell'applicazione:

  • Usare azsphere_target_add_image_package per specificare il file del pacchetto di immagini e i file di risorse da includere durante la creazione. Per esempio:

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

I file "file1.dat" e "file2.dat" dovrebbero ora essere visualizzati nel pacchetto di immagini. Per altre informazioni su queste funzioni, vedere Usare le funzioni CMake .

Nota

I percorsi assoluti non sono supportati per RESOURCE_FILES.

Uso dello spazio di archiviazione modificabile

Quando si configura l'archiviazione modificabile per l'applicazione, questa viene assegnata all'ID componente dell'applicazione e non è accessibile da un'applicazione che ha un ID componente diverso. Se l'ID componente dell'applicazione cambia, la nuova applicazione non avrà accesso alla memoria modificabile dell'applicazione precedente.

Se si elimina un'applicazione da un dispositivo, viene eliminata anche la memoria modificabile assegnata all'applicazione. Se la stessa applicazione viene poi caricata nuovamente nel dispositivo, la memoria mutable sarà vuota. Tuttavia, se si aggiorna l'applicazione senza eliminarla, vengono mantenuti i contenuti di archiviazione modificabili.

Il comando show-quota dell'app del dispositivo az sphere mostra la quantità di spazio di archiviazione mutable attualmente in uso.

Il sistema operativo Azure Sphere dispone di meccanismi di protezione dalla perdita di energia per evitare il danneggiamento dello stato critico della configurazione e dei metadati del file system. L'API di archiviazione modificabile trae vantaggio da queste funzionalità. Tuttavia, il contenuto effettivo dello spazio di archiviazione modificabile dipende dal fatto che, e in quale ordine, i buffer vengano svuotati, quindi non vi è alcuna garanzia che tutte le modifiche in sospeso al momento della perdita di energia si riflettano nel file stesso dopo il ripristino.

È possibile usare queste funzioni applibs per gestire i dati di archiviazione modificabili:

Requisiti di archiviazione modificabili

Le applicazioni che usano l'archiviazione modificabile devono includere i file di intestazione appropriati e aggiungere impostazioni di archiviazione modificabili al manifesto dell'applicazione.

File di intestazione per l'archiviazione modificabile

Includere lo spazio di archiviazione e le intestazioni nonistate nel progetto:

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

Manifesto dell'applicazione

Per usare le API in questo argomento, è necessario aggiungere la MutableStorage funzionalità al manifesto dell'applicazione e quindi impostare il SizeKB campo. Il campo SizeKB è un numero intero che specifica le dimensioni dello spazio di archiviazione mutabile in kibibyte. Il valore massimo è 64 e lo spazio di archiviazione viene allocato in base alle dimensioni del blocco di cancellazione del dispositivo. L'allocazione viene eseguita arrotondando il valore SizeKB alla dimensione successiva del blocco se il valore non è un multiplo intero delle dimensioni del blocco del dispositivo.

Nota

L'MT3620 ha una dimensione del blocco di 8 KB, quindi tutti i valori che non sono multipli di 8 verranno arrotondati per eccesso. Ad esempio, se specifichi 12 KB nella funzionalità "MutableStorage", riceverai 16 KB su un MT3620.

Nell'esempio seguente, la funzionalità di archiviazione MutableStorage viene aggiunta al manifesto dell'applicazione con una dimensione di 8 KB.

{
  "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
  }
}

Scrivere dati persistenti

Per scrivere dati nell'archiviazione persistente, iniziare chiamando la funzione Applibs Storage_OpenMutableFile recuperare un descrittore di file per un file di dati persistente. Chiamare quindi la write funzione per scrivere i dati nel file di dati persistenti. Se la quantità di dati che si tenta di scrivere supera l'allocazione di archiviazione modificabile, la funzione di scrittura potrebbe avere esito positivo. tuttavia, gli unici dati scritti saranno la parte che non supera l'allocazione di archiviazione. Per assicurarsi che tutti i dati siano scritti, è necessario controllare il valore restituito della chiamata di write funzione.

Leggere i dati persistenti

Per leggere i dati dalla chiamata di archiviazione persistente Storage_OpenMutableFile recuperare un descrittore di file per il file di dati persistenti e quindi chiamare la read funzione per leggere i dati.

Eliminare i dati persistenti

Per eliminare i dati dalla chiamata di archiviazione persistente Storage_DeleteMutableFile.