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