Azure Sphere でのストレージの使用
このトピックでは、Azure Sphere デバイスでストレージを使用する方法について説明します。 Azure Sphere には、読み取り専用フラッシュ ストレージと変更可能ストレージの 2 種類のストレージが用意されています。
読み取り専用ストレージは、アプリケーションを更新せずにコンテンツを変更できないように、アプリケーション イメージ パッケージをデバイスに格納するために使用されます。 これには、ユーザー インターフェイス資産、静的構成データ、外部 MKU の更新に使用されるファームウェア イメージを含むバイナリ リソース、変更可能なストレージの初期化データなどのデータを含めることができます。 アプリケーションで使用可能なメモリは、使用可能 なストレージの量に関する追加の詳細を提供します。
変更可能ストレージには、デバイスの再起動時に保持されるデータが格納されます。 たとえば、ローカル タイム ゾーンを使用して システム時刻を管理 する場合は、タイム ゾーン設定を変更可能なストレージに格納できます。 その他の例としては、ユーザーが変更できる設定や、構成データのダウンロードなどがあります。 変更可能ストレージのサンプルは、アプリケーションで変更可能ストレージを使用する方法を示しています。
メモ
フラッシュを繰り返し更新すると、最終的にフラッシュが摩耗し、無効になります。 そのため、フラッシュの不要な更新を避けるためにコードを設計する必要があります。 たとえば、再起動後に保存された状態を回復できるように、終了する前にアプリケーションの状態を保存する場合は、状態が変更された場合にのみ、アプリケーションの状態をフラッシュに保存することを検討してください。
読み取り専用ストレージの使用
これらの Applibs 関数を使用して、読み取り専用ストレージを管理できます。 これらの関数を使用する例については、「 curl を使用して Web サービスに接続する」を参照してください。
読み取り専用ストレージ要件
読み取り専用ストレージを使用するアプリケーションには、適切なヘッダー ファイルを含める必要があります。
プロジェクトにストレージヘッダーとリストされていないヘッダーを含めます。
#include <unistd.h>
#include <applibs/storage.h>
イメージ パッケージにファイルを追加する
Azure Sphere デバイス上の読み取り専用ストレージにファイルを追加するには、それをリソースとしてプロジェクトに追加し、アプリケーションのイメージ パッケージに含めることができます。
azsphere_target_add_image_packageを使用して、イメージ パッケージ ファイルと、ビルド時に含めるリソース ファイルを指定します。 例えば:
azsphere_target_add_image_package(${PROJECT_NAME} RESOURCE_FILES "file1.dat" "file2.dat")
ファイル "file1.dat" と "file2.dat" がイメージ パッケージに表示されるようになります。 これらの関数の詳細については、「 CMake 関数を使用 する」を参照してください。
メモ
絶対パスは、RESOURCE_FILESではサポートされていません。
変更可能ストレージの使用
アプリケーションの変更可能ストレージを構成すると、アプリケーションのコンポーネント ID に割り当てられ、別のコンポーネント ID を持つアプリケーションからアクセスすることはできません。 アプリケーションのコンポーネント ID が変更された場合、新しいアプリケーションは、前のアプリケーションの変更可能なストレージにアクセスできません。
デバイスからアプリケーションを削除すると、アプリケーションに割り当てられた変更可能なストレージも削除されます。 同じアプリケーションがデバイスに再度読み込まれると、変更可能なストレージは空になります。 ただし、削除せずにアプリケーションを更新すると、変更可能なストレージの内容が維持されます。
az sphere device app show-quota コマンドは、現在使用されている変更可能なストレージの量を表示します。
Azure Sphere OS には、重要な構成状態とファイル システム メタデータの破損を回避するための電源損失保護メカニズムが用意されています。 変更可能なストレージ API には、これらの機能の利点があります。 ただし、変更可能ストレージの実際の内容は、バッファーがフラッシュされるかどうかと順序によって異なるため、電源喪失時に保留中のすべての変更が回復後にファイル自体に反映される保証はありません。
次の Applibs 関数を使用して、変更可能なストレージ データを管理できます。
変更可能なストレージ要件
変更可能ストレージを使用するアプリケーションには、適切なヘッダー ファイルを含め、変更可能なストレージ設定を アプリケーション マニフェストに追加する必要があります。
変更可能ストレージのヘッダー ファイル
プロジェクトにストレージヘッダーとリストされていないヘッダーを含めます。
#include <unistd.h>
#include <applibs/storage.h>
アプリケーション マニフェスト
このトピックの API を使用するには、アプリケーション マニフェストに機能をMutableStorage
追加し、フィールドを設定するSizeKB
必要があります。 SizeKB フィールドは、変更可能なストレージのサイズを kibibytes で指定する整数です。 最大値は 64 で、ストレージはデバイスの消去ブロック サイズに従って割り当てられます。 値がデバイスのブロック サイズの全体の倍数ではない場合は、SizeKB 値を次のブロック サイズに切り上げて割り当てが行われます。
メモ
MT3620 の消去ブロック サイズは 8 KB であるため、8 の倍数ではない値はすべて切り上げられます。 たとえば、"MutableStorage" 機能で 12 KB を指定した場合、MT3620 では 16 KB を受け取ります。
次の例では、MutableStorage ストレージ機能が 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
}
}
永続データの書き込み
永続ストレージにデータを書き込むには、まず Applibs 関数 Storage_OpenMutableFile を呼び出して、永続データ ファイルのファイル記述子を取得します。 次に 関数を write
呼び出して、永続的なデータ ファイルにデータを書き込みます。 書き込もうとするデータの量が変更可能なストレージ割り当てを超えた場合、書き込み関数は成功する可能性があります。ただし、書き込まれるデータは、ストレージ割り当てを超えない部分だけです。 すべてのデータが確実に書き込まれるようにするには、関数呼び出しの戻り値をチェックするwrite
必要があります。
永続データの読み取り
永続 ストレージ呼び 出しStorage_OpenMutableFileからデータを読み取って永続データ ファイルのファイル記述子を取得し、関数を read
呼び出してデータを読み取ります。
永続データを削除する
永続ストレージ呼び出し Storage_DeleteMutableFileからデータを削除するには。