今天我們來揭開Air780E 軟件中 C 語言內存數組的神秘面紗,希望有所收獲。
1、ZBUFF(C內存數組)簡介
zbuff庫可以用c風格直接操作(下標從0開始),例如buff[0]=buff[3]
可以在sram上或者psram上申請空間,也可以自動申請(如存在psram則在psram進行申請,如不存在或失敗則在sram進行申請)。
操作里面的元素時,可以根據光標進行增刪改查。偏移方式有三種:從頭、當前位置、末尾開始。常用參數如下:
常量 | 類型 | 解釋 |
---|---|---|
zbuff.SEEK_SET | number | 以頭為基點 |
zbuff.SEEK_CUR | number | 以當前位置為基點 |
zbuff.SEEK_END | number | 以末尾為基點 |
zbuff.HEAP_AUTO | number |
自動申請 (如存在psram,則在psram進行申請, 如不存在或失敗則在sram進行申請) |
zbuff.HEAP_SRAM | number | 在sram申請 |
zbuff.HEAP_PSRAM | number | 在psram申請 |
2、演示功能概述
本demo將演示ZBUFF的創建、寫入數據、讀取數據、獲取zbuff長度、獲取光標位置。
3、準備硬件環境
此核心板的詳細使用說明參考:
https://docs.openluat.com/air780e/product/
Air780E產品手冊中的<<開發板Core_Air780E使用說明V1.0.5.pdf>>,X.X.X指版本號;核心板使用過程中遇到任何問題,可以直接參考這份使用說明pdf文檔。
3.2 SIM卡
請準備一張可正常上網的SIM卡,該卡可以是物聯網卡或您的個人手機卡。
特別提醒:請確保SIM卡未欠費且網絡功能正常,以便順利進行后續操作。
3.3 數據通信線
typec接口USB數據線即可。
3.4 PC電腦
WINDOWS系統。
4、準備軟件環境
4.1 基本的下載調試工具
使用說明參考:Luatools下載和詳細使用;
5、ZBUFF操作軟硬件資料
5.1 文檔和工具:
780E模塊使用固件:SDK&Demo-合宙文檔中心,本demo使用的固件版本是:
LuatOS-SoC_V1112_EC618_FULL.soc
本教程使用的demo:
https://gitee.com/openLuat/LuatOS-Air780E/tree/master/demo/zbuff
將固件和腳本燒錄到模塊中:Luatools下載和使用教程-合宙模組資料中心
源碼和固件已打包,如下所示:點我,下載完整壓縮文件包
zbuff-全部api地址,如果只看本demo的api直接看下面的5.2demo使用api介紹即可。
5.2 demo使用api介紹
zbuff.create(length,data,type)
作用:創建zbuff。
參數
參數 | 傳入值類型 | 解釋 |
---|---|---|
length | int | 字節數 |
data | any | 可選參數,number時為填充數據,string時為填充字符串 |
type | number | 可選參數,內存類型。可選值:zbuff.HEAP_SRAM(內部sram,默認),zbuff.HEAP_PSRAM(外部psram),zbuff.HEAP_AUTO(自動申請內存) |
返回值
返回值類型 | 解釋 |
---|---|
object | zbuff對象,創建失敗返回nil |
buff:write(para,…)
作用:zbuff寫數據(從當前指針位置開始;執行后指針會向后移動)。
參數
參數 | 傳入值類型 | 解釋 |
---|---|---|
para | any | 寫入buff的數據。string時為一個參數,number時可為多個參數 |
返回值
返回值類型 | 解釋 |
---|---|
number | 數據成功寫入的長度 |
buff:read(length)
作用:zbuff讀數據(從當前指針位置開始;執行后指針會向后移動)
參數
參數 | 傳入值類型 | 解釋 |
---|---|---|
length | int | 讀取buff中的字節數 |
返回值
返回值類型 | 解釋 |
---|---|
string | 讀取結果 |
buff:clear(num)
作用:zbuff清空數據(與當前指針位置無關;執行后指針位置不變)
參數
參數 | 傳入值類型 | 解釋 |
---|---|---|
num | int | 可選,默認為0。要設置的值,不會改變指針位置 |
返回值
無
buff:seek(base,offset)
作用:zbuff設置光標位置(可能與當前指針位置有關;執行后指針會被設置到指定位置)
參數
參數 | 傳入值類型 | 解釋 |
---|---|---|
offset | int | 偏移長度 |
base | int | 基點,默認zbuff.SEEK_SET。可選值:zbuff.SEEK_SET(文件開頭),zbuff.SEEK_CUR(當前位置),zbuff.SEEK_END(文件尾) |
返回值
返回值類型 | 解釋 |
---|---|
int | 設置光標后從buff開頭計算起的位置 |
buff:pack(format,val1,val2,…)
作用:將一系列數據按照格式字符轉化,并寫入(從當前指針位置開始;執行后指針會向后移動)
參數
參數 | 傳入值類型 | 解釋 |
---|---|---|
format | string | 后面數據的格式(符號含義見示例) |
val | val | 傳入的數據,可以為多個數據 |
返回值
返回值類型 | 解釋 |
---|---|
int | 成功寫入的數據長度 |
例子:
buff:unpack(format)
作用:將一系列數據按照格式字符讀取出來(從當前指針位置開始;執行后指針會向后移動)
參數
參數 | 傳入值類型 | 解釋 |
---|---|---|
format | string | 數據的格式(符號含義見pack示例) |
返回值
返回值類型 | 解釋 |
---|---|
int | 成功讀取的數據字節長度 |
any | 按格式讀取的數據 |
buff:read類型()
作用:讀取一個指定類型的數據(從當前指針位置開始;執行后指針會向后移動)
參數
類型可為:(前綴I指有符號位,U指無符號位,后面的數字指有幾位)I8、U8、I16、U16、I32、U32、I64、U64。
(浮點數)F32、F64
返回值
返回值類型 | 解釋 |
---|---|
number | 讀取的數據,越界則為nil |
例如:
buff:write類型(data)
作用:寫入一個指定類型的數據(從當前指針位置開始;執行后指針會向后移動)
參數
參數 | 傳入值類型 | 解釋 |
---|---|---|
data | number | 待寫入的數據 |
寫入類型,可為:(前綴I指有符號位,U指無符號位,后面的數字指有幾位)I8、U8、I16、U16、I32、U32、I64、U64。
(浮點數)F32、F64
返回值
返回值類型 | 解釋 |
---|---|
number | 成功寫入的長度 |
例如:
locallen=buff:writeI8(10)locallen=buff:writeU32(1024)
buff:len()
作用:獲取zbuff對象的長度(與當前指針位置無關;執行后指針位置不變)
參數
無
返回值
返回值類型 | 解釋 |
---|---|
int | zbuff對象的長度 |
buff:used()
作用:獲取zbuff中最后一個數據位置指針到首地址的偏移量,表示zbuff內已有有效數據量大小。注意,此值不同于分配的空間大小,seek()會改變最后一個數據位置指針,也會影響used()的返回值。
參數
無
返回值
返回值類型 | 解釋 |
---|---|
int | 有效數據量大小 |
6代碼示例介紹
6.1 zbuff操作示例
6.1.1 創建zbuff,以c語言數組的形式操作zbuff
6.1.2 以io的形式操作
6.1.3 清除zbuff
6.1.4 以pack庫的形式寫入或讀取數據
6.1.5 按類型讀寫數據
讀取類型可為:I8、U8、I16、U16、I32、U32、I64、U64、F32、F64
讀取的時候,記得注意下標位置。
6.1.6 取出指定區間的數據
6.1.7 獲取創建的zbuff的長度,和指針當前位置
6.1.8 測試F32(32位單精度浮點數)類型數據的讀寫
7、功能驗證
測試zbuff的使用
8、總結
本示例介紹了zbuff的作用和用法。
9常見問題
9.1 先buff:write(0x12),再設置光標到正確位置后,使用buff:read(1)讀取不到數據。
直接讀取是不可見字符,要使用buff:read(1):toHex()讀取數據。
-
內存
+關注
關注
8文章
3004瀏覽量
73900 -
C語言
+關注
關注
180文章
7601瀏覽量
136251 -
數組
+關注
關注
1文章
416瀏覽量
25912
發布評論請先 登錄
相關推薦
評論