Partilhar via


Usando o armazenamento no Azure Sphere

Importante

Esta é a documentação do Azure Sphere (Legado). O Azure Sphere (Legado) 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 Azure Sphere. O Azure Sphere fornece dois tipos de armazenamento, armazenamento flash somente leitura e armazenamento mutável.

O armazenamento somente leitura é usado para armazenar pacotes de imagens de aplicativos em um dispositivo para que o conteúdo não possa ser modificado sem atualizar o aplicativo. Isso pode incluir quaisquer dados, como ativos da interface do usuário, dados de configuração estática, recursos binários, incluindo imagens de firmware usadas para atualizar MCUs externas ou dados de inicialização para 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, poderá armazenar as configurações de fuso horário no armazenamento mutável. Alguns outros exemplos são 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.

Nota

A atualização repetida do flash acaba por desgastá-lo e torná-lo 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.

Usando armazenamento somente leitura

Você pode usar essas funções Applibs para gerenciar o armazenamento somente leitura. Para obter 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 armazenamento somente leitura devem 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 ficheiro a um pacote de imagens

Para adicionar um arquivo ao armazenamento somente leitura no dispositivo Azure Sphere, você pode adicioná-lo ao seu projeto como um recurso e incluí-lo no pacote de imagem do aplicativo. Use estas 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 imagem e quaisquer arquivos de recursos a serem incluídos durante a construção. Por exemplo:

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

Os arquivos "file1.dat" e "file2.dat" agora devem aparecer no pacote de imagem. Consulte Usar funções CMake para obter mais informações sobre essas funções.

Nota

Não há suporte para caminhos absolutos para RESOURCE_FILES.

Usando armazenamento mutável

Quando você configura o armazenamento mutável para seu aplicativo, ele é atribuído à ID do componente do aplicativo e não pode ser acessado por um aplicativo que tenha uma ID de componente diferente. Se o ID do componente do aplicativo for alterado, 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 de volta 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 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 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 estas funções Applibs para gerenciar dados de armazenamento mutáveis:

Requisitos de armazenamento mutável

Os aplicativos que usam armazenamento mutável devem incluir os arquivos de cabeçalho apropriados e adicionar configurações de armazenamento mutáveis 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 de aplicação

Para usar as APIs neste tópico, você deve adicionar o MutableStorage recurso ao manifesto do aplicativo e, em seguida, definir o SizeKB campo. O campo SizeKB é um número inteiro que especifica o tamanho do seu armazenamento mutável em kibibytes. O valor máximo é 64 e o armazenamento é alocado de acordo com o tamanho do bloco de apagamento do dispositivo. A alocação é feita arredondando o valor SizeKB para o próximo tamanho de bloco se o valor não for um múltiplo inteiro do tamanho do bloco do dispositivo.

Nota

O MT3620 tem um tamanho de bloco de apagamento de 8 KB, portanto, quaisquer valores que não sejam múltiplos de 8 serão arredondados para cima. Por exemplo, se você especificar 12 KB no recurso 'MutableStorage', receberá 16 KB em um MT3620.

No exemplo abaixo, o recurso de armazenamento MutableStorage é adicionado 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 recuperar um descritor de arquivo para um arquivo de dados persistente. Em seguida, chame a write função para gravar os dados no arquivo de dados persistente. Se a quantidade de dados que você tenta gravar exceder sua alocação de armazenamento mutável, a função de gravação poderá ser bem-sucedida; no entanto, os únicos dados gravados serão a parte que não exceder a alocação de armazenamento. Para garantir que todos os dados sejam gravados, você deve verificar o valor de retorno da chamada de write função.

Ler dados persistentes

Para ler dados de armazenamento persistente, chame Storage_OpenMutableFile para recuperar um descritor de arquivo para o arquivo de dados persistente e, em seguida, chame a read função para ler os dados.

Excluir dados persistentes

Para excluir dados do armazenamento persistente, chame Storage_DeleteMutableFile.