搜索
bottom↓
回复: 0

《DNESP32S3使用指南-IDF版_V1.6》第八章 MENUCONFIG菜单配置

[复制链接]

出0入234汤圆

发表于 昨天 15:56 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2024-7-15 15:56 编辑

2.jpg
1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729
1.png
3.png


第八章 MENUCONFIG菜单配置


       ESP-IDF menuconfig菜单配置在ESP32及其系列芯片的开发过程中起着至关重要的作用。它允许开发者通过友好的图形界面,对项目的各种配置选项进行细致入微的调整。这些配置选项涵盖了从硬件设置到软件功能的各个方面,确保了项目能够按照开发者的需求进行定制化开发。通过本章的学习,让读者更能熟悉和使用menuconfig菜单配置。
本章将分为如下几个小节:
       8.1 menuconfig概述
       8.2 menuconfig实现原理
       8.3 配置项解析


       8.1 menuconfig概述

      
menuconfig是Linux平台用于管理代码工程、模块及功能的实用工具。上至决定某一程序模块是否编译,下到某一行具体的代码是否需要编译以及某个项的值在本次编译时该是什么都可由menuconfig来定义。menuconfig的使用方式通常是在编译系统之前在系统源代码根目录下执行 make menuconfig 命令从而打开一个图形化配置界面,再通过对各项的值按需配置从而达到影响系统编译结果的目的。乐鑫的ESP-IDF采用了这种便捷的方式来迅速配置项目中的多样化选项,它的功能类似于STM32的CubeMX,虽然它不能直接构建工程,但却能够高效配置所需功能。下图是使用命令打开ESP-IDF项目的menuconfig菜单示意图。

第八章 MENUCONFIG菜单配置583.png

第八章 MENUCONFIG菜单配置585.png
图8.1.1 打开配置菜单

       通过配置菜单上的各个选项,从而达到影响系统编译的结果的目的。
       menuconfig的配置优点体现在以下几个方面:

       1,硬件资源配置:开发者可以通过menuconfig配置ESP32的硬件资源,如SPIRAM的启用与大小、Wi-Fi和蓝牙的参数设置等。这些配置能够确保硬件资源得到合理的利用,提高系统的性能和稳定性。

       2,分区表设置:menuconfig提供了对flash分区表的详细配置功能。开发者可以自定义分区的大小、类型和属性,以满足不同项目对flash存储的需求。这对于固件升级、数据存储等功能至关重要。

       3,组件功能配置:ESP-IDF包含了众多组件,如网络、驱动、工具等。menuconfig允许开发者根据项目的实际需求,启用或禁用这些组件,以及调整它们的配置参数。这有助于精简项目代码,提高开发效率。

       4,调试与日志设置:通过menuconfig,开发者可以配置调试选项和日志级别,以便在开发过程中更好地跟踪和定位问题。这对于调试和优化项目性能非常有帮助。

       menuconfig菜单配置为开发者提供了一个强大而灵活的工具,使他们能够根据项目需求进行定制化开发,优化系统性能,提高开发效率。因此,在进行ESP32项目开发时,熟练掌握menuconfig的使用是非常必要的。在基础工程中,我们可以通过命令的形式打开menuconfig菜单界面,也可以通过VS Code软件的方式打开菜单界面(请参考6.5章节)。

       8.2 menuconfig实现原理

       menuconfig 可以被视为一个“前端”工具,它提供了一个用户友好的界面来配置项目选项。而决定 menuconfig 拥有哪些配置项并管理这些配置项的“后端”则是 Kconfig 语言和相关的 Kconfig 文件。Kconfig 严格来讲是一种编程语言,它拥有自己的语法及结构。正是这些语法和结构组成了menuconfig在用户眼前不同的表现形式。下图是ESP-IDF项目工程菜单配置流程。

第八章 MENUCONFIG菜单配置1456.png
图8.2.1 ESP-IDF项目工程菜单配置流程

       从上图中可见,当输入“idf.py menuconfig”命令时,顶层的Kconfig会调用多个子层Kconfig文件,共同构建出完整的配置选项集。这些选项集随后被转化为直观的可视化menuconfig配置界面,方便开发人员根据需求配置各个选项。完成配置并保存退出后,系统会自动生成sdkconfig文件。这个文件在项目中扮演着核心角色,它向构建系统提供编译和链接项目的指令,包括启用或禁用特定功能、选择硬件接口、设置网络参数等。这些配置信息对于确保生成正确的固件至关重要。在构建过程中,CMake会读取sdkconfig文件,并根据其中的配置选项来精确配置构建过程。这样,最终生成的固件会精确匹配用户在menuconfig中所做的选择。

      
8.3 配置项解析

       接下来,作者将为大家详细讲解ESP-IDF项目工程中常用的菜单配置项及其描述与作用。这些配置项允许开发者根据项目需求进行灵活定制。同时,附上的是ESP-IDF项目工程的菜单目录图,方便大家直观了解各项配置的位置和分类。通过合理配置这些选项,可以优化项目的开发流程,提高开发效率。

第八章 MENUCONFIG菜单配置1954.png
图8.3.1 ESP-IDF项目工程菜单目录

       下面,作者将重点介绍上图中①、②、⑥和⑦分组的选项及其作用。对于其他分组的选项介绍与作用,建议读者查阅乐鑫官方ESP-IDF编程指南中的menuconfig菜单章节,以获取更详细的信息。请注意,以下截图均来自VS Code菜单界面。

      
1,编译类型(Build type)
       用于配置项目工程编译时生成哪个应用程序类型,下图是编译类型分组的选项。

第八章 MENUCONFIG菜单配置2151.png
图8.3.2 编译类型分组的选项

       上图中,“Application build type”用于选择应用程序的构建方式。该选项为开发者提供了两种选择:其一为系统默认的“Default (binary application + 2nd stage bootloader)”,这表示应用程序将以与ESP-IDF引导加载程序兼容的二进制格式构建;另一种则是“Build app runs entirely in RAM (EXPERIMENTAL)”,它仅适用于非常小和有限的应用程序,通过仅链接应用程序的elf文件,使其能够通过JTAG直接加载到RAM中。但请注意,由于IRAM和DRAM的大小非常有限,因此采用这种方式构建复杂应用程序是不可行的。
       上图中的“Enable reproducible build”选项表示可复制构建;上图中的“No Binary Blobs”选项表示禁用应用程序构建中的二进制库链接,但注意,此项开启后,WiFi与蓝牙无法工作。

      
2,Bootloader配置(Bootloader config)
       用于配置引导加载程序编译器优化等级、日记等,下图为Bootloader配置分组的选项。

第八章 MENUCONFIG菜单配置2660.png
图8.3.3 Bootloader配置分组的选项

       下面,我们来看一下上图各个选项的描述与作用。

       (1)Bootloader optimization Level选项
       这一选项为引导加载程序设置编译器优化级别(gcc-O参数)。
       Size(-Os):配置引导加载程序编译器优化大小。
       Debug(-Og):配置引导加载程序编译器优化调试。
       Optimize for performance (-O2):配置引导加载程序编译器优化性能。
       Debug without optimization (-O0):无配置引导加载程序编译器优化。

      (2)Bootloader log verbosity选项
       日志输出等级设置,以下为可供配置的项目:
       No output:日志输出等级为NONE。
       Error:日志输出等级为ERROR。
       Warning:日志输出等级为WARN。
       Info:日志输出等级为INFO。
       Debug:日志输出等级为DEBUG。
       Verbose:日志输出等级为VERBOSE。

      (3)VDDSDIO LDO voltage选项
       配置LDO输出电压,这有助于防止闪存芯片在闪存编程操作过程中发生故障。
       1.9V:配置引导加载程序VDDSDIO BOOST 1.9V

      (4)GPIO triggers factory reset选项
允许用户将设备重置为出厂设置,操作包括清除一个或多个数据分区,并从“工厂”分区启动。若在设备启动时,GPIO输入保持在预设的配置水平,则将自动触发出厂重置功能。默认情况下,该选项配置为“No”,即出厂重置功能处于关闭状态。

      (5)GPIO triggers boot from test app partition选项
允许用户直接从“TEST”分区运行测试应用程序。在设备启动时,如果检测到GPIO输入被拉低,系统会自动从“TEST”分区加载并启动测试程序,无需额外的操作或配置。

       (6)Enable protection for unmapped memory regions选项
为保护地址空间中未映射的内存区域免受意外访问,我们已启用该选项,确保CPU在执行涉及未映射区域的内存操作时触发异常。此选项已设置为“enable”,从而提供更强的内存安全保护。

       (7)Use RTC watchdog in start code选项
启用跟踪启动代码执行时间的功能,以确保在超过预定执行时间时,RTC_WDT(实时时钟看门狗)能够重新启动系统,从而有效避免电源不稳定时启动代码可能发生的锁定问题。此跟踪过程将从引导加载程序代码启动,重新设置超时时长,并选择slow_clk的时钟源,直至app_main被调用结束。由于看门狗使用SLOW_CLK作为时钟源,因此在调整slow_clk频率后,我们必须相应地为新的频率重新设置看门狗的时间。值得注意的是,slow_clk的具体时钟源依赖于RTC_clk_SRC的设置,即是否选择INTERNAL_RC(内部时钟源)或EXTERNAL_CRYSTAL(外部晶体时钟源)。为了确保系统稳定性和可靠性,我们强烈推荐启用该功能,并将其配置为“enable”状态。

       (8)Allows RTC watchdog disable in user code选项
如果启用了该选项,ESP-IDF应用程序需要在其代码中自行处理RTC_WDT的重置、喂狗或禁用操作。而若未启用此选项(默认为禁用状态),ESP-IDF会在调用app_main()函数之前自动禁用RTC_WDT。如需手动重置RTC_WDT的计数器,请使用函数rtc_wdt_feed();若需禁用RTC_WDT,则使用函数rtc_wdt_disable()。为确保应用程序的稳定运行,我们推荐保持该选项为禁用状态,即选择“No(disable)”。

       (9)Timeout for RTC watchdog (ms)选项
设置RTC看门狗的超时时间,其范围为0至120000毫秒(ms),而默认的超时时间已设置为9000毫秒(ms)。

       (10)Enable app rollback support选项
更新应用程序后,引导加载程序将启动新应用并设置“ESP_OTA_IMG_PENDING_VERIFY”状态,此状态会防止该应用被重复运行。用户代码首次启动新应用后,应调用相关函数以确认应用的可操作性。若应用运行正常,则将其标记为有效;否则,将其标记为无效,并回滚到前一个工作应用。随后将执行重启操作,并在软件更新前启动相应应用。请注意,新应用在首次启动时若发生电源中断或WDT触发,将触发回调函数。此回调仅在具有相同安全版本的应用之间有效。为确保系统稳定性,此选项默认设置为禁用,即“No(disable)”。

       (11)Skip image validation when exiting deep sleep 选项
此选项禁用从深度睡眠唤醒时对图像的常规验证(包括校验和、SHA256和签名),这是为了权衡深度睡眠唤醒的性能与图像完整性检查。请仅在明确知道操作后果的情况下启用此选项。同时,不建议将此选项与deep_sleep()调用以及活动OTA分区的更改一同使用,因为这将会跳过对新OTA分区加载的首次验证。虽然启用了“允许不安全选项”后,安全引导功能仍可使用,但强烈建议禁用此选项,因为它可能允许绕过安全引导机制,从而带来安全风险。

       (12)Skip image validation from power on reset (READ HELP FIRST)选项
一些应用程序需要迅速开机启动。默认情况下,应用程序的完整二进制文件会从闪存读取并验证,这一过程占据了大量的引导时间。

       (13)Skip image validation always (READ HELP FIRST)选项
选择此选项可防止引导加载程序在引导应用程序映像之前对其进行验证。所选应用程序分区的任何闪存损坏都将使整个SoC无法启动。

       (14)Reserve RTC FAST memory for custom purposes选项
此选项允许客户将数据放入RTC FAST内存,当重启时此区域保持有效,电源丢失除外。此内存位于固定地址,可用于引导加载程序和应用程序。(应用程序和引导程序必须使用编译相同的选项)。RTC FAST内存只能通过PRO_CPU进行访问。

       (15)Enable the support for flash chips of XMC (READ HELP FIRST)选项
执行XMC建议的启动流程。

       3,Flash配置(Serial flasher config)
       用来设置挂载的Flash通信模式、大小、速率等操作。下图是Flash配置选项。

第八章 MENUCONFIG菜单配置5459.png
图8.3.4 Flash配置选项

       下面,作者讲解一下上图中各个选项的描述与作用。

       (1)Disable download stub选项
       禁用下载存根。通常是指在某些嵌入式系统或固件更新过程中,关闭或禁用一个用于下载或接收新固件代码的小程序或模块。存根(stub)是一个占位符或简化版的程序,用于在开发或测试阶段模拟某个功能或接口的行为。

       (2)Enable Octal Flash选项
       启用八通道闪存(Octal Flash)功能。八通道闪存是一种高性能的存储器技术,它利用多个通道(在这里是八个通道)并行访问闪存芯片,从而提高了数据读写速度。注意:请根据模组挂载Flash是否使用Octal SPI。

       (3)Choose flash mode automatically (please read help)选项
       让系统或烧录工具自动选择适合的闪存(flash memory)模式。

       (4)Flash SPI mode选项
       设置当前挂载的Flash SPI模式。下表是系统提供的配置项描述。

1.png
表8.3.1 四种SPI模式的对比

       (5)Flash Sampling Mode选项
       闪存(Flash Memory)操作中的一种特定模式,用于读取或采样闪存中的数据。

       (6)Flash SPI speed选项
       配置SPI Flash速率,系统提供开发者配置项分别为120、80、40和20MHz。

       (7)Flash size选项
       配置Flash大小,系统提供开发者配置项分别为1、2、4、8、16、32、64和128MB。

       (8)Detect flash size when flashing bootloader选项
       在烧录引导加载程序(bootloader)时检测闪存(flash)大小,通常是为了确保引导加载程序能够正确适配目标设备的闪存容量,并避免潜在的溢出或空间不足的问题。

       (9)Before flashing选项
       固件烧录后的设备复位行为。可用配置:
       Reset to bootloader:复位bootloader
       No reset:无需复位

       (10)After flashing选项
       官方并没有描述此选项。
       Reset after flashing:复位Flash
       Stay in bootloader:停留在引导程序中

       4,分区表配置(Partition Table)
       分区表的介绍,请读者查看第七章节的内容。下图是分区表菜单示意图。

第八章 MENUCONFIG菜单配置6660.png
图8.3.5 分区表菜单选项

       (1)Partition Table选项
       设置分区表的类型,下表是分区表的类型描述:

2.png
表8.3.2 分区表的类型

       (2)Custom partition CSV file选项
       设置分区表名称,如partitions-16MiB.csv。

       (3)Offset of partition table选项
       程序烧录时,分区表下载至哪个偏移地址。默认为0x8000。

      (4)Generate an MD5 checksum for the partition table选项
       在分区表后是否添加MD5校验位和。


       5,PSRAM配置(Component config/ESP PSRAM)
       下图为PSRAM配置界面。

3.png
图8.3.6 PSRAM配置界面

       (1)Support for external, SPI-connected RAM选项
       是否支持扩展PSRAM,如挂载了PSRAM,则需要启动该选项。

       (2)Mode (QUAD/OCT) of SPI RAM chip in use选项
       设置PSRAM的SPI模式,需开发者查看当前的模组数据手册,才能确定PSRAM的SPI模式。该选项的可用配置:
       Quad Mode PSRAM:四线
       Octal Mode PSRAM:八线

       (3)Type of SPIRAM chip in use选项
       设置PSRAM芯片类型。该选项的可用配置:
       Auto-detect :自动检测。
       ESP-PSRAM64,LY68L6400 or APS6408:固定的PSRAM芯片。

       (4)Allow external memory as an argument to xTaskCreateStatic选项
       是否支持PSRAM内存用作于FreeRTOS的静态创建函数使用。

      (5)Move Instructions in Flash to PSRAM选项
       是否支持将Flash中的指令移动到PSRAM。

       (6)Move Read-Only Data in Flash to PSRAM选项
       是否支持将Flash中的只读数据移动到PSRAM。

       (7)Set RAM clock speed选项
       设置SPI时钟速率,可选配置项:
       80MHz clock speed:80MHz
       40Mhz clock speed:40MHz

       (8)Initialize SPI RAM during startup选项
       是否启动时初始化SPI RAM。

       (9)Ignore PSRAM when not found选项
       是否启动当没有找到PSRAM时,忽略PSRAM。

       (10)SPI RAM access method选项
       SPI RAM存储方法,可选配置项:
       Integrate RAM into memory map:将PSRAM集成到内存映射当中。
       Make RAM allocatable using heap_caps_malloc(..., MALLOC_CAP_SPIRAM):支持使用heap_caps_malloc等函数分配内存。
       Make RAM allocatable using malloc as well:支持使用malloc等函数分配内存。

       (11)Run memory test on SPI RAM initialization选项
       是否启动在SPI RAM初始化上运行内存测试。

       (12)Maximum malloc() size, in bytes, to always put in internal memory选项
       设置最大分配内存。

       (13)Try to allocate memories of WiFi and LWIP in SPIRAM firstly. If failed, allocate internal memory选项
       尝试先在SPIRAM中分配WiFi和LWIP的内存。如果失败,再分配内部内存。

       (14)Reserve this amount of bytes for data that specifically needs to be in DMA or internal memory选项
       为那些特别需要在DMA或内部内存中的数据保留这些字节。

      (15)Allow .bss segment placed in external memory选项
       允许.bss端放置在外部存储器中。

       (16)Enable SPI RAM ECC选项
       使能SPI RAM ECC。

       其他配置项描述与作用,请读者参考乐鑫官方的ESP-IDF编程指南MENUCONFIG章节。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-16 13:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表