Korzystanie z magazynu w usłudze Azure Sphere
W tym temacie opisano sposób korzystania z magazynu na urządzeniu Azure Sphere. Usługa Azure Sphere zapewnia dwa typy magazynu, magazyn flash tylko do odczytu i magazyn z możliwością wyciszenia.
Magazyn tylko do odczytu służy do przechowywania pakietów obrazów aplikacji na urządzeniu, aby nie można było modyfikować zawartości bez aktualizacji aplikacji. Może to obejmować wszelkie dane, takie jak zasoby interfejsu użytkownika, statyczne dane konfiguracyjne, zasoby binarne, w tym obrazy oprogramowania układowego używane do aktualizowania zewnętrznych mcu lub dane inicjowania na potrzeby magazynu z możliwością wyciszenia. Pamięć dostępna dla aplikacji zawiera dodatkowe informacje na temat ilości dostępnego miejsca do magazynowania.
Magazyn z możliwością wyciszenia przechowuje dane, które są zachowywane po ponownym uruchomieniu 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 z możliwością wyciszenia. Inne przykłady to ustawienia, które użytkownik może modyfikować lub pobierać dane konfiguracyjne. W przykładzie magazynu, który można wyciszyć , pokazano, jak korzystać z magazynu z możliwością wyciszenia w aplikacji.
Uwaga
Wielokrotne aktualizowanie lampy błyskowej w końcu go zużywa i sprawia, że jest nieprawidłowy. Dlatego należy zaprojektować kod, aby uniknąć niepotrzebnych aktualizacji lampy błyskowej. 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 w trybie flash tylko wtedy, gdy stan uległ zmianie.
Korzystanie z magazynu tylko do odczytu
Za pomocą tych funkcji Applibs można zarządzać magazynem tylko do odczytu. Aby uzyskać przykład, który korzysta z tych funkcji, zobacz Łączenie się z usługami sieci Web za pomocą funkcji zwijania.
Wymagania dotyczące miejsca do magazynowania tylko do odczytu
Aplikacje korzystające z magazynu tylko do odczytu muszą zawierać odpowiednie pliki nagłówków.
Uwzględnij w projekcie magazyn i nagłówki nieodstępne:
#include <unistd.h>
#include <applibs/storage.h>
Dodawanie pliku do pakietu obrazów
Aby dodać plik do magazynu tylko do odczytu na urządzeniu Azure Sphere, możesz dodać go do projektu jako zasób i dołączyć go do pakietu obrazów aplikacji:
Użyj azsphere_target_add_image_package , aby określić plik pakietu obrazów i wszelkie pliki zasobów, które mają zostać uwzględnione podczas tworzenia. Na przykład:
azsphere_target_add_image_package(${PROJECT_NAME} RESOURCE_FILES "file1.dat" "file2.dat")
Pliki "file1.dat" i "file2.dat" powinny być teraz wyświetlane w pakiecie obrazów. Aby uzyskać więcej informacji na temat tych funkcji , zobacz Używanie funkcji CMake .
Uwaga
Ścieżki bezwzględne nie są obsługiwane dla RESOURCE_FILES.
Korzystanie z magazynu z możliwością wyciszenia
Po skonfigurowaniu magazynu, który można wyciszyć dla aplikacji, jest on przypisany do identyfikatora składnika aplikacji i nie może być dostępny przez aplikację, która ma inny identyfikator składnika. Jeśli zmieni się identyfikator składnika aplikacji, nowa aplikacja nie będzie miała dostępu do magazynu z możliwością wyciszenia poprzedniej aplikacji.
Jeśli usuniesz aplikację z urządzenia, zmutowana pamięć przypisana do aplikacji również zostanie usunięta. Jeśli ta sama aplikacja zostanie załadowana z powrotem na urządzenie, wyciszony magazyn będzie pusty. Jeśli jednak zaktualizujesz aplikację bez jej usuwania, przechowywana zawartość magazynu z możliwością wyciszenia zostanie zachowana.
Polecenie pokaż-przydział aplikacji urządzenia azsphere wyświetla ilość obecnie używanego magazynu z możliwością wyciszenia.
System operacyjny Azure Sphere ma mechanizmy ochrony przed utratą mocy, aby uniknąć uszkodzeń krytycznych stanu konfiguracji i metadanych systemu plików. Te funkcje korzystają z interfejsu API magazynu, który można wyciszyć. Jednak rzeczywista zawartość magazynu z możliwością wyciszenia zależy od tego, czy i w jakiej kolejności bufory 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 Applibs można zarządzać danymi pamięci masowej, które można wyciszyć:
Wymagania dotyczące przestrzeni dyskowej z możliwością wyciszenia
Aplikacje korzystające z magazynu z możliwością wyciszenia muszą zawierać odpowiednie pliki nagłówków i dodać do manifestu aplikacji ustawienia pamięci z możliwością wyciszenia.
Pliki nagłówków dla magazynu z możliwością wyciszenia
Uwzględnij w projekcie magazyn i nagłówki nieodstępne:
#include <unistd.h>
#include <applibs/storage.h>
Manifest aplikacji
Aby użyć interfejsów API w tym temacie, należy dodać funkcję MutableStorage
do manifestu aplikacji , a następnie ustawić SizeKB
pole. Pole SizeKB to liczba całkowita określająca rozmiar wyciszonego magazynu w kibibytach. Maksymalna wartość to 64, a przestrzeń dyskowa jest przydzielana zgodnie z rozmiarem bloku wymazywania urządzenia. Alokacja odbywa się przez zaokrąglenie wartości SizeKB do następnego rozmiaru bloku, jeśli wartość nie jest całą wielokrotność rozmiaru bloku urządzenia.
Uwaga
Mt3620 ma rozmiar bloku wymazywania 8 KB, więc wszelkie wartości, które nie są wielokrotnościami liczby 8, zostaną zaokrąglone w górę. Jeśli na przykład w funkcji "MutableStorage" określisz wartość 12 KB, otrzymasz 16 KB na 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 danych trwałych
Aby zapisać dane do magazynu trwałego, zacznij od wywołania funkcji Applibs Storage_OpenMutableFile pobierania deskryptora pliku dla pliku danych trwałych. Następnie wywołaj funkcję, write
aby zapisać dane w pliku danych trwałych. Jeśli ilość danych, które próbujesz napisać, przekracza twoją zmienną alokację miejsca do magazynowania, funkcja zapisu może zakończyć się powodzeniem. Jednak jedynym zapisanym danym będzie część, która nie przekracza przydziału miejsca do magazynowania. Aby upewnić się, że wszystkie dane są zapisywane, należy sprawdzić wartość zwracana wywołania write
funkcji.
Odczytywanie danych trwałych
Aby odczytać dane z połączenia magazynu trwałego Storage_OpenMutableFile pobrać deskryptor pliku dla pliku danych trwałych, a następnie wywołaj funkcję read
w celu odczytania danych.
Usuwanie danych trwałych
Aby usunąć dane z połączenia magazynu trwałego Storage_DeleteMutableFile.