Korzystanie z magazynu w usłudze Azure Sphere
Ważne
Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).
W tym temacie opisano sposób używania magazynu na urządzeniu usługi Azure Sphere. Usługa Azure Sphere udostępnia dwa typy magazynu, magazyn flash tylko do odczytu i magazyn modyfikowalny.
Magazyn tylko do odczytu służy do przechowywania pakietów obrazów aplikacji na urządzeniu, dzięki czemu nie można modyfikować zawartości bez aktualizowania aplikacji. Może to obejmować dowolne dane, takie jak zasoby interfejsu użytkownika, dane statycznej konfiguracji, zasoby binarne, w tym obrazy oprogramowania układowego używane do aktualizowania zewnętrznych jednostek MCU lub dane inicjowania na potrzeby magazynu modyfikowalnego. Pamięć dostępna dla aplikacji zawiera dodatkowe szczegóły dotyczące ilości dostępnego miejsca do magazynowania.
Magazyn modyfikowalny przechowuje dane, które są utrwalane podczas ponownego uruchamiania urządzenia. Jeśli na przykład chcesz zarządzać czasem systemowym przy użyciu lokalnej strefy czasowej, możesz przechowywać ustawienia strefy czasowej w magazynie modyfikowalnym. Niektóre inne przykłady to ustawienia, które użytkownik może modyfikować lub pobierać dane konfiguracji. W przykładzie magazynu modyfikowalnego pokazano, jak używać magazynu modyfikowalnego w aplikacji.
Uwaga
Wielokrotnie aktualizując błysk ostatecznie go zużywa i sprawia, że jest on nieprawidłowy. W związku z tym należy zaprojektować kod, aby uniknąć niepotrzebnych aktualizacji flash. Jeśli na przykład chcesz zapisać stan aplikacji przed zamknięciem, aby można było odzyskać zapisany stan po ponownym uruchomieniu, rozważ zapisanie stanu aplikacji na flash tylko wtedy, gdy stan uległ zmianie.
Korzystanie z magazynu tylko do odczytu
Za pomocą tych funkcji biblioteki Applibs można zarządzać magazynem tylko do odczytu. Przykład użycia tych funkcji można znaleźć w temacie Connect to web services using curl (Nawiązywanie połączenia z usługami internetowymi przy użyciu narzędzia curl).
Wymagania dotyczące magazynu tylko do odczytu
Aplikacje korzystające z magazynu tylko do odczytu muszą zawierać odpowiednie pliki nagłówkowe.
Uwzględnij w projekcie magazyn i niezaistniene nagłówki:
#include <unistd.h>
#include <applibs/storage.h>
Dodawanie pliku do pakietu obrazów
Aby dodać plik do magazynu tylko do odczytu na urządzeniu usługi Azure Sphere, możesz dodać go do projektu jako zasób i dołączyć go do pakietu obrazów aplikacji. Użyj tych funkcji w CMakeLists.txt, aby dodać plik jako zasób:
Użyj azsphere_target_add_image_package , aby określić plik pakietu obrazu i wszystkie pliki zasobów do uwzględnienia podczas kompilowania. Na przykład:
azsphere_target_add_image_package(${PROJECT_NAME} RESOURCE_FILES "file1.dat" "file2.dat")
Pliki "file1.dat" i "file2.dat" powinny teraz być wyświetlane w pakiecie obrazów. Aby uzyskać więcej informacji na temat tych funkcji, zobacz Korzystanie z funkcji CMake.
Uwaga
Ścieżki bezwzględne nie są obsługiwane w przypadku RESOURCE_FILES.
Korzystanie z magazynu modyfikowalnego
Podczas konfigurowania magazynu modyfikowalnego dla aplikacji jest on przypisywany do identyfikatora składnika aplikacji i nie można uzyskać do niej dostępu przez aplikację, która ma inny identyfikator składnika. Jeśli identyfikator składnika aplikacji ulegnie zmianie, nowa aplikacja nie będzie miała dostępu do magazynu modyfikowalnego poprzedniej aplikacji.
Jeśli usuniesz aplikację z urządzenia, magazyn modyfikowalny przypisany do aplikacji również zostanie usunięty. Jeśli ta sama aplikacja zostanie załadowana z powrotem na urządzenie, magazyn modyfikowalny będzie pusty. Jeśli jednak zaktualizujesz aplikację bez jej usunięcia, zawartość magazynu modyfikowalnego zostanie zachowana.
Polecenie azsphere device app show-quota wyświetla ilość obecnie używanego magazynu modyfikowalnego.
System operacyjny Usługi Azure Sphere ma mechanizmy ochrony przed utratą energii, aby uniknąć uszkodzenia krytycznego stanu konfiguracji i metadanych systemu plików. Interfejs API magazynu modyfikowalnego korzysta z tych funkcji. Jednak rzeczywista zawartość magazynu modyfikowalnego zależy od tego, czy i w jakiej kolejności są opróżniane, więc nie ma gwarancji, że wszystkie oczekujące zmiany w momencie utraty zasilania zostaną odzwierciedlone w samym pliku po odzyskaniu.
Za pomocą tych funkcji biblioteki Applibs można zarządzać danymi magazynu modyfikowalnego:
Wymagania dotyczące magazynu modyfikowalnego
Aplikacje korzystające z magazynu modyfikowalnego muszą zawierać odpowiednie pliki nagłówka i dodać ustawienia magazynu modyfikowalnego do manifestu aplikacji.
Pliki nagłówkowe dla magazynu modyfikowalnego
Uwzględnij w projekcie magazyn i niezaistniene nagłówki:
#include <unistd.h>
#include <applibs/storage.h>
Manifest aplikacji
Aby użyć interfejsów API w tym temacie, musisz dodać MutableStorage
możliwość do manifestu SizeKB
aplikacji, a następnie ustawić pole. Pole SizeKB to liczba całkowita określająca rozmiar magazynu modyfikowalnego w kibibajtach. Maksymalna wartość to 64, a magazyn jest przydzielany zgodnie z rozmiarem bloku wymazywania urządzenia. Alokacja jest wykonywana przez zaokrąglenie wartości SizeKB do następnego rozmiaru bloku, jeśli wartość nie jest liczbą rozmiaru bloku urządzenia.
Uwaga
Mt3620 ma rozmiar bloku wymazywania o rozmiarze 8 KB, więc wszystkie wartości, które nie mają wielokrotności 8, zostaną zaokrąglone w górę. Jeśli na przykład określisz 12 KB w funkcji "MutableStorage", otrzymasz 16 KB na maszynie MT3620.
W poniższym przykładzie funkcja magazynu MutableStorage jest dodawana do manifestu aplikacji o rozmiarze 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
}
}
Zapisywanie trwałych danych
Aby zapisać dane w magazynie trwałym, zacznij od wywołania funkcji Applibs Storage_OpenMutableFile w celu pobrania deskryptora plików dla trwałego pliku danych. Następnie wywołaj funkcję , write
aby zapisać dane w trwałym pliku danych. Jeśli ilość danych, które próbujesz zapisać, przekracza alokację magazynu modyfikowalnego, funkcja zapisu może zakończyć się powodzeniem; jednak jedyne zapisane dane będą częścią, która nie przekracza alokacji magazynu. Aby upewnić się, że wszystkie dane zostały zapisane, należy sprawdzić wartość zwracaną write
wywołania funkcji.
Odczytywanie danych trwałych
Aby odczytać dane z trwałego wywołania magazynu Storage_OpenMutableFile w celu pobrania deskryptora plików dla trwałego pliku danych, a następnie wywołaj read
funkcję w celu odczytania danych.
Usuwanie trwałych danych
Aby usunąć dane z trwałego wywołania magazynu Storage_DeleteMutableFile.