ESP-IDF 学习 1 工程文件管理

news/2024/10/7 17:40:29/文章来源:https://www.cnblogs.com/JPW-2024/p/18450356

最小项目目录结构

├── CMakeLists.txt
├── main
│ ├── CMakeLists.txt
│ └── main.c
└── README.md

  • ESP-IDF 给用户的函数入口在 void app_main(void)
  • ./CMakeLists.txt管理整个工程
  • ./main/CMakeLists.txt管理./main文件夹中的所有文件

若要将 .c & .h 文件区分开,往往会创建一个或多个目录来装载它们。

如以下目录( 该树状图经过裁剪,尽可能只保留了用户创建的目录 )

├───.devcontainer
├───.vscode
├───main
│ └───include
└───managed_components
├───espressif__esp_tinyusb
│ ├───include
│ ├───include_private
│ ├───test
│ │ └───local
│ └───test_app
│ └───main
└───espressif__tinyusb

有以上目录,以下是我在./main/CMakeLists.txt的配置

idf_component_register(SRCS "My_mcu_sleep_init.c" "My_WIFI_init.c" "led_strip_encoder.c" "My_LED_init.c" "My_https_request.c" "My_timer_init.c" "My_GPIO_init.c" "My_usb_device.c" "app_main.c"INCLUDE_DIRS "./include"EMBED_TXTFILES server_root_cert.pem local_server_cert.pem)

于是我们的 .h 文件就都被装到 ./main/include 这个目录里头了,但是这些 .c 文件还是逐个添加,虽然我创建文件写好以后直接编译,它就自动写入./main/CMakeLists.txt,但是这样确实也不方便阅读。
于是我又尝试把 .c 文件都装到同一目录中,就有了以下./main/CMakeLists.txt

idf_component_register(#SRCS "My_mcu_sleep_init.c" "My_WIFI_init.c" "led_strip_encoder.c" "My_LED_init.c" "My_https_request.c" "My_timer_init.c" "My_GPIO_init.c" "My_usb_device.c" "app_main.c"SRC_DIRS "./source"INCLUDE_DIRS "./include"EMBED_TXTFILES server_root_cert.pem local_server_cert.pem)

↑ 但这样的 cmake 是大错特错的 ↑

这样会导致编译的时候一直找不到 void app_main(void) 这个函数入口

↓ 最后是这样解决的 ↓

file(GLOB_RECURSE SOURCES "./source/*.c")
idf_component_register(SRCS ${SOURCES}INCLUDE_DIRS "./include/")

这才算是编译成功了,没有弹出找不到 void app_main(void) 的错误

添加组件

├───.devcontainer
├───.vscode
├───main
│ └───include
└───managed_components
├───espressif__esp_tinyusb
│ ├───include
│ ├───include_private
│ ├───test
│ │ └───local
│ └───test_app
│ └───main
└───espressif__tinyusb

↑ 见以上目录,可以看见./managed_components

有时候某些功能 ESP-IDF 并不会内置,因此需要添加外置的组件才能使用相应的 API,如:TinyUSB
鉴于楼主才疏識浅,是用 ESP-IDF terminal 输入指令 idf.py add-dependency esp_tinyusb一键生成的


参考网站:

  • https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.1/esp32s3/api-guides/build-system.html#cmake-buildsystem-api
  • https://blog.csdn.net/sinat_36568888/article/details/125428659
  • https://cmake.org/cmake/help/latest/command/file.html
  • https://components.espressif.com/components/espressif/esp_tinyusb/versions/1.4.5?language=en
  • https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/usb_device.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/809517.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Word中 Endnote 引用标蓝色

1. 打开word中的endnote加载项。如图所示,勾选这两个设置。 确认后会自动变为超链接,显示蓝色以及下划线。 2. 在样式设置中,将超链接的下划线取消。之后就会只显示蓝色引用。 结果显示:

中国大学生程序设计竞赛(秦皇岛)正式赛东北大学秦皇岛分校(SMU Autumn 2024 Team Round 1)

中国大学生程序设计竞赛(秦皇岛)正式赛东北大学秦皇岛分校(SMU Autumn 2024 Team Round 1) Problem A. 贵校是构造王国吗 I 思路 官方题解很清晰明了。代码 #include <bits/stdc++.h> using namespace std; #define int long long #define endl \n #define PII pair&…

多校 A 层冲刺 NOIP2024 模拟赛 03

多校 A 层冲刺 NOIP2024 模拟赛 03 T1 五彩斑斓(colorful) 签到题 直接暴力枚举是 \(O(n^4)\) ,考虑使用 \(bitset\) 优化,对每个点开个 \(bitset\),预处理它所在一行它及它之前相同颜色的位置,这样就只用枚举另一个点所在列,时间复杂度为 \(O(n^3+\frac{n^4}{w})\)。 T…

在浏览器上访问媒体资源配置【文件上传】

1.根urls.py文件中 from django.contrib import admin from django.urls import path, include, re_path from django.views.static import serve from django.conf import settingsurlpatterns = [# path(admin/, admin.site.urls),path(api/shipper/, include(apps.shipper.u…

高级程序语言设计第二次作业

姓名:袁志华 班级:软件工程2班 学号:102400231 班级网址:https://edu.cnblogs.com/campus/fzu/2024C 作业网址:https://edu.cnblogs.com/campus/fzu/2024C/homework/13282 图片: 第一题: 第二题: 第三题: 第四题: 第五题: 第六题: 第七题: 第八题:程序清单: 3.1…

macOS Sequoia 15.0.1 (24A348) 正式版 ISO、IPSW、PKG 下载

macOS Sequoia 15.0.1 (24A348) 正式版 ISO、IPSW、PKG 下载macOS Sequoia 15.0.1 (24A348) 正式版 ISO、IPSW、PKG 下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoi…

人群聚集监测预警系统

人群聚集监测预警系统采用AI视频智能分析技术,人群聚集监测预警系统通过在工地、工厂等场所已经安装监控摄像头,人群聚集监测预警系统对人员聚集情况进行实时监测,当人群聚集过于密集时,系统将自动发出警报,人群聚集监测预警系统并通过人工智能算法对人员的状态进行识别和…

智能烟火识别预警软件

智能烟火识别预警软件采用人工智能技术,智能烟火识别预警软件在工厂、工地等场所利用已经安装的摄像头,智能烟火识别预警软件对场内的烟花爆竹进行实时监测。当场内出现烟花爆竹时,智能烟火识别预警软件将自动发出警报,并通过人工智能算法通知现场管理人员进行处理。智能烟…

脱岗监测预警系统

脱岗监测预警系统可以通过对工人的位置进行实时监测,脱岗监测预警系统识别是否存在脱岗行为,并及时发出警报。脱岗监测预警系统在工作过程中,如果工人离开其工作位置,脱岗监测预警系统会自动识别并发出警报,提醒管理人员采取措施防止事故的发生。脱岗监测预警系统可以通过…

非煤矿山电子封条系统部署方案

非煤矿山电子封条系统部署方案是基于Ai视频图像识别技术,非煤矿山电子封条系统部署方案通过人工智能算法在矿山设备上安装电子封条,监控矿山矿井出入井人员、人员变化及非煤矿山生产作业状态等状况,及时发现处理非煤矿山异常动态将自动发出警报,及时通知现场管理人员进行处…

加油站员工行为监测预警系统

加油站员工行为监测预警系统可以通过对加油站员工进行实时监控,加油站员工行为监测预警系统识别是否存在不规范行为,并及时发出警报。在卸油作业过程中,加油站员工行为监测预警系统监测员工灭火器的正确放置、静电释放操作规范等作业状态,及时发出警报,提醒工作人员采取措…

矿山电子封条系统

矿山电子封条系统通过在煤矿关键地点安装摄像机以及边缘智能分析终端,矿山电子封条系统实时监测分析煤矿生产作业状态和矿井出入井人员、人数变化等情况,矿山电子封条系统利用智能化视频识别等技术及时发现煤矿异常动态,全天候不间断自动推送报警信息。相比传统的安全监管手…