Поделиться через


Использование хранилища в Azure Sphere

В этом разделе описывается использование хранилища на устройстве Azure Sphere. Azure Sphere предоставляет два типа хранилища: хранилище флэш-памяти только для чтения и изменяемое хранилище.

Хранилище только для чтения используется для хранения пакетов образов приложений на устройстве, поэтому содержимое невозможно изменить без обновления приложения. Сюда могут входить любые данные, такие как ресурсы пользовательского интерфейса, данные статической конфигурации, двоичные ресурсы, включая образы встроенного ПО, используемые для обновления внешних MKU, или данные инициализации для изменяемого хранилища. Память, доступная для приложений , предоставляет дополнительные сведения о доступном объеме хранилища.

Изменяемое хранилище хранит данные, которые сохраняются при перезагрузке устройства. Например, если вы хотите управлять системным временем с помощью местного часового пояса, можно сохранить параметры часового пояса в изменяемом хранилище. Другими примерами являются параметры, которые пользователь может изменять или загружать данные конфигурации. В примере изменяемого хранилища показано, как использовать изменяемое хранилище в приложении.

Примечание

Многократное обновление вспышки в конечном итоге изнашивает ее и делает ее недействительной. Поэтому следует разработать код, чтобы избежать ненужных обновлений флэш-памяти. Например, если вы хотите сохранить состояние приложения перед выходом, чтобы восстановить сохраненное состояние после перезапуска, рассмотрите возможность сохранения состояния приложения до вспышки только в том случае, если состояние изменилось.

Использование хранилища только для чтения

Эти функции Applibs можно использовать для управления хранилищем только для чтения. Пример использования этих функций см. в статье Подключение к веб-службам с помощью curl.

Требования к хранилищу только для чтения

Приложения, использующие хранилище только для чтения, должны содержать соответствующие файлы заголовков.

Включите хранилище и незапланированные заголовки в проект:

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

Добавление файла в пакет образа

Чтобы добавить файл в хранилище только для чтения на устройстве Azure Sphere, можно добавить его в проект в качестве ресурса и включить в пакет образа приложения:

  • Используйте azsphere_target_add_image_package , чтобы указать файл пакета образа и все файлы ресурсов, которые будут включаться при сборке. Например:

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

Файлы "file1.dat" и "file2.dat" теперь должны отображаться в пакете образа. Дополнительные сведения об этих функциях см. в разделе Использование функций CMake .

Примечание

Абсолютные пути не поддерживаются для RESOURCE_FILES.

Использование изменяемого хранилища

При настройке изменяемого хранилища для приложения оно назначается идентификатору компонента приложения и не может быть доступно приложению с другим идентификатором компонента. Если идентификатор компонента приложения изменится, новое приложение не будет иметь доступа к изменяемому хранилищу предыдущего приложения.

При удалении приложения с устройства также удаляется изменяемое хранилище, назначенное приложению. Если то же приложение будет загружено обратно на устройство, изменяемое хранилище будет пустым. Однако при обновлении приложения, не удаляя его, содержимое изменяемого хранилища будет сохранено.

Команда az sphere device app show-quota отображает объем используемого в настоящее время изменяемого хранилища.

В ОС Azure Sphere есть механизмы защиты от потери питания, чтобы избежать повреждения критически важного состояния конфигурации и метаданных файловой системы. Эти функции обеспечивают преимущества API изменяемого хранилища. Однако фактическое содержимое изменяемого хранилища зависит от того, очищаются ли буферы и в каком порядке, поэтому нет никакой гарантии, что все ожидающие изменения во время потери питания будут отражены в самом файле после восстановления.

Для управления изменяемыми данными хранилища можно использовать следующие функции Applibs:

Требования к изменяемому хранилищу

Приложения, использующие изменяемое хранилище, должны включать соответствующие файлы заголовков и добавлять параметры изменяемого хранилища в манифест приложения.

Файлы заголовков для изменяемого хранилища

Включите хранилище и незапланированные заголовки в проект:

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

Манифест приложения

Чтобы использовать API в этом разделе, необходимо добавить возможность в MutableStorageманифест приложения , а затем задать SizeKB поле . Поле SizeKB — это целое число, указывающее размер изменяемого хранилища в кибибайтах. Максимальное значение — 64, а хранилище выделяется в соответствии с размером блока стирания устройства. Выделение выполняется путем округления значения SizeKB до следующего размера блока, если значение не кратно размеру блока устройства.

Примечание

Размер блока стирания MT3620 — 8 КБ, поэтому все значения, не кратные 8, округляются вверх. Например, если указать 12 КБ в возможности MutableStorage, вы получите 16 КБ в MT3620.

В приведенном ниже примере возможность хранилища MutableStorage добавляется в манифест приложения размером 8 КБ.

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

Запись постоянных данных

Чтобы записать данные в постоянное хранилище, начните с вызова функции Applibs Storage_OpenMutableFile , чтобы получить дескриптор файла для постоянного файла данных. Затем вызовите функцию write для записи данных в постоянный файл данных. Если объем данных, которые вы пытаетесь записать, превышает выделение изменяемого хранилища, функция записи может завершиться успешно. тем не менее, только записанные данные будут частью, которая не превышает выделенное хранилище. Чтобы обеспечить запись всех данных, необходимо проверка возвращаемое значение write вызова функции.

Чтение постоянных данных

Для чтения данных из постоянного хранилища вызовите Storage_OpenMutableFile , чтобы получить дескриптор файла для постоянного файла данных, а затем вызвать функцию read для чтения данных.

Удаление постоянных данных

Чтобы удалить данные из постоянного хранилища, вызовите Storage_DeleteMutableFile.