zoukankan      html  css  js  c++  java
  • ESP-ADF相关学习笔记

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

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

    3.在FreeRTOS中,使用的数据类型虽然都是标准C里面的数据类型,但是针对不同的处理器,对标准C的数据类型又进行了重新定义。

    4.链表由节点组成,节点与节点之间首尾相连,节点包含用于指向后一个节点的指针。节点都是自定义类型的数据结构,可以使单个数据、数组、指针数据和自定义的结构体数据类型。

    5.双向链表与单向量表的区别就是其节点中有两个指针,分别指向前后两个节点。

    6.临界段是在执行时不能被终端的代码段。在FreeRTOS中,临界段最常出现的地方就是对全局变量的操作。

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

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

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

    10.常用命令:

    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         一次性的构建、烧录、监视

    11.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操作方法。


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


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


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


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


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


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


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


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


    20.

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

    21.GPIO上拉和下拉:上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。下拉同理。也是将不确定的信号通过一个电阻钳位在低电平。不过从程序设计的角度讲,上拉就是如果没有输入信号则此时I/O状态为1,下拉相反。

  • 相关阅读:
    什么是先进先出淘汰算法,试举出一种实现方法?
    什么是置换算法,在页式系统中常用的置换算法是什么?
    什么是系统的抖动,它有什么危害?
    如果主存中的某页正在与外部设备交换信息,缺页中断时可以将这一页淘汰吗?为了实现正确的页面调度,应如何扩充页表的功能?
    什么是虚拟存储器,在页式系统中如何实现虚拟存储?
    分区分配方法的主要缺点是什么,如何克服这一缺点?
    什么是最坏适应算法?该算法的特点是什么?
    什么是最佳适应算法,该算法的特点是什么?
    JAVA8 之初识函数式编程与函数式接口(一)
    使用 Netty 实现一个 MVC 框架
  • 原文地址:https://www.cnblogs.com/kerwincui/p/13821023.html
Copyright © 2011-2022 走看看