Uso del almacenamiento en Azure Sphere
En este tema se describe cómo usar el almacenamiento en un dispositivo Azure Sphere. Azure Sphere proporciona dos tipos de almacenamiento: almacenamiento flash de solo lectura y almacenamiento mutable.
El almacenamiento de solo lectura se usa para almacenar paquetes de imágenes de aplicación en un dispositivo, por lo que el contenido no se puede modificar sin actualizar la aplicación. Esto puede incluir cualquier dato, como los activos de la interfaz de usuario, datos de configuración estática, recursos binarios, incluidas las imágenes de firmware usadas para actualizar MCU externas, o datos de inicialización para almacenamiento mutable. La memoria disponible para las aplicaciones proporciona detalles adicionales sobre la cantidad de almacenamiento disponible.
El almacenamiento mutable almacena datos que persisten cuando se reinicia un dispositivo. Por ejemplo, si quieres administrar la hora del sistema usando la zona horaria local, puedes almacenar la configuración de zona horaria en almacenamiento mutable. Algunos otros ejemplos son las opciones de configuración que un usuario puede modificar o descargar datos de configuración. La muestra de almacenamiento mutable muestra cómo usar el almacenamiento mutable en una aplicación.
Nota
La actualización repetida del flash eventualmente lo desgasta y lo hace inválido. Por lo tanto, debes diseñar el código para evitar actualizaciones innecesarias del flash. Por ejemplo, si desea guardar el estado de la aplicación antes de salir para poder recuperar el estado guardado después de reiniciar, considere la posibilidad de guardar el estado de la aplicación en flash solo si el estado ha cambiado.
Uso de almacenamiento de solo lectura
Puede usar estas funciones de Applibs para administrar el almacenamiento de solo lectura. Para obtener un ejemplo que use estas funciones, vea Conectarse a servicios web con curl.
Requisitos de almacenamiento de solo lectura
Las aplicaciones que usan almacenamiento de solo lectura deben incluir los archivos de encabezado adecuados.
Incluya los encabezados de almacenamiento y desistido en el proyecto:
#include <unistd.h>
#include <applibs/storage.h>
Agregar un archivo a un paquete de imagen
Para agregar un archivo a almacenamiento de solo lectura en el dispositivo Azure Sphere, puede agregarlo a su proyecto como recurso e incluirlo en el paquete de imagen de la aplicación. Use estas funciones en CMakeLists.txt para agregar el archivo como recurso:
Use azsphere_target_add_image_package para especificar el archivo de paquete de imagen y los archivos de recursos que se incluirán al crear. Por ejemplo:
azsphere_target_add_image_package(${PROJECT_NAME} RESOURCE_FILES "file1.dat" "file2.dat")
Los archivos "file1.dat" y "file2.dat" deberían aparecer ahora en el paquete de imagen. Vea Usar funciones CMake para obtener más información sobre estas funciones.
Nota
No se admiten rutas de acceso absolutas para RESOURCE_FILES.
Uso de almacenamiento mutable
Al configurar el almacenamiento mutable para la aplicación, se asigna al id. de componente de la aplicación y no se puede acceder a él mediante una aplicación que tenga un id. de componente diferente. Si cambia el id. de componente de la aplicación, la nueva aplicación no tendrá acceso al almacenamiento mutable de la aplicación anterior.
Si elimina una aplicación de un dispositivo, el almacenamiento mutable asignado a la aplicación también se elimina. Si la misma aplicación se carga de nuevo en el dispositivo, el almacenamiento mutable estará vacío. Sin embargo, si actualiza la aplicación sin eliminarla, se mantiene el contenido de almacenamiento mutable.
El comando azsphere device app show-quota muestra la cantidad de almacenamiento mutable actualmente en uso.
Azure Sphere OS dispone de mecanismos de protección contra pérdida de energía para evitar daños en el estado de configuración crítico y los metadatos del sistema de archivos. La API de almacenamiento mutable se beneficia de estas características. Sin embargo, el contenido real del almacenamiento mutable depende de si, y en qué orden, se vacían los búferes, por lo que no hay ninguna garantía de que todos los cambios pendientes en el momento de la pérdida de energía se reflejarán en el archivo en sí después de la recuperación.
Puede usar estas funciones de Applibs para administrar datos de almacenamiento mutable:
Requisitos de almacenamiento mutable
Las aplicaciones que usan almacenamiento mutable deben incluir los archivos de encabezado adecuados y agregar la configuración de almacenamiento mutable al manifiesto de la aplicación.
Archivos de encabezado para almacenamiento mutable
Incluya los encabezados de almacenamiento y desistido en el proyecto:
#include <unistd.h>
#include <applibs/storage.h>
Manifiesto de la aplicación
Para usar las API de este tema, debe agregar la MutableStorage
funcionalidad al manifiesto de la aplicación y, a continuación, establecer el SizeKB
campo. El campo SizeKB es un número entero que especifica el tamaño del almacenamiento mutable en el argumento kbibytes. El valor máximo es 64 y el almacenamiento se asigna según el tamaño del bloque de borrador del dispositivo. La asignación se realiza redondeando el valor TamañoKB al siguiente tamaño de bloque si el valor no es un múltiplo completo del tamaño de bloque del dispositivo.
Nota
El MT3620 tiene un tamaño de bloque de borrado de 8 KB, por lo que los valores que no sean múltiplos de 8 se redondearán hacia arriba. Por ejemplo, si especifica 12 KB en la función 'MutableStorage', recibirá 16 KB en un MT3620.
En el ejemplo siguiente, la capacidad de almacenamiento MutableStorage se agrega al manifiesto de la aplicación con un tamaño de 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
}
}
Escribir datos persistentes
Para escribir datos en almacenamiento persistente, empiece llamando a la función Applibs Storage_OpenMutableFile recuperar un descriptor de archivo para un archivo de datos persistente. A continuación, llame a la write
función para escribir los datos en el archivo de datos persistente. Si la cantidad de datos que intenta escribir supera la asignación de almacenamiento mutable, la función de escritura podría tener éxito; sin embargo, los únicos datos escritos serán la parte que no supere la asignación de almacenamiento. Para asegurarse de que todos los datos están escritos, debe comprobar el valor devuelto de la write
llamada de función.
Leer datos persistentes
Para leer datos de almacenamiento persistente llamar a Storage_OpenMutableFile para recuperar un descriptor de archivo para el archivo de datos persistente y, a continuación, llame a la read
función para leer los datos.
Eliminar datos persistentes
Para eliminar datos del Storage_DeleteMutableFile de llamadas de almacenamiento persistente.