在 Azure Sphere 上使用記憶體
重要
這是 Azure Sphere (舊版) 檔。 Azure Sphere(舊版)將於 2027 年 9 月 27 日淘汰,且使用者此時必須移轉至 Azure Sphere(整合式)。 使用位於 TOC 上方的版本選取器來檢視 Azure Sphere (整合式) 檔。
本主題描述如何在 Azure Sphere 裝置上使用記憶體。 Azure Sphere 提供兩種類型的記憶體、只讀快閃記憶體和可變記憶體。
唯讀記憶體可用來將應用程式映像套件儲存在裝置上,因此在更新應用程式的情況下無法修改內容。 這可包含任何數據,例如使用者介面資產、靜態組態數據、二進位資源,包括用來更新外部 MCU 的韌體映像,或可變動記憶體的初始化數據。 應用程式 可用的記憶體提供有關可用記憶體數量的其他詳細數據。
可變動的記憶體會儲存在裝置重新啟動時保存的數據。 例如,如果您想要 使用本機時區來管理系統時間 ,您可以將時區設定儲存在可變記憶體中。 其他一些範例是使用者可以修改或下載組態數據的設定。 可變記憶體範例示範如何在應用程式中使用可變動的記憶體。
注意
重複更新閃光最終會磨損它,並使它無效。 因此,您應該設計程序代碼,以避免不必要的快閃更新。 例如,如果您想要在結束之前儲存應用程式狀態,以便在重新啟動后復原已儲存的狀態,請考慮只在狀態變更時,才將應用程式的狀態儲存至快閃。
使用唯讀記憶體
您可以使用這些 Applibs 函式來管理唯讀記憶體。 如需使用這些函式的範例,請參閱 使用 curl 連線到 Web 服務。
唯讀記憶體需求
使用唯讀記憶體的應用程式必須包含適當的頭檔。
在您的項目中包含記憶體與未刪除標頭:
#include <unistd.h>
#include <applibs/storage.h>
將檔案新增至映像套件
若要將檔案新增至 Azure Sphere 裝置上的唯讀記憶體,您可以將它新增至專案作為資源,並將其包含在應用程式的映像套件中。 在 CMakeLists.txt中使用下列函式,將檔案新增為資源:
使用 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不支持絕對路徑。
使用可變記憶體
當您為應用程式設定可變記憶體時,它會指派給應用程式的元件標識碼,且無法由具有不同元件標識碼的應用程式存取。 如果應用程式的元件標識碼變更,新應用程式將無法存取先前應用程式的可變動記憶體。
如果您從裝置刪除應用程式,也會刪除指派給應用程式的可變記憶體。 如果相同的應用程式接著載入到裝置上,可變動的記憶體將會是空的。 不過,如果您更新應用程式而不加以刪除,則會維護可變動的記憶體內容。
azsphere 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。