首页 > 系统相关 >Air780E软件指南:C语言内存数组(zbuff)

Air780E软件指南:C语言内存数组(zbuff)

时间:2024-11-09 09:20:23浏览次数:1  
标签:指针 C语言 参数 类型 返回值 Air780E zbuff buff

一、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申请

二、演示功能概述

本demo将演示ZBUFF的创建、写入数据、读取数据、获取zbuff长度、获取光标位置。

三、准备硬件环境

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.1 基本的下载调试工具

使用说明参考:Luatools下载和详细使用;

五、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.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位单精度浮点数)类型数据的读写

图片

七、功能验证

测试zbuff的使用

图片

八、总结

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

九、常见问题

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

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

标签:指针,C语言,参数,类型,返回值,Air780E,zbuff,buff
From: https://www.cnblogs.com/luatos/p/18536305

相关文章

  • Air780E软件指南:UDP应用示例
    一、UDP概述UDP(用户数据报协议,UserDatagramProtocol)是一种无连接的、不可靠的传输层协议,主要用于实现网络中的快速通讯。以下是UDP通讯的主要特点:1.1无连接通讯:UDP在发送数据之前不需要建立连接,这大大减少了通讯的延迟。发送方只需将数据包封装成UDP报文,并附上目的地址......
  • Air780E软件指南:zlib解压示例
    一、ZLIB解压工具简介Zlib解压工具是一个广泛使用的压缩和解压缩库,主要用于处理数据的压缩和解压缩任务。Zlib使用的是DEFLATE算法,这是一种通用的压缩算法。它被应用在很多场景中,比如压缩文件、网络传输中的数据压缩、以及各种应用程序中的数据存储和读取。Zlib的代码库相......
  • c语言中返回整数值的长度
     001、方法1while循环[root@PC1test]#lstest.c[root@PC1test]#cattest.c##测试c程序#include<stdio.h>intget_length(inta){intlength=0;while(a>0){length++;a/=10;......
  • c语言--数组
    目录1数组创建 1.1定义定长数组1.2定义并初始化数组1.3定义部分初始化的数组2.动态数组(动态分配)2.1使用malloc动态创建数组2.2使用calloc动态创建数组2.3动态数组初始化2.4释放动态数组内存3.变长数组(VLA,VariableLengthArray)4.字符串和字符数组4.1.......
  • c语言学习9选择结构
    结构化编程1选择结构九条语句顺序结构:选择结构: Ifelse switchcase循环结构:While for dowhile跳转结构:Break continue gotoreturn顺序结构:体现CPU执行程序运行规则(路径)①程序从上到下执行②程序逐条执行选择结构 ifelse和switchcase  第......
  • c语言学习10循环结构
    循环结构让程序多次执行,反复执行Whiledowhile for1While循环格式While(表达式){循环体;}当表达式为真时,while执行。另:非0即真死循环while(1)例:水仙花数在100-999中找到所有水仙花数,并打印;个位的三次方+十位的三次方+百位的三次方=本身1将数据遍历inta=10......
  • c语言第九章,结构体
    #define_CRT_SECURE_NO_WARNINGS自定义数据类型,结构体输出学生信息#include<stdio.h>structData{   intyear;   intmonth;   intday;};structStudent{//定义学生数据类型      intage;//年龄   charname[20];//名字   ch......
  • 用c语言来判断闰年
    #include<stdio.h>intYear(intn){  if((n%4==0&&n%100!=0)||(n%400==0)){    return1;  }else{    return0;  }} intmain(){  intyear,flag;  scanf("%d",&year);  flag=Year(y......
  • C语言双向链表
    一、优势 与单链表对比,双向链表的增、删、改无需遍历多次以查找目标节点前一节点与后一节点,效率提高,代码对比*单链表:1.插入:voidinsert(node*head,charName,intphonenumber,inttarget){ node*p=(node*)malloc(sizeof(node));//为新节点分配内存; p->next=sea......
  • C语言 循环高级
    时间:2024.11.6一、学习内容1、无限循环无限循环:循环永远停不下来注意点:无限循环因为永远停不下来,所以下面不能再写其他的代码了2、break跳转控制语句:在循环的过程中,跳到其他语句上执行 #include<stdio.h>intmain(){ intcount=0; inti;//利用for循环去......