一、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()读取数据。

Air780E软件指南:C语言内存数组(zbuff)的更多相关文章

  1. C语言局部数组大小与内存的栈的关系

    今天有个同学问了一个问题,我居然答不上来,为什么不能开局部整型二维数组[1000][1000]?但是在数组前面加上一个static就可以了? windows下栈的大小(不是数据结构里面的栈)是2MB, ...

  2. 【算法】C语言实现数组的动态分配

    C语言实现数组的动态分配 作者:白宁超 2016年10月27日20:13:13 摘要:数据结构和算法对于编程的意义不言而喻,具有指导意义的.无论从事算法优化方向研究,还是大数据处理,亦或者网站开发AP ...

  3. go语言 类型:数组

    在go语言中数组array是一组特定长度的有序的元素集合. go的数组类型由两部分组成——类型和长度,二者缺一不可.数组本来就是一块存储相同类型元素的连续内存空间,因此决定一个数组的类型,必然需要决定 ...

  4. C语言基础--数组及相关

    概念: 一堆相同类型的数据的有序集合 格式: 元素类型  数组名称[ 元素个数 ] 定义数组: // 定义了一个名称叫做scores的数组, 数组中可以存放3个int类型的数据 ]; // 只要定义一 ...

  5. C语言内存对齐详解

    一.字节对齐基本概念 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型 ...

  6. C语言柔性数组

    结构中最后一个元素允许是未知大小的数组,这个数组就是柔性数组.但结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组,sizeof返回的这种结构大小不包括柔性数组的内 ...

  7. C语言内存对齐详解(2)

    接上一篇:C语言内存对齐详解(1) VC对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式.VC 中提供了#pr ...

  8. C语言内存地址基础

    来源:http://blog.jobbole.com/44845/ 从计算机内存的角度思考C语言中的一切东东,是挺有帮助的.我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节.比方 ...

  9. c语言中数组相关问题

    c语言中数组相关问题: 1.数组基本定义: 相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组 ...

  10. 线性表之顺序存储结构(C语言动态数组实现)

    线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...

随机推荐

  1. 互联工厂数据交换标准:IPC-CFX

    大家好,我是Edison. 全球电子制造主要集中在中国,面向未来工业4.0.中国制造2025的战略转型升级,互联互通是基础.数据是核心,如何从用户角度来定义设备加工数据的内容完整性.有效性.可扩展性将 ...

  2. 关于SQLServer数据库的READ_COMMITTED_SNAPSHOT隔离级别

    默认情况下,SQL Server的事务隔离级别是READ COMMITED.刚开始我理解这个模式就是读已经提交的,那也就是说并发一个事务去更新,一个事务查询同一条数据应该是像Mysql.Oracle不 ...

  3. 【YashanDB知识库】EXP导致主机卡死问题

    问题现象 问题单:exp导出全库1主2备主节点执行,DMP文件30G左右系统卡死,发生主备切换 现象: exp sys/Cod-2022 file=bim20240402.dmp full=y 服务器 ...

  4. Cache policy

    Ref: Cache Replacement Policies https://linuxhint.com/configuring-zfs-cache/ https://blog.chaospixel ...

  5. Openstack-创建实例错误

    创建实例错误 实例执行所请求操作失败,实例处于错误状态.: 请稍后再试 [错误: Build of instance beaeb5e0-26eb-4044-ae14-bb87d509886d abor ...

  6. vue单元测试

    0.测试钩子函数 describe的钩子函数 在测试块describe中,存在这四个钩子函数,他会在describe执行的不同时期调用: before():在该区块的所有测试用例之前执行 after( ...

  7. 这款PDF解析工具,精准触达大模型问答应用的需要

    过去的一年,是大语言模型快速发展的一年.大模型强大的语言理解能力,逐渐让用户习惯了将各类文章丢给大模型,让它来帮忙总结提炼.从产品角度看,这是一次10倍体验的飞跃,意味着巨大的市场机会.也因此,市面上 ...

  8. 利用PaddleHub 进行人脸检测识别、并对图片进行抠图

    利用PaddleHub 进行人脸检测识别.并对图片进行抠图   本文是利用百度的飞桨平台的paddle进行人脸的检测和抠图,但是里面也有一些小问题,特记录一下笔记,以便以后观看学习. 环境:pytho ...

  9. 使用 fabric.js 开发移动端 H5 图片编辑器

    大家好,我是开源图片编辑器的 https://github.com/ikuaitu/vue-fabric-editor 的作者,它是一款基于 PC 版本的开源图片编辑器. 最近很多开发者咨询,是否可以 ...

  10. vscode单行注释失效解决办法

    第一种情况: bug:在使用快捷键注释的时候,只有style和script标签里的内容注释有问题,无法使用快捷键注释. 解决方法:禁用vscode的插件Jinja. 第二种情况 方法一 1.Ctrl+ ...