Usar o armazenamento no Azure Sphere
Importante
Esta é a documentação do Azure Sphere (herdado). O Azure Sphere (herdado) será desativado em 27 de setembro de 2027 e os usuários devem migrar para o Azure Sphere (integrado) até esse momento. Use o seletor de versão localizado acima do sumário para exibir a documentação do Azure Sphere (Integrado).
Este tópico descreve como usar o armazenamento em um dispositivo com Azure Sphere. O Azure Sphere fornece dois tipos de armazenamento: somente leitura e mutável.
O armazenamento somente leitura é usado para armazenar pacotes de imagem do aplicativo em um dispositivo, para que o conteúdo não possa ser modificado sem atualizar o aplicativo. Isso pode incluir quaisquer dados, como ativos de interface do usuário, dados de configuração estática, recursos binários, incluindo as imagens de firmware usadas para atualizar MCUs externos ou dados de inicialização para o armazenamento mutável. A memória disponível para aplicativos fornece detalhes adicionais sobre a quantidade de armazenamento disponível.
O armazenamento mutável armazena dados que persistem quando um dispositivo é reinicializado. Por exemplo, se você quiser gerenciar a hora do sistema usando o fuso horário local, armazene as configurações de fuso horário no armazenamento mutável. Outros exemplos são as configurações que um usuário pode modificar ou dados de configuração baixados. O exemplo de armazenamento mutável mostra como usar o armazenamento mutável em um aplicativo.
Observação
Atualizar repetidamente o flash eventualmente o desgasta e o torna inválido. Portanto, você deve projetar seu código para evitar atualizações desnecessárias do flash. Por exemplo, se você quiser salvar o estado do aplicativo antes de sair para que possa recuperar o estado salvo após uma reinicialização, considere salvar o estado do aplicativo no flash somente se o estado tiver sido alterado.
Usar o armazenamento somente leitura
Você pode usar essas funções Applibs para gerenciar o armazenamento somente leitura. Para ver um exemplo que usa essas funções, consulte Conectar-se a serviços Web usando curl.
Requisitos de armazenamento somente leitura
Os aplicativos que usam o armazenamento somente leitura precisam incluir os arquivos de cabeçalho apropriados.
Inclua os cabeçalhos de armazenamento e unistd em seu projeto:
#include <unistd.h>
#include <applibs/storage.h>
Adicionar um arquivo a um pacote de imagens
Para adicionar um arquivo ao armazenamento somente leitura no dispositivo Azure Sphere, adicione-o ao projeto como um recurso e inclua-o no pacote de imagens do aplicativo. Use essas funções em CMakeLists.txt para adicionar o arquivo como um recurso:
Use azsphere_target_add_image_package para especificar o arquivo de pacote de imagens e os arquivos de recursos a serem incluídos durante a compilação. Por exemplo:
azsphere_target_add_image_package(${PROJECT_NAME} RESOURCE_FILES "file1.dat" "file2.dat")
Os arquivos "file1.dat" e "file2.dat" agora deverão aparecer no pacote de imagem. Confira Usar funções do CMake para obter mais informações sobre essas funções.
Observação
Não há suporte para caminhos absolutos para RESOURCE_FILES.
Usar o armazenamento mutável
Quando você configura o armazenamento mutável para o seu aplicativo, ele recebe a ID do componente do aplicativo e não pode ser acessado por um aplicativo que tenha uma ID de componente diferente. Se a ID do componente do aplicativo mudar, o novo aplicativo não terá acesso ao armazenamento mutável do aplicativo anterior.
Se você excluir um aplicativo de um dispositivo, o armazenamento mutável atribuído ao aplicativo também será excluído. Se o mesmo aplicativo for carregado novamente no dispositivo, o armazenamento mutável ficará vazio. No entanto, se você atualizar o aplicativo sem excluí-lo, o conteúdo de armazenamento mutável será mantido.
O comando azsphere device app show-quota exibe a quantidade de armazenamento mutável atualmente em uso.
O sistema operacional do Azure Sphere tem mecanismos de proteção contra perda de energia em vigor para evitar a corrupção do estado de configuração crítico e dos metadados do sistema de arquivos. A API de armazenamento mutável se beneficia desses recursos. No entanto, o conteúdo real do armazenamento mutável depende de se, e em que ordem, os buffers são liberados, portanto, não há garantia de que todas as alterações pendentes no momento da perda de energia serão refletidas no próprio arquivo após a recuperação.
Você pode usar essas funções Applibs para gerenciar os dados de armazenamento mutável:
Requisitos de armazenamento mutável
Aplicativos que usam o armazenamento mutável devem incluir os arquivos de cabeçalho apropriado e adicionam as configurações de armazenamento mutável ao manifesto do aplicativo.
Arquivos de cabeçalho para armazenamento mutável
Inclua os cabeçalhos de armazenamento e unistd em seu projeto:
#include <unistd.h>
#include <applibs/storage.h>
Manifesto do aplicativo
Para usar as APIs neste tópico, adicione a funcionalidade MutableStorage
ao manifesto do aplicativo e depois defina o campo SizeKB
. O campo SizeKB é um inteiro que especifica o tamanho de seu armazenamento mutável em kibibytes. O valor máximo é de 64, e o armazenamento é alocado de acordo com o tamanho do bloco de apagamento do dispositivo. A alocação é feita pelo arredondamento do valor de SizeKB para o próximo tamanho de bloco, se o valor não for um múltiplo inteiro de acordo com o tamanho do bloco do dispositivo.
Observação
O MT3620 tem um tamanho de bloco de apagamento de 8 KB, portanto, todos os valores que não sejam múltiplos de 8 serão arredondados. Por exemplo, se você especificar 12 KB na funcionalidade 'MutableStorage', receberá 16 KB em um MT3620.
No exemplo a seguir, a capacidade de armazenamento de MutableStorage é adicionada ao manifesto do aplicativo com um tamanho 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
}
}
Gravar dados persistentes
Para gravar dados no armazenamento persistente, comece chamando a função Applibs Storage_OpenMutableFile para recuperar um descritor de arquivo para um arquivo de dados persistentes. Em seguida, chame a função write
para gravar os dados no arquivo de dados persistentes. Se a quantidade de dados que você tentar gravar ultrapassar sua alocação de armazenamento mutável, a função de gravação poderá ter êxito; no entanto, os únicos dados gravados serão a parte que não ultrapassa a alocação de armazenamento. Para garantir a gravação de todos os dados, verifique o valor de retorno da chamada de função write
.
Ler dados persistentes
Para ler dados do armazenamento persistente, chame Storage_OpenMutableFile para recuperar um descritor de arquivo para o arquivo de dados persistentes e, em seguida, chame a função read
para ler os dados.
Excluir dados persistentes
Para excluir dados do armazenamento persistente, chame Storage_DeleteMutableFile.