Uso dell'archiviazione in Azure Sphere
Importante
Questa è la documentazione di Azure Sphere (legacy). Azure Sphere (legacy) viene ritirato il 27 settembre 2027 e gli utenti devono eseguire la migrazione ad Azure Sphere (integrato) entro questo periodo. Usare il selettore di versione posizionato sopra il sommario per visualizzare la documentazione di Azure Sphere (integrata).
Questo argomento descrive come usare lo spazio di archiviazione in un dispositivo Azure Sphere. Azure Sphere fornisce due tipi di archiviazione, ovvero lo spazio di archiviazione flash di sola lettura e lo spazio di archiviazione modificabile.
Lo spazio di archiviazione di sola lettura viene usato per archiviare i pacchetti immagine dell'applicazione in un dispositivo, in modo che il contenuto non possa essere modificato senza aggiornare l'applicazione. Può trattarsi di qualsiasi dato, ad esempio asset dell'interfaccia utente, dati di configurazione statici, risorse binarie incluse le immagini del firmware usate per aggiornare le MCU esterne o dati di inizializzazione per lo spazio di archiviazione modificabile. La sezione Memoria disponibile per le applicazioni fornisce altri dettagli sulla quantità di spazio di archiviazione disponibile.
Lo spazio di archiviazione modificabile consente di archiviare dati che vengono mantenuti in caso di riavvio del dispositivo. Ad esempio, se si vuole gestire l'ora di sistema con il fuso orario locale, è possibile archiviare le impostazioni di fuso orario nello spazio di archiviazione modificabile. Altri esempi sono le impostazioni modificabili da un utente o i dati di configurazione scaricati. L'esempio di spazio di archiviazione modificabile illustra come usare l'archiviazione modificabile in un'applicazione.
Nota
L'aggiornamento ripetuto del flash alla fine lo indossa e lo rende non valido. Pertanto, è necessario progettare il codice per evitare aggiornamenti non necessari del flash. Ad esempio, se si desidera salvare lo stato dell'applicazione prima di uscire in modo da poter ripristinare lo stato salvato dopo un riavvio, è consigliabile salvare lo stato dell'applicazione nel flash solo se lo stato è cambiato.
Uso dello spazio di archiviazione di sola lettura
È possibile usare queste funzioni Applibs per gestire lo spazio di archiviazione di sola lettura. Per un esempio che usa queste funzioni, vedere Connettersi ai servizi Web mediante curl.
Requisiti di archiviazione di sola lettura
Le applicazioni che usano l'archiviazione di sola lettura devono includere i file di intestazione appropriati.
Includere le intestazioni per lo spazio di archiviazione e unistd nel progetto:
#include <unistd.h>
#include <applibs/storage.h>
Aggiungere un file a un pacchetto immagine
Per aggiungere un file all'archiviazione di sola lettura nel dispositivo Azure Sphere, è possibile aggiungerlo al progetto come risorsa e includerlo nel pacchetto immagine dell'applicazione. Usare queste funzioni in CMakeLists.txt per aggiungere il file come risorsa:
Usare azsphere_target_add_image_package per specificare il file del pacchetto immagine e tutti i file di risorse da includere durante la compilazione. Ad esempio:
azsphere_target_add_image_package(${PROJECT_NAME} RESOURCE_FILES "file1.dat" "file2.dat")
I file "file1.dat" e "file2.dat" verranno ora visualizzati nel pacchetto immagine. 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 lo spazio di archiviazione modificabile per l'applicazione, a tale spazio viene assegnato l'ID di componente dell'applicazione e non è possibile accedervi da un'applicazione con un ID di componente diverso. Se l'ID del componente dell'applicazione viene modificato, la nuova applicazione non avrà accesso allo spazio di archiviazione modificabile dell'applicazione precedente.
Se si elimina un'applicazione da un dispositivo, viene eliminato anche lo spazio di archiviazione modificabile assegnato all'applicazione. Se la stessa applicazione viene quindi caricata nuovamente nel dispositivo, lo spazio di archiviazione modificabile sarà vuoto. Tuttavia, se si aggiorna l'applicazione senza eliminarla, il contenuto dello spazio di archiviazione modificabile viene mantenuto.
Il comando azsphere device app show-quota visualizza la quantità di spazio di archiviazione modificabile attualmente in uso.
Il sistema operativo Azure Sphere dispone di meccanismi di protezione contro la perdita di energia per evitare il danneggiamento dei metadati critici dello stato di configurazione e del file system. L'API di archiviazione modificabile trae vantaggio da queste funzionalità. Tuttavia, il contenuto effettivo dell'archiviazione modificabile dipende dal fatto che, e in quale ordine, i buffer vengono scaricati, quindi non c'è alcuna garanzia che tutte le modifiche in sospeso al momento della perdita di alimentazione vengano riflesse nel file stesso dopo il ripristino.
È possibile usare queste funzioni Applibs per gestire i dati nello spazio di archiviazione modificabile:
Requisiti dello spazio di archiviazione modificabile
Le applicazioni che usano lo spazio di archiviazione modificabile devono includere i file di intestazione appropriati e aggiungere le impostazioni dello spazio di archiviazione modificabile al manifesto dell'applicazione.
File di intestazione per lo spazio di archiviazione modificabile
Includere le intestazioni per lo spazio di archiviazione e unistd nel progetto:
#include <unistd.h>
#include <applibs/storage.h>
Manifesto dell'applicazione
Per usare le API di questo argomento, è necessario aggiungere la funzionalità MutableStorage
al manifesto dell'applicazione e quindi impostare il campo SizeKB
. Il campo SizeKB è un intero che specifica le dimensioni dello spazio di archiviazione modificabile in kibibyte. Il valore massimo è 64 e lo spazio di archiviazione viene allocato in base alla dimensione del blocco di cancellazione del dispositivo. L'allocazione avviene arrotondando per eccesso il valore di SizeKB alla dimensione del blocco successiva se il valore non è un multiplo intero della dimensione del blocco del dispositivo.
Nota
Il blocco di cancellazione di MT3620 è di 8 KB, quindi tutti i valori che non sono multipli di 8 verranno arrotondati. Se ad esempio si specifica il valore 12 KB nella funzionalità 'MutableStorage', si riceveranno 16 KB in un dispositivo 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 permanenti
Per scrivere dati nello spazio di archiviazione permanente, iniziare chiamando la funzione Applibs Storage_OpenMutableFile per recuperare un descrittore di file per un file di dati permanente. Chiamare poi la funzione write
per scrivere i dati nel file di dati permanente. Se la quantità di dati che si tenta di scrivere supera l'allocazione dello spazio di archiviazione modificabile, la funzione di scrittura potrebbe avere esito positivo. Verranno scritti però solo i dati che rientrano nello spazio di archiviazione allocato. Per assicurarsi che tutti i dati vengano scritti, è necessario controllare il valore restituito dalla chiamata della funzione write
.
Leggere dati permanenti
Per leggere dati dallo spazio di archiviazione permanente, chiamare Storage_OpenMutableFile per recuperare un descrittore di file per il file di dati permanente e quindi chiamare la funzione read
per leggere i dati.
Eliminare dati permanenti
Per eliminare dati dallo spazio di archiviazione permanente, chiamare Storage_DeleteMutableFile.