LV01-01-AliOSThings-11-任务与内存管理-02-内存管理使用方法

本文主要是任务与内存管理——内存管理使用方法的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows版本 windows11
Ubuntu版本 Ubuntu22.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
点击查看本文参考资料
分类 网址 说明
官方网站 阿里云 阿里云官网主页
阿里生活物联平台 生活物联网平台(飞燕平台)主页
AliGenie 天猫精灵开放平台AliGenie主页
阿里物联网平台 阿里物联网平台主页
Bluetooth 技术网站 蓝牙协议规范什么的可以来这里找
Telink Telink | Chips for a Smarter IoT (telink-semi.com)
Telink中文官网
开发手册 AliOS Things开发指南 AliOS Things开发指南,这里是最新版本,可以直接从官网找到
AliOS Things开发指南 AliOS Things应用开发指南,这里应该是3.3版本的完整开发文档
AliOS Things开发指南(3.0) AliOS Things应用开发指南,这里应该是3.0版本的完整开发文档
生活物联网平台开发文档 生活物联网平台(飞燕平台)开发文档
《设备端开发指南》
Wi-Fi IoT品类定义与功能开发 天猫精灵IoT开放平台——Wi-Fi IoT品类定义与功能开发
硬件平台 mk3080 WiFi开发板 WiFi开发板使用指南-阿里云开发者社区
esp8266开发板 一个教程:ESP8266-NodeMCU开发板详解-太极创客 (taichi-maker.com)
TLSR8258 Datasheet Datasheet for Telink BLE + IEEE802.15.4 MultiStandard Wireless SoC TLSR8258
参考资料 AliOS Things 3.0 应用开发指南 这个只是一篇参考文章,里面是一些环境搭建相关的,可以参考
IP知识百科 - 华为 (huawei.com) IP的一些相关知识点
点击查看相关文件下载
分类 网址 说明
蓝牙规范相关文档 Core Specification 5.2 核心规格 5.2,该规范定义了创建可互操作的Bluetooth 设备所需的技术。
《Core_v5.2.pdf》
Mesh Model(v1.1) 本Bluetooth 规范定义了模型(以及它们所需的状态和消息),这些模型用于在mesh 网络中的节点上执行基本功能,超出了Bluetooth Mesh 配置文件 规范中定义的基础模型。
本规范包括定义跨设备类型标准功能的通用模型,以及支持关键mesh 场景的模型,如照明控制、传感器、时间和场景。
《MshMDL_v1.1.pdf》
Mesh Profile(v1.0.1) 该Bluetooth 规范定义了基本要求,以实现可互操作的mesh 网络解决方案,用于Bluetooth 低能量无线技术。
《MshPRFv1.0.1.pdf》
Mesh Device Properties 本规范包含Bluetooth Mesh 配置文件 和Bluetooth Mesh 模型规范所要求的设备属性的定义。
但是跟之前的有些区别,我主要看的之前的版本:《MMeshDeviceProperties_v1.2.pdf》
GATT Specification Supplement GATT Specification Supplement | Bluetooth® Technology Website。
好像可以在线看:《GATT Specification Supplement》
Assigned Numbers GATT的一些类型定义可以在这里找。
AliOS Things alios-things/AliOS-Things Gitee上的AliOSThings SDK源码仓库
alibaba/AliOS-Things GitHub上的AliOSThings SDK源码仓库
天猫精灵蓝牙Mesh协议栈 alibaba-archive/genie-bt-mesh-stack GitHub上的天猫精灵蓝牙Mesh协议栈源码仓库。
之前是在alibaba/genie-bt-mesh-stack这个仓库。
写笔记的时候最新提交为faf523618a6a2560090fc423222b9db80984bb7a
蓝牙Mesh设备开发指南 阿里云生活服务平台开发手册——蓝牙设备开发一节中的内容

一、查看官方文档

其实在之前阿里是有文档的但是后边找不到了,这里是课程的笔记,写在这里吧。

1. 什么是内存管理

image-20200728162329917

2. 有哪些接口?

image-20200728162609866

3. 如何使用呢?

image-20200728162707784

我们主要关注这个SDK源码中的 include/aos/kernel.h 就可以了:

image-20200728162750839

二、分析内存管理 API

1. 操作系统抽象层OSAL

我们打开 AOS_SDK_PATH/include/aos/kernel.h文件,找到这个aos_malloc函数:

image-20200728163251523

2. aos_malloc的调用关系

我们打开 AOS_SDK_PATH/core/rhino/k_mm.c,就可以找到这个 k_mm_alloc函数:

image-20200728163637160

3. API分析说明

我们看API的时候,主要还是看头文件中的函数说明,例如:

image-20200728163801550

2.1 aos_malloc

image-20200728164119968

2.2 aos_zalloc

image-20200728164319213

2.3 aos_calloc

image-20200728164533483

2.4 aos_realloc

image-20200728164858423

之前我们可能通过malloc、zalloc或者calloc申请了30Byte的内存空间,然后我们现在要扩大这块内存的大小,怎么办?这个时候就可以使用这个relloc函数,我们将之前的内存空间首地址传给函数,并且传入一个新的size,函数会返回一个地址给用户,这个地址可能是之前的,也可能是一个新的地址。拿扩大来说,并不是在原内存块的地址空间基础上,继续往后按照我们的意愿去扩展。因为,我们并不能保证拟扩展的地址空间上,是否有其他程序已经先行占用了?如果拟扩展地址空间上没有占用,那么后续扩展的内容调整后的内存空间和原来的内存空间,保持同一内存始址。否则,程序会在内存的堆区重新找一块空闲的地址空间,并返回新的内存始址。所以,realloc返回的指针很可能指向一个新的地址。

2.5 aos_free

image-20200728165045945

三、根据官方demo总结开发流程

1. kernel_demo

image-20200728165215303

使用流程如下:

image-20200728165604700

四、打印组件ulog

上面的demo里面有个LOGE,这是啥?这其实就是个打印函数,就跟printf是一样的,只是做了一层封装。

image-20200728170030429

它定义在 AOS_SDK_PATH/include/dm/ulog/ulog.h中:

image-20231202141737976

有的时候我们使用的话可能会出现打印什么都没有的情况,这个时候就需要看一下自己配置的日志输出级别问题了:

image-20200728231320368

我们找到这个demo,会看到前面配置了一个什么log的等级,我们找一下这个日志等级的函数,在AOS_SDK_PATH/include/dm/ulog/ulog.h头文件中进行的声明,然后就会看到:

image-20231202150808689

这个参数中枚举类型是这样定义的:

image-20231202150735812