0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

解读版|Air780E软件中C语言内存数组的神秘面纱!

合宙LuatOS 来源:合宙LuatOS 作者:合宙LuatOS 2024-11-17 10:00 次阅读

今天我们来揭开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、准备硬件环境

3.1 780E开发板一套,包括天线USB数据线

此核心板的详细使用说明参考:
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 成功写入的数据长度

例子:

wKgaomcu7PmAT1HEAALYrHEazoY358.png

buff:unpack(format)

作用:将一系列数据按照格式字符读取出来(从当前指针位置开始;执行后指针会向后移动)

参数

参数 传入值类型 解释
format string 数据的格式(符号含义见pack示例)

返回值

返回值类型 解释
int 成功读取的数据字节长度
any 按格式读取的数据

buff:read类型()

作用:读取一个指定类型的数据(从当前指针位置开始;执行后指针会向后移动)

参数

类型可为:(前缀I指有符号位,U指无符号位,后面的数字指有几位)I8、U8、I16、U16、I32、U32、I64、U64。

(浮点数)F32、F64

返回值

返回值类型 解释
number 读取的数据,越界则为nil

例如:

wKgaomcu7QyAfczlAADFvyPfCJ4307.png

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

wKgZomcu7R2AHfG0AAFqbJ11NKI303.png

6.1.2 以io的形式操作

wKgaomcu7SuATA6rAAPRsepS4p8108.png

6.1.3 清除zbuff

wKgZoWcu7VGASH34AAEZG3Zao-M139.png

6.1.4 以pack库的形式写入或读取数据

wKgaoWcu7V-ADbajAAGvIsV2eqU136.png

6.1.5 按类型读写数据

读取类型可为:I8、U8、I16、U16、I32、U32、I64、U64、F32、F64

读取的时候,记得注意下标位置。

6.1.6 取出指定区间的数据

wKgaoWcu7XKAWy3PAADY2UyZj3M085.png

6.1.7 获取创建的zbuff的长度,和指针当前位置

wKgaoWcu7Y6AcL15AAFPW2ufNIg934.png

6.1.8 测试F32(32位单精度浮点数)类型数据的读写

wKgZomcu7hCAaHRJAAIs269Geik520.png

7、功能验证

测试zbuff的使用

wKgaomcu7ieAIsO-AAhIJaLYts0563.png

8、总结

本示例介绍了zbuff的作用和用法。

9常见问题

9.1 先buff:write(0x12),再设置光标到正确位置后,使用buff:read(1)读取不到数据。

直接读取是不可见字符,要使用buff:read(1):toHex()读取数据。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2991

    浏览量

    73840
  • C语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136023
  • 数组
    +关注

    关注

    1

    文章

    413

    浏览量

    25893
收藏 人收藏

    评论

    相关推荐

    【合宙Air780E开发板趣味应用】Air780E开发板方言打麻将

    Air780E音频扩展板以及喇叭 ,可轻松实现趣味TTS+AMR+MP3语音播放功能。更更更让开发者心颤的是,合宙还搞了个音频扩展板使用创意视频大赛,想要进一步从开发者脑细胞榨汁:然而这还不够,这真的不够,合宙
    发表于 01-04 13:45

    基于Air780E的远程报警器方案

    恒博A780E-S智能远程报警器方案板,基于合宙低功耗4G Cat.1模组Air780E设计,支持LuatOS二次开发,无需额外添加单片机;可以帮助行业客户快速搭建远程报警产品及其配套系统,并提供客户端软件服务。
    发表于 03-01 11:51 1842次阅读

    Air780E硬件设计手册

    电子发烧友网站提供《Air780E硬件设计手册.pdf》资料免费下载
    发表于 04-14 09:57 20次下载

    Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析简介本文档适用于合宙Air780E
    的头像 发表于 07-19 15:37 551次阅读
    <b class='flag-5'>Air780E</b>/<b class='flag-5'>Air780</b>EP/<b class='flag-5'>Air780</b>EQ/<b class='flag-5'>Air</b>201模块遇到死机问题如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到内存死机如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到内存死机如何分析简介本文档适用于合宙
    的头像 发表于 07-19 16:07 460次阅读
    <b class='flag-5'>Air780E</b>/<b class='flag-5'>Air780</b>EP/<b class='flag-5'>Air780</b>EQ/<b class='flag-5'>Air</b>201模块遇到<b class='flag-5'>内存</b>死机如何分析

    合宙 Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析简介本文档适用于合宙Air780E
    的头像 发表于 08-01 17:27 679次阅读
    合宙 <b class='flag-5'>Air780E</b>/<b class='flag-5'>Air780</b>EP/<b class='flag-5'>Air780</b>EQ/<b class='flag-5'>Air</b>201模块遇到死机问题如何分析

    合宙Air780E硬件设计手册02

    合宙低功耗4G模组Air780E硬件设计介绍
    的头像 发表于 09-06 12:02 370次阅读
    合宙<b class='flag-5'>Air780E</b>硬件设计手册02

    如何使用Air780E开发板?看这篇就够了!

    Air780E 模块进行性能评估,功能调试,软件开发等用途 二、开发板配置 IO 口默认电平 3.3V (1.8V 可调) 支持 USB 5V 直接供电 自弹式 Micro SIM 卡座 一代 IPEX 天线
    的头像 发表于 10-23 17:07 261次阅读
    如何使用<b class='flag-5'>Air780E</b>开发板?看这篇就够了!

    从箱子里找出来的示例:Air780E软件指南之TCP应用

    今天翻箱倒柜,把尘封已久的关于Air780E软件指南之TCP应用教程翻出来给大家展示展示:让我从概述、环境准备、问题等方面来给大家说清楚。
    的头像 发表于 11-02 11:58 326次阅读
    从箱子里找出来的示例:<b class='flag-5'>Air780E</b><b class='flag-5'>软件</b>指南之TCP应用

    Air780E如何发送SMS?一文详解!

    ​今天一起来学习使用合宙低功耗4G模组Air780E发送SMS短消息: 一、SMS简介 SMS(短消息服务,ShortMessageService)功能主要用于在蜂窝网络传输短消息。 在4G网络
    的头像 发表于 11-03 08:22 184次阅读
    <b class='flag-5'>Air780E</b>如何发送SMS?一文详解!

    奇妙的Air780E之UDP应用示例大赏!

    关于UDP是一种无连接的、不可靠的传输层协议,主要用于实现网络的快速通讯,我们今天将把Air780E的UDP应用分析透彻。
    的头像 发表于 11-04 09:25 191次阅读
    奇妙的<b class='flag-5'>Air780E</b>之UDP应用示例大赏!

    UDP应用详解:Air780E软件的全面手册

    了解Air780E软件UDP应用全面手册,永享编程幸福人生。
    的头像 发表于 11-05 12:31 108次阅读
    UDP应用详解:<b class='flag-5'>Air780E</b><b class='flag-5'>软件</b>的全面手册

    Air780E模组AT指令下的MQTT应用:技术指南

    今天我要讲的是Air780E模组AT指令下的MQTT应用,希望对大家有所帮助。
    的头像 发表于 11-07 14:02 174次阅读
    <b class='flag-5'>Air780E</b>模组AT指令下的MQTT应用:技术指南

    Air780E软件zlib解压示例的详细展示!

    今天我带入的是Air780E 软件 zlib 解压示例,希望大家有所收获。
    的头像 发表于 11-17 10:01 47次阅读
    <b class='flag-5'>Air780E</b><b class='flag-5'>软件</b><b class='flag-5'>中</b>zlib解压示例的详细展示!

    Air780E模组的ADC之旅 LuatOS开发实例

    今天学习一个新的示例,关于Air780E模组LuatOS开发的ADC应用实例,希望大家有所收获。
    的头像 发表于 11-11 09:33 98次阅读
    <b class='flag-5'>Air780E</b>模组的ADC之旅  LuatOS开发实例