1.makefile:定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等).创建程序(make程序)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出,最后输出并生成的通常是可执行文件.创建程序利用内置的推理规则来激活编译器,以便通过对特定CPP文件的编译来产生特定的OBJ文件。

2.cmake:是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。

3. 音频管道负责控制音频数据流并将音频元素与环形缓冲区连接。它将按顺序连接并启动音频元素,负责从上一个元素中检索数据,并将其传递到其后的元素。还从每个元素获取事件,处理事件或将其传递到更高层。

4.音频元素:每个元素实际上是一个Task。初始化配置参数中都有对任务栈大小、任务优先级、任务运行的core、以及输出ringbuffer和元素使用的buffer的大小。这些任务将会执行回调(打开、读取、处理、写入、关闭)。

5.音频事件:通过Event来建立管道Pipeline中各音频元素Elements之间的通信。这是围绕FreeRtos的队列来建立的。Event通过listeners来监视传入的msg并通过回调函数来通知。

6.常用命令:

idf.py set-target esp32                   设置目标芯片
idf.py menuconfig                          工程配置
idf.py build                                     编译工程
idf.py -p COM7 [-b BAUD] flash    烧录工程
idf.py -p COM7 monitor                 监视运行情况
idf.py -p PORT flash monitor         一次性的构建、烧录、监视

7.extern const uint8_t adf_music_mp3_start[] asm("_binary_adf_music_mp3_start"); //asm是嵌入汇编语法
esp_log_level_set("*", ESP_LOG_WARN); //重置所有日志记录等级
esp_log_level_set(TAG, ESP_LOG_INFO); //设置tag标识日志的记录等级
algorithm stream是回声处理,唤醒词处理加入到里面数据流,tone stream则是另外一种flash操作方法。

8.消息事件是通过消息队列实现的,使用audio_event_iface_init(&evt_cfg);完成创建队列,然后通过audio_pipeline_set_listener(pipeline, evt); 将队列指针与pipeline中的队列指针关联,以达到通过获取这个消息队列内容就可以获取整个pipeline的目的。在实际使用过程中,在主循环中循环调用 audio_event_iface_listen获取当前pipeline的消息。

9.ringbuffer是一种环形缓冲区,这种缓冲区不仅用作数据缓冲同样也用于连接 audio element ,没element 向ringbuffer请求数据时都会导致ringbuffer任务阻塞,直到ringbufer中的数据可以使用这个任务才可以继续执行。

10.I2S Stream:audio streams 的作用就是负责获取音频数据并在处理后将数据发送出去的音频元素(audio element)称为音频流。

11.http stream一般作为整个管道的最后一个元素或第一个元素,用于读取http 音频流或者是将音频流发送到http 服务器中。

12.audio_element对象是使用ADF开发的应用程序的基本构建块。实际上,每个解码器,编码器,滤波器,输入流或输出流都是音频元素。Element的一般功能是在输入中获取一些数据,对其进行处理,然后输出到下一个。每个元素都作为单独的任务运行。为了能够控制从输入,处理到输出的数据生命周期的特定阶段,audio_element对象提供了在每个阶段触发回调. 可用的回调函数有七种类型:打开,查找,处理,关闭,销毁,读取和写入。

13.pipeline中由一个一个element组成,每个element之间由ringbuf连接在一起。音频管道还负责将消息从元素任务转发到应用程序,每一个元素都是一个基于freeRTOS的任务,它们直接想要完成通信就必须通过管道中的消息队列。

14.pipeline 中的成员rb_list 是一个ringbuf链表,用于关联管道中的ringbuf和el_list 的一样,也是通过STAILQ_HEAD对其进行定义,定义一个链表头和链表尾。

15.audio_event_iface_handle_t listener; 这是一个事件监听接口。管道的所有事件都一个通过这个接口向外界发送,audio_event_iface_handle_t 也是esp-adf中一个比较重要的结构体。

16.

GPIO_INTR_DISABLE //禁用GPIO中断
GPIO_INTR_POSEDGE //GPIO中断类型:上升沿
GPIO_INTR_NEGEDGE //下降沿
GPIO_INTR_ANYEDGE //上升沿和下降沿
GPIO_INTR_LOW_LEVEL //输入低电平触发
GPIO_INTR_HIGH_LEVEL //输入高电平触发

ESP-ADF相关学习笔记的更多相关文章

  1. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  2. ReentrantLock 相关学习笔记

    ReentrantLock 相关学习笔记 标签(空格分隔): Java多线程 Java接口Lock有三个实现类:ReentrantLock.ReentrantReadWriteLock.ReadLoc ...

  3. Linux相关学习笔记-文件系统

    在Linux的文件系统中, 相应的文件都按其作用分门别类地放在相关的目录中 以下是最近整理学习的一些, linux中的文件存放 /bin 二进制可执行命令 /dev 设备特殊文件  // 外部设备文件 ...

  4. zepto源码--核心方法(类数组相关)--学习笔记

    从这篇起,在没有介绍到各类插件之前,后面将陆续介绍zepto对外暴露的核心方法.即$.fn={}里面的所有方法的介绍.会配合zepto的API进行介绍. 其实前面已经介绍了几个,如width,heig ...

  5. NLP入门相关——学习笔记

    近义词.一词多义 GPT.ELMO.Bert

  6. python Django 相关学习笔记

    Django框架 pip3 install django 命令: # 创建Django程序 django-admin startproject mysite # 进入程序目录 cd mysite # ...

  7. Python3 协程相关 - 学习笔记

    什么是协程 协程的优势 Python3中的协程 生成器 yield/send yield + send(利用生成器实现协程) 协程的四个状态 协程终止 @asyncio.coroutine和yield ...

  8. Redis学习笔记~目录

    回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...

  9. 我的学习笔记之node----node.js+socket.io实时聊天(1) (谨此纪念博客开篇)

    本想着从hello word开篇,也确实写了相关学习笔记.各种原因吧,现在又着急写出作品,便作罢. 这里将记录一个node.js+socket.io的实时聊天程序.(当然我也是跟着网上各种教程资料学习 ...

随机推荐

  1. 文字闪烁效果 CSS + HTML

    文字闪烁效果 CSS 写在前面 好好学习,天天向上! 效果图 绝美的效果 实现过程 先给没字体添加一些普通的样式,颜色设置为透明 给文字设置一个动画效果,通过text-shadow属性来实现变亮的效果 ...

  2. Gorm入门使用

    Gorm GORM CRUD 数据库的增删改查 go get -u github.com/jinzhu/gorm go get -u github.com/jinzhu/gorm/dialects/m ...

  3. 我的Java资料小栈-START

    我的Java资料小栈 前言 在学习Java的这一路中,其实说句实话,自己还是看了很多培训结构出的Java资料,有时候个人觉得培训结构有的东西还是讲的比较通俗易懂的,又想着有些最新的或者个人有时候需要及 ...

  4. Jmeter(四十九) - 从入门到精通高级篇 - jmeter使用监视器结果监控tomcat性能(详解教程)

    1.简介 上一篇宏哥讲解了利用jmeter的插件来监控服务器资源,这一篇讲解分享如何使用jmeter的监视器结果监控tomcat性能. 2.准备工作 文章标题中提到jmeter和tomcat,那么只需 ...

  5. RMAN-06172: no AUTOBACKUP found or specified handle is not a valid copy or piece

    问题描述:将备份集从一台主机拷贝到另外一台主机后,在通过RMAN将数据库恢复到同类机异机的时候,restore spfile一直报RMAN-06172: no AUTOBACKUP found or ...

  6. MindSpore:自动微分

    MindSpore:自动微分 作为一款「全场景 AI 框架」,MindSpore 是人工智能解决方案的重要组成部分,与 TensorFlow.PyTorch.PaddlePaddle 等流行深度学习框 ...

  7. 【ElasticSearch】给ElasticSearch数据库配置慢查询日志

    给ElasticSearch引擎配置慢查询日志,可以实时监控搜索过慢的日志.虽然ElasticSearch以快速搜索而出名,但随着数据量的进一步增大或是服务器的一些性能问题,会有可能出现慢查询的情况. ...

  8. Java代码优化:使用构造函数和使用一个个setter的效率差别

    在对Java代码进行优化的时候,想方设法的要提高整体的效率,使用JProfiler看代码的时间占比,然后,看看哪些部分是可以优化的,减少运行时间的.下面有这么几个方向. 1. 能使用构造函数一步到位的 ...

  9. NOIP模拟测试10「大佬·辣鸡·模板」

    大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...

  10. Unreal如何进行材质优化?

    Hello,大家好,今天给大家带来实用的材质优化,我是木偶心没.优化在每个游戏项目里面都会涉及到,是一种为了达成相同目标,寻求并采用消耗更少资源的办法.一般会在CPU,GPU,网络和内存方便进行优化. ...