Uso del almacenamiento en Azure Sphere
Importante
Esta es la documentación de Azure Sphere (heredado). Azure Sphere (heredado) se retira el 27 de septiembre de 2027 y los usuarios deben migrar a Azure Sphere (integrado) en este momento. Use el selector de versiones situado encima de la TOC para ver la documentación de Azure Sphere (integrado).
Este tema describe cómo usar el almacenamiento en un dispositivo Azure Sphere. Azure Sphere ofrece dos tipos de almacenamiento: almacenamiento flash de solo lectura y almacenamiento mutable.
El almacenamiento de solo lectura se usa para almacenar paquetes de imagen de aplicaciones en un dispositivo, para que no se pueda modificar el contenido sin actualizar la aplicación. Esto puede incluir datos como recursos de interfaz de usuario, datos de configuración estáticos o recursos binarios, incluidas las imágenes de firmware utilizas para actualizar MCU externos o los datos de inicialización del almacenamiento mutable. Memoria disponible para las aplicaciones proporciona información adicional sobre la cantidad de almacenamiento disponible.
El almacenamiento mutable almacena los datos que se conservan cuando un dispositivo se reinicia. Por ejemplo, si desea administrar la hora del sistema con la zona horaria local, puede almacenar la configuración de zona horaria en el almacenamiento mutable. Otros ejemplos son la configuración que un usuario puede modificar o los datos de configuración descargados. El ejemplo de almacenamiento mutable muestra cómo se usa este en una aplicación.
Nota:
Al actualizar repetidamente el flash, finalmente se usa y lo hace no válido. Por lo tanto, debe 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 un reinicio, considere la posibilidad de guardar el estado de la aplicación en el flash solo si el estado ha cambiado.
Uso del almacenamiento de solo lectura
Puede usar estas funciones de Applibs para administrar el almacenamiento de solo lectura. Para obtener un ejemplo que usa estas funciones, consulte Conexión a servicios web mediante 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 storage y unistd en el proyecto:
#include <unistd.h>
#include <applibs/storage.h>
Adición de un archivo a un paquete de imagen
Para agregar un archivo al almacenamiento de solo lectura en el dispositivo Azure Sphere, puede agregarlo al proyecto como un recurso e incluirlo en el paquete de imágenes de la aplicación. Use estas funciones en CMakeLists.txt para agregar el archivo como un recurso:
Use azsphere_target_add_image_package para especificar el archivo del paquete de imágenes y los archivos de recursos que se van a incluir al compilar. 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 imágenes. Para más información acerca de estas funciones, consulte Uso de funciones de CMake.
Nota:
No se admiten rutas de acceso absolutas para RESOURCE_FILES.
Uso del almacenamiento mutable
Al configurar el almacenamiento mutable de la aplicación, se asigna al identificador de componente de la aplicación y no se puede acceder al mismo desde una aplicación que tenga un identificador de componente diferente. Si cambia el identificador 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, también se elimina el almacenamiento mutable asignado a la aplicación. Si se carga de nuevo la misma aplicación en el dispositivo, el almacenamiento mutable estará vacío. Sin embargo, si actualiza la aplicación sin eliminarla, se mantiene el contenido del almacenamiento mutable.
El comando azsphere device app show-quota muestra la cantidad de almacenamiento mutable actualmente en uso.
El sistema operativo Azure Sphere tiene mecanismos de protección de 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 reflejen en el propio archivo después de la recuperación.
Puede usar estas funciones de Applibs para administrar los datos del almacenamiento mutable:
Requisitos de almacenamiento mutable
Las aplicaciones que usan el almacenamiento mutable deben incluir los archivos de encabezado adecuados y agregar la configuración del almacenamiento mutable al manifiesto de aplicación.
Archivos de encabezado para el almacenamiento mutable
Incluya los encabezados storage y unistd en el proyecto:
#include <unistd.h>
#include <applibs/storage.h>
Manifiesto de aplicación
Para usar las API en este tema, debe agregar la funcionalidad MutableStorage
al manifiesto de aplicación y, a continuación, establecer el campo SizeKB
. El campo SizeKB es un entero que especifica el tamaño del almacenamiento mutable en kibibytes. El valor máximo es 64 y el almacenamiento se asigna según el tamaño de bloque de borrado del dispositivo. La asignación se realiza mediante el redondeo del valor de SizeKB al siguiente tamaño de bloque si el valor no es un múltiplo entero del tamaño de bloque del dispositivo.
Nota:
La placa de desarrollo 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 redondean hacia arriba. Por ejemplo, si especifica 12 KB en la funcionalidad "MutableStorage", recibirá 16 KB en una placa de desarrollo MT3620.
En el ejemplo siguiente, se agrega la funcionalidad de almacenamiento MutableStorage al manifiesto de 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
}
}
Escritura de datos persistentes
Para escribir datos en el almacenamiento persistente, empiece por llamar a la función de Applibs Storage_OpenMutableFile para recuperar un descriptor de archivo de un archivo de datos persistentes. A continuación, llame a la función write
para escribir los datos en el archivo de datos persistentes. Si la cantidad de datos que intenta escribir supera la asignación del almacenamiento mutable, es posible que se ejecute correctamente la función write; sin embargo, los únicos datos que se escriben será la parte que no supera la asignación de almacenamiento. Para asegurarse de que se escriben todos los datos debe comprobar el valor devuelto en la llamada a la función write
.
Lectura de datos persistentes
Para leer datos del almacenamiento persistente, llame a Storage_OpenMutableFile para recuperar un descriptor de archivo para el archivo de datos persistentes y, a continuación, llame a la función read
para leer los datos.
Eliminación de datos persistentes
Para eliminar datos del almacenamiento persistente, llame a Storage_DeleteMutableFile.