Partilhar via


Utilizar o armazenamento no Azure Sphere

Este tópico descreve como utilizar o armazenamento num dispositivo do Azure Sphere. O Azure Sphere fornece dois tipos de armazenamento, armazenamento flash só de leitura e armazenamento mutável.

O armazenamento só de leitura é utilizado para armazenar pacotes de imagens de aplicação num dispositivo para que os conteúdos não possam ser modificados sem atualizar a aplicação. Isto pode incluir dados como recursos de interface de utilizador, dados de configuração estáticos, recursos binários, incluindo imagens de firmware utilizadas para atualizar MCUs externos ou dados de inicialização para armazenamento mutável. A memória disponível para aplicações fornece detalhes adicionais sobre a quantidade de armazenamento disponível.

O armazenamento mutável armazena dados que persistem quando um dispositivo é reiniciado. Por exemplo, se quiser gerir a hora do sistema com o fuso horário local, pode armazenar as definições de fuso horário no armazenamento mutável. Alguns outros exemplos são as definições que um utilizador pode modificar ou os dados de configuração transferidos. O exemplo de armazenamento mutável mostra como utilizar o armazenamento mutável numa aplicação.

Nota

Atualizar repetidamente o flash eventualmente desgasta-o e torna-o inválido. Por conseguinte, deve estruturar o código para evitar atualizações desnecessárias do flash. Por exemplo, se quiser guardar o estado da aplicação antes de sair para poder recuperar o estado guardado após um reinício, considere guardar o estado da aplicação no flash apenas se o estado tiver sido alterado.

Utilizar o armazenamento só de leitura

Pode utilizar estas funções do Applibs para gerir o armazenamento só de leitura. Para obter um exemplo que utiliza estas funções, veja Ligar a serviços Web com curl.

Requisitos de armazenamento só de leitura

As aplicações que utilizam o armazenamento só de leitura têm de incluir os ficheiros de cabeçalho adequados.

Inclua o armazenamento e os cabeçalhos não existentes no seu projeto:

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

Adicionar um ficheiro a um pacote de imagem

Para adicionar um ficheiro ao armazenamento só de leitura no dispositivo do Azure Sphere, pode adicioná-lo ao projeto como um recurso e incluí-lo no pacote de imagem da aplicação:

  • Utilize azsphere_target_add_image_package para especificar o ficheiro de pacote de imagem e quaisquer ficheiros de recursos a incluir ao criar. Por exemplo:

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

Os ficheiros "file1.dat" e "file2.dat" devem agora aparecer no pacote de imagem. Veja Utilizar funções CMake para obter mais informações sobre estas funções.

Nota

Os caminhos absolutos não são suportados para RESOURCE_FILES.

Utilizar armazenamento mutável

Quando configura o armazenamento mutável para a sua aplicação, este é atribuído ao ID do componente da aplicação e não pode ser acedido por uma aplicação que tenha um ID de componente diferente. Se o ID do componente da aplicação for alterado, a nova aplicação não terá acesso ao armazenamento mutável da aplicação anterior.

Se eliminar uma aplicação de um dispositivo, o armazenamento mutável atribuído à aplicação também será eliminado. Se a mesma aplicação for carregada novamente para o dispositivo, o armazenamento mutável estará vazio. No entanto, se atualizar a aplicação sem a eliminar, os conteúdos de armazenamento mutáveis serão mantidos.

O comando az sphere device app show-quota apresenta a quantidade de armazenamento mutável atualmente em utilização.

O SO do Azure Sphere tem mecanismos de proteção contra perda de energia implementados para evitar danos no estado de configuração crítico e nos metadados do sistema de ficheiros. A API de armazenamento mutável beneficia destas funcionalidades. No entanto, o conteúdo real do armazenamento mutável depende se, e por que ordem, as memórias intermédias são removidas da cache, pelo que não há garantia de que todas as alterações pendentes no momento da perda de energia sejam refletidas no próprio ficheiro após a recuperação.

Pode utilizar estas funções do Applibs para gerir dados de armazenamento mutáveis:

Requisitos de armazenamento mutável

As aplicações que utilizam armazenamento mutável têm de incluir os ficheiros de cabeçalho adequados e adicionar definições de armazenamento mutáveis ao manifesto da aplicação.

Ficheiros de cabeçalho para armazenamento mutável

Inclua o armazenamento e os cabeçalhos não existentes no seu projeto:

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

Manifesto da aplicação

Para utilizar as APIs neste tópico, tem de adicionar a MutableStorage capacidade ao manifesto da aplicação 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 borracha do dispositivo. A alocação é feita ao arredondar o valor SizeKB para o tamanho de bloco seguinte se o valor não for um múltiplo completo do tamanho do bloco do dispositivo.

Nota

O MT3620 tem um tamanho de bloco de borracha de 8 KB, pelo que quaisquer valores que não sejam múltiplos de 8 serão arredondados para cima. Por exemplo, se especificar 12 KB na capacidade "MutableStorage", receberá 16 KB num MT3620.

No exemplo abaixo, a capacidade de armazenamento MutableStorage é adicionada ao manifesto da aplicação 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
  }
}

Escrever dados persistentes

Para escrever dados no armazenamento persistente, comece por chamar a função Applibs Storage_OpenMutableFile para obter um descritor de ficheiros para um ficheiro de dados persistente. Em seguida, chame a write função para escrever os dados no ficheiro de dados persistente. Se a quantidade de dados que tenta escrever exceder a alocação de armazenamento mutável, a função de escrita poderá ser bem-sucedida; no entanto, os únicos dados escritos serão a parte que não excede a alocação de armazenamento. Para garantir que todos os dados são escritos, tem de verificar o valor devolvido da write chamada de função.

Ler dados persistentes

Para ler dados de chamadas de armazenamento persistentes Storage_OpenMutableFile obter um descritor de ficheiros para o ficheiro de dados persistente e, em seguida, chamar a read função para ler os dados.

Eliminar dados persistentes

Para eliminar dados de Storage_DeleteMutableFile de chamadas de armazenamento persistentes.