Dela via


Använda lagring på Azure Sphere

I det här avsnittet beskrivs hur du använder lagring på en Azure Sphere-enhet. Azure Sphere tillhandahåller två typer av lagring, skrivskyddad flashlagring och anpassningsbar lagring.

Skrivskyddad lagring används för att lagra programbildpaket på en enhet så att innehållet inte kan ändras utan att programmet uppdateras. Detta kan omfatta data som användargränssnittstillgångar, statiska konfigurationsdata, binära resurser inklusive avbildningar av inbyggd programvara som används för att uppdatera externa MCU:er eller initieringsdata för mutable storage. Minne som är tillgängligt för program ger ytterligare information om mängden tillgängligt lagringsutrymme.

Mutable storage stores data that persists when a device reboots. Om du till exempel vill hantera systemtid med den lokala tidszonen kan du lagra tidszonsinställningarna i ett anpassningsbart lagringsutrymme. Några andra exempel är inställningar som en användare kan ändra eller hämta konfigurationsdata. Exempel på anpassningsbar lagring visar hur du använder mutable storage i ett program.

Observera

Om du uppdaterar blixten upprepade gånger slits den ut så småningom och gör den ogiltig. Därför bör du utforma koden för att undvika onödiga uppdateringar av blixten. Om du till exempel vill spara programtillståndet innan du avslutar det så att du kan återställa det sparade tillståndet efter en omstart kan du spara programmets tillstånd på blixten endast om tillståndet har ändrats.

Använda skrivskyddad lagring

Du kan använda applibs-funktionerna för att hantera skrivskyddad lagring. Ett exempel som använder de här funktionerna finns i Ansluta till webbtjänster med curl.

Krav på skrivskyddad lagring

Program som använder skrivskyddad lagring måste innehålla lämpliga huvudfiler.

Ta med lagringsrubrikerna och de ej byggda rubrikerna i projektet:

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

Lägga till en fil i ett avbildningspaket

Om du vill lägga till en fil i skrivskyddad lagring på Azure Sphere-enheten kan du lägga till den i projektet som en resurs och ta med den i programmets avbildningspaket. Använd de här funktionerna i CMakeLists.txt för att lägga till filen som en resurs:

  • Använd azsphere_target_add_image_package för att ange avbildningspaketfilen och eventuella resursfiler som ska ingå när du bygger. Till exempel:

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

Filerna "file1.dat" och "file2.dat" ska nu visas i avbildningspaketet. Mer information om de här funktionerna finns i Använda CMake-funktioner .

Observera

Absoluta sökvägar stöds inte för RESOURCE_FILES.

Använda avstängt lagringsutrymme

När du konfigurerar mutable storage för programmet tilldelas det till programmets komponent-ID och kan inte nås av ett program som har ett annat komponent-ID. Om programmets komponent-ID ändras har det nya programmet inte åtkomst till det tidigare programmets mutable storage.

Om du tar bort ett program från en enhet tas även det anpassningsbara lagringsutrymmet som tilldelats programmet bort. Om samma program sedan laddas tillbaka till enheten är det avstängbara lagringsutrymmet tomt. Men om du uppdaterar programmet utan att ta bort det behålls det mutable lagringsinnehållet.

Kommandot visa kvot för azsfärenhetsappen visar mängden avstängt lagringsutrymme som för närvarande används.

Azure Sphere-operativsystemet har mekanismer för energiförlustskydd för att undvika skadade kritiska konfigurationstillstånd och metadata för filsystem. Det mutable lagrings-API:et drar nytta av dessa funktioner. Det faktiska innehållet i muterbar lagring beror dock på om buffertar rensas och i vilken ordning, så det finns ingen garanti för att alla väntande ändringar vid tidpunkten för energiförlusten kommer att återspeglas i själva filen efter återställningen.

Du kan använda dessa Applibs-funktioner för att hantera mutable lagringsdata:

Krav på anpassningsbar lagring

Program som använder anpassningsbar lagring måste innehålla lämpliga huvudfiler och lägga till mutable lagringsinställningar i programmanifestet.

Rubrikfiler för anpassningsbar lagring

Ta med lagringsrubrikerna och de ej byggda rubrikerna i projektet:

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

Programmanifest

Om du vill använda API:erna i det här avsnittet måste du lägga till MutableStorage funktionen i programmanifestet och sedan ange fältet SizeKB . Fältet SizeKB är ett heltal som anger storleken på det muterbara lagringsutrymmet i kibibyte. Det maximala värdet är 64 och lagringsutrymmet allokeras enligt enhetens storlek på raderingsblocket. Allokeringen görs genom att avrunda värdet för StorlekKB till nästa blockstorlek om värdet inte är en hel multipel av enhetens blockstorlek.

Observera

MT3620 har en blockstorlek på 8 kB, så alla värden som inte är multiplar av 8 avrundas uppåt. Om du till exempel anger 12 kB i funktionen MutableStorage får du 16 kB på en MT3620.

I exemplet nedan läggs lagringsfunktionen MutableStorage till i programmanifestet med storleken 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
  }
}

Skriva fortlöpande data

Om du vill skriva data till fortlöpande lagring börjar du med att anropa funktionen Applibs Storage_OpenMutableFile för att hämta en filbeskrivning för en beständig datafil. Anropa write sedan funktionen för att skriva data till den fortlöpande datafilen. Om mängden data som du försöker skriva överskrider din mutable lagringsallokering kan skrivfunktionen lyckas. Men de enda data som skrivs är den del som inte överskrider lagringsallokeringen. För att säkerställa att alla data skrivs måste du kontrollera funktionsanropets write returvärde.

Läsa beständiga data

Om du vill läsa data från ett beständigt lagringssamtal Storage_OpenMutableFile för att hämta en filbeskrivning för den fortlöpande datafilen och anropa read sedan funktionen för att läsa data.

Ta bort fortlöpande data

Så här tar du bort data från beständigt lagringssamtal Storage_DeleteMutableFile.