在vscode的ESP-IDF中使用自定義組件

以hello-world為例,演示步驟和注意事項

1、新建ESP-IDF項目

選擇模板

從hello-world模板創建

2、打開項目

3、編譯結果沒錯

正在執行任務: /home/azhu/.espressif/python_env/idf5.1_py3.10_env/bin/python /home/azhu/esp/v5.1/esp-idf/tools/idf_size.py /home/azhu/ESP32/test/use_componet/build/use_componet.map Total sizes:
Used static DRAM:   10664 bytes ( 170072 remain, 5.9% used).data size:    8472 bytes.bss  size:    2192 bytes
Used static IRAM:   48958 bytes (  82114 remain, 37.4% used).text size:   47931 bytes.vectors size:    1027 bytes
Used Flash size :  118107 bytes.text:   80723 bytes.rodata:   37128 bytes
Total image size:  175537 bytes (.bin may be pa

4、燒寫運行

 '/home/azhu/.espressif/python_env/idf5.1_py3.10_env/bin/python' '/home/azhu/esp/v5.1/esp-idf/tools/idf_monitor.py' -p /dev/ttyUSB0 -b 115200 --toolchain-prefix xtensa-esp32-elf- --target esp32 '/home/azhu/ESP32/test/use_componet/build/use_componet.elf'
--- esp-idf-monitor 1.5.0 on /dev/ttyUSB0 115200
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
ets Jul 29 2019 12:21:46rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:7128
load:0x40078000,len:15624
load:0x40080400,len:4
--- 0x40080400: _init at ??:?load:0x40080404,len:3876
entry 0x4008064c
I (29) boot: ESP-IDF v5.1.5-346-g41a885bb2d 2nd stage bootloader
I (29) boot: compile time Dec 24 2024 14:24:47
I (31) boot: Multicore bootloader
I (35) boot: chip revision: v3.0
I (39) boot.esp32: SPI Speed      : 40MHz
I (43) boot.esp32: SPI Mode       : DIO
I (48) boot.esp32: SPI Flash Size : 2MB
I (52) boot: Enabling RNG early entropy source...
I (58) boot: Partition Table:
I (61) boot: ## Label            Usage          Type ST Offset   Length
I (69) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (76) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (84) boot:  2 factory          factory app      00 00 00010000 00100000
I (91) boot: End of partition table
I (95) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=09208h ( 37384) map
I (117) esp_image: segment 1: paddr=00019230 vaddr=3ffb0000 size=02118h (  8472) load
I (121) esp_image: segment 2: paddr=0001b350 vaddr=40080000 size=04cc8h ( 19656) load
I (131) esp_image: segment 3: paddr=00020020 vaddr=400d0020 size=13b54h ( 80724) map
I (161) esp_image: segment 4: paddr=00033b7c vaddr=40084cc8 size=07278h ( 29304) load
I (179) boot: Loaded app from partition at offset 0x10000
I (179) boot: Disabling RNG early entropy source...
I (191) cpu_start: Multicore app
I (192) cpu_start: Pro cpu up.
I (192) cpu_start: Starting app cpu, entry point is 0x400810f4
--- 0x400810f4: call_start_cpu1 at /home/azhu/esp/v5.1/esp-idf/components/esp_system/port/cpu_start.c:160I (0) cpu_start: App cpu up.
I (209) cpu_start: Pro cpu start user code
I (209) cpu_start: cpu freq: 160000000 Hz
I (209) cpu_start: Application information:
I (214) cpu_start: Project name:     use_componet
I (219) cpu_start: App version:      1
I (224) cpu_start: Compile time:     Dec 24 2024 14:24:22
I (230) cpu_start: ELF file SHA256:  7a0e0699229a74e2...
I (236) cpu_start: ESP-IDF:          v5.1.5-346-g41a885bb2d
I (242) cpu_start: Min chip rev:     v0.0
I (247) cpu_start: Max chip rev:     v3.99 
I (252) cpu_start: Chip rev:         v3.0
I (257) heap_init: Initializing. RAM available for dynamic allocation:
I (264) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (270) heap_init: At 3FFB29A8 len 0002D658 (181 KiB): DRAM
I (276) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (282) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (289) heap_init: At 4008BF40 len 000140C0 (80 KiB): IRAM
I (296) spi_flash: detected chip: gd
I (299) spi_flash: flash io: dio
W (303) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header.
I (317) app_start: Starting scheduler on CPU0
I (321) app_start: Starting scheduler on CPU1
I (321) main_task: Started on CPU0
I (331) main_task: Calling app_main()
Hello world!
This is esp32 chip with 2 CPU core(s), WiFi/BTBLE, silicon revision v3.0, 2MB external flash
Minimum free heap size: 301172 bytes
Restarting in 10 seconds...

5、添加組件,功能為再輸出一行文字

COMMAND->Create ESP-IDF Compontent

最上方輸入自己的組件名稱然后回車,這里輸入?mycomp

ESP-IDF自動創建compontents文件夾,然后在下面有mycomp文件夾,里面有mycomp.c,include/mycomp.h

編寫代碼,mycomp.c

#include <stdio.h>
#include "mycomp.h"void func(void)
{printf("call by mycomp\n");
}

main/hello_world_main.c,只加兩行

......
#include "esp_flash.h"
#include "mycomp.h"        //addvoid app_main(void)
{......printf("Restarting now.\n");func();                //addfflush(stdout);

6、再次編譯,不出意外的話,一定報錯:

 ............../use_componet/main/hello_world_main.c
/home/azhu/ESP32/test/use_componet/main/hello_world_main.c:14:10: fatal error: mycomp.h: No such file or directory14 | #include "mycomp.h"|          ^~~~~~~~~~
compilation terminated.
ninja: build stopped: subcommand failed.

7、關鍵要點!

原因是main沒有包含自己寫的組件,或者說依賴,把main/CMakeLists.txt修改為

idf_component_register(SRCS "hello_world_main.c"INCLUDE_DIRS "")
改成如下:idf_component_register(SRCS "main.c"INCLUDE_DIRS ""PRIV_REQUIRES mycomp)

再編譯,錯誤變了

/use_componet/main/hello_world_main.c:13:10: fatal error: esp_flash.h: No such file or directory13 | #include "esp_flash.h"|          ^~~~~~~~~~~~~
compilation terminated.
[902/910] Building C object esp-id...provisioning.dir/src/manager.c.obj
ninja: build stopped: subcommand failed.

繼續修改main/CMakeLists.txt,右鍵點#include "esp_flash.h",然后轉到定義,可以看到esp_flash.h位于esp_flash模塊,所以加上spi_flash組件

idf_component_register(SRCS "hello_world_main.c"INCLUDE_DIRS ""PRIV_REQUIRES spi_flash mycomp)

所有的include都有組件支持了,編譯無錯,運行后可以看到輸出了?call by mycomp

I (331) main_task: Calling app_main()
Hello world!
This is esp32 chip with 2 CPU core(s), WiFi/BTBLE, silicon revision v3.0, 2MB external flash
Minimum free heap size: 301172 bytes
Restarting in 10 seconds...
......
Restarting in 0 seconds...
Restarting now.
call by mycomp
ets Jul 29 2019 12:21:46rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
.....

8、如果自己的組件中不止一個源文件怎么辦,方法是編輯組件根下的CMakeLists.txt,這里示例為components/mycomp/CMakeLists.txt,有兩個方法可以組織源文件和頭文件

file(GLOB_RECURSE SOURCES *.c */*.c)set(include_dirs """include"
)
idf_component_register(SRCS ${SOURCES}INCLUDE_DIRS ${include_dirs})# idf_component_register(SRCS "mycomp.c" "mycomp2.c"
#                     INCLUDE_DIRS "include")

這里簡單示例,mycomp2.c和mycomp.c功能差不多,最后在主程序func();后面加了行func2();

運行結果:

I (331) main_task: Calling app_main()
Hello world!
This is esp32 chip with 2 CPU core(s), WiFi/BTBLE, silicon revision v3.0, 2MB external flash
Minimum free heap size: 301172 bytes
Restarting in 10 seconds...
....
Restarting in 0 seconds...
Restarting now.
call by mycomp
call by mycomp---2
ets Jul 29 2019 12:21:46

9、小結

如果main模塊編譯出錯,需要編輯同級CMakeLists.txt,如果組件編譯出錯,也要編輯同級CMakeLists.txt

如果需要,執行COMMAND->Full Clean

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63997.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63997.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025差旅平臺怎么選?一體化、全流程降本案例解析

差旅支出在企業中一直是一項重要但容易被忽視的成本開支&#xff0c;尤其是在項目驅動型企業中&#xff0c;因頻繁的差旅需求&#xff0c;支出規模往往持續增長。以差旅平臺分貝通簽約伙伴——某智能制造業的業務模式為例&#xff0c;該模式要求員工定期前往不同的工廠、供應商…

【linux】NFS實驗

NFS NFS服務 nfs,最早是Sun這家公司所發展出來的,它最大的功能就是可以透過網絡,讓不同的機器,不同的操作系統,進行實現文檔的共享。所以你可以簡單的將他看做是文件服務器。 實驗準備 ①先準備一個服務器端的操作系統和客戶端的操作系統(Red Hat)。 ②選擇NAT模式,…

智源研究院與安謀科技達成戰略合作,共建開源AI“芯”生態

12月25日&#xff0c;智源研究院與安謀科技&#xff08;中國&#xff09;有限公司&#xff08;以下簡稱“安謀科技”&#xff09;與正式簽署戰略合作協議&#xff0c;雙方將面向多元AI芯片領域開展算子庫優化與適配、編譯器與工具鏈支持、生態系統建設與推廣等一系列深入合作&a…

ROG NUC:強大內核激發創意,AI賦能學子科技探索

有這么一款能夠激發無限創意、助力科技探索的迷你主機&#xff0c;它以其卓越的性能和迷你的身材成為了成為了ProArt百校行活動中的明星產品&#xff0c;助力廣大學子勇敢探索未知&#xff0c;追逐屬于自己的科技夢想。它就是ROG NUC 2024&#xff01; 強大性能&#xff0c;創意…

從零玩轉CanMV-K230(8)-多線程例程

文章目錄 前言一、_thread模塊API二、使用示例創建并啟動線程停止線程_thread.exit() 總結 前言 K230上不支持threading&#xff0c;只能支持_thread&#xff0c;該模塊實現了相應 CPython 模塊的子集&#xff0c;CPython 是 Python 編程的參考實現 語言&#xff0c;也是最著名…

yii2 手動添加 phpoffice\phpexcel

1.下載地址&#xff1a;https://github.com/PHPOffice/PHPExcel 2.解壓并修改文件名為phpexcel 在yii項目的vendor目錄下創建一個文件夾命名為phpoffice 把phpexcel目錄放到phpoffic文件夾下 查看vendor\phpoffice\phpexcel目錄下會看到這些文件 3.到vendor\composer目錄下…

安卓多渠道apk配置不同簽名

一般簽名都是放在buildTypes里面&#xff1a; ... android {...defaultConfig {...}signingConfigs {release {storeFile file("myreleasekey.keystore")storePassword "password"keyAlias "MyReleaseKey"keyPassword "password"}}bu…

數據庫-用戶管理

一、創建用戶 create user xy104192..168.42.24 identified by 123456;xy104&#xff1a;用戶名 localhost&#xff1b;這個權限最高的root用戶 %&#xff1a;任務ip地址 192.168.42.24&#xff1a;登錄的IP地址 identified by ‘123456’&#xff1a;指定該用戶的密碼 mysql…

管理者需要的技能

管理者需要具備技術技能、人際技能和概念技能&#xff0c;這三種技能的內涵如下&#xff1a; 技術技能 專業知識與技術能力&#xff1a;指管理者掌握和運用某一專業領域內的知識、技術和方法的能力。這包括對特定行業的專業知識、技術流程、工具設備的熟悉和精通。例如&#x…

scala基礎學習(數據類型)-字符串

文章目錄 scala中的字符串引號單引號雙引號三引號 常用內置函數length 獲取字符串長度charAt 字符串元素訪問substring 獲取字串indexOf 獲取字串位置replace 字符串替換toLowerCase,toUpperCase 字符串大小寫轉換trim 去除首位空白符split 字符串切割以及查看startsWith,endsW…

數據庫安全-redisCouchdb

1.redis未授權訪問 默認端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介紹&#xff1a;Redis 是一套開源的使用 ANSI C編寫、支持網絡、可基于內存亦可持久化的日志型、鍵值存儲數據庫&#xff0c;并提供多種語言的API。Redis 如果在沒有開啟認證的情況下&#xff0c;…

springboot集成websokcet+uniapp開發聊天原型驗證(一)

1. 整體思路 群組聊天功能實現思路 需要為每個群組維護一個對應的集合&#xff08;可以是 Set 等數據結構&#xff09;&#xff0c;用來存放該群組內所有在線用戶的 WebSocketSession。當有消息發送到群組時&#xff0c;遍歷該群組對應的集合&#xff0c;向其中的每個在線用戶…

Reed-Muller(RM)碼之編碼

點個關注吧! 看了一些中文的博客,RM碼沒有很詳細的資料,所以本文嘗試給出推導原理。 推導 RM碼由 ( r , m ) ( r , m ) (r,m

List直接使用removeAll報錯

List直接使用removeAll報錯 需要先將list轉換才能使用 原因是&#xff1a; removeAll 方法在 Java 中用于從當前列表中刪除另一個列表中存在的所有元素。如果直接對 List 接口的一個實現使用 removeAll 方法拋出異常&#xff0c;可能的原因有&#xff1a; 不同的List實現&am…

Linux -- 線程的優點、pthread 線程庫

目錄 線程的優點 pthread 線程庫 前言 認識線程庫 簡單驗證線程的獨立棧空間 線程的優點 與進程之間的切換相比&#xff0c;線程之間的切換需要操作系統做的工作要少得多。 調度進程時&#xff0c;CPU 中有一個 cache&#xff08;緩存&#xff0c;提高運行效率&#xff0…

【magic-dash】01:magic-dash創建單頁面應用及二次開發

文章目錄 一、magic-dash是什么1.1 安裝1.2 使用1.2.1 查看內置項目模板1.2.2 生成指定項目模板1.2.3 查看當前magic-dash版本1.2.4 查看命令說明1.2.5 內置模板列表二、創建虛擬環境并安裝magic-dash三、magic-dash單頁工具應用開發3.1 創建單頁面項目3.1.1 使用命令行創建單頁…

從零開始使用MaxKB打造本地大語言模型智能問答系統與遠程交互

文章目錄 前言1. 下載運行Ollama2. 安裝大語言模型3. 安裝Cpolar工具4. 配置公網地址5. 固定公網地址6. MaxKB 添加Olama7.創建問答應用 前言 目前大語言模型&#xff08;LLM&#xff09;已經成為了人工智能領域的一顆璀璨明星&#xff0c;從自然語言處理到智能問答系統&#…

深度解析 Pytest 中的 conftest.py

關注開源優測不迷路 大數據測試過程、策略及挑戰 測試框架原理&#xff0c;構建成功的基石 在自動化測試工作之前&#xff0c;你應該知道的10條建議 在自動化測試中&#xff0c;重要的不是工具 在使用 Pytest 進行測試的過程中&#xff0c;conftest.py 文件扮演著極為重要的角色…

【python】銀行客戶流失預測預處理部分,獨熱編碼·標簽編碼·數據離散化處理·數據篩選·數據分割

數據預處理 通過網盤分享的文件&#xff1a;銀行流失預測數據和代碼 鏈接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取碼: pfcs 非數值特征處理 目的&#xff1a;將非數值特征轉換為數值型&#xff0c;以便模型能夠處理。方法&#xff1a; 地理位置&am…

回歸預測 | MATLAB實現CNN-LSSVM卷積神經網絡結合最小二乘支持向量機多輸入單輸出回歸預測

回歸預測 | MATLAB實現CNN-LSSVM卷積神經網絡結合最小二乘支持向量機多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現CNN-LSSVM卷積神經網絡結合最小二乘支持向量機多輸入單輸出回歸預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 回歸預測 | MATLAB實現CNN-LSSVM…