platformio進(jìn)階使用

monitor_filters 使用
esp32_exception_decoder 解碼esp32異常棧
多環(huán)境配置 配置不同的TFF_eSPI
以及其他過(guò)濾器的使用
多環(huán)境編譯 [env:xxx]
使得同一份代碼用于編譯不同硬件外設(shè)不同開(kāi)發(fā)板或者其他配置差異的場(chǎng)景。
可以在build_flags中加入庫(kù)的宏, sdk的宏用于菜單配置,和自定義的宏,控制自己的代碼的編譯。多環(huán)境配好build_flags等屬性 實(shí)現(xiàn)無(wú)需移植代碼進(jìn)行多配置編譯。
舉例如下
[env:esp32cam_ST7796] platform = espressif32 board = esp32cam framework = arduino lib_deps = bodmer/TFT_eSPI@^2.4.76 upload_port = COM3 upload_speed = 115200 monitor_speed = 115200 monitor_port = COM3 build_unflags = build_flags = ; 使其它定義不生效 -D USER_SETUP_LOADED -D ST7796_DRIVER ; 定義SPI的引腳 ; -D TFT_MISO=-1 // 主讀從寫(xiě) 暫不需要 -D TFT_MOSI=15 -D TFT_SCLK=14 -D TFT_CS=12 -D TFT_DC=13 -D TFT_RST=2 #觸控的片選,這里暫不使用 #-DTOUCH_CS=-1 ; -D TFT_WIDTH=480 ; -D TFT_HEIGHT=320 -D LOAD_GLCD -D LOAD_FONT2 -D LOAD_FONT4 -D LOAD_FONT6 -D LOAD_FONT7 -D LOAD_FONT8 -D LOAD_GFXFF -D SMOOTH_FONT -D SPI_FREQUENCY=40000000 [env:esp32cam_ST7789] platform = espressif32 board = esp32cam framework = arduino lib_deps = bodmer/TFT_eSPI@^2.4.76 upload_speed = 115200 monitor_speed = 115200 monitor_port = COM4 build_flags = ; 使其它定義不生效 -D USER_SETUP_LOADED -D ST7789_DRIVER ; 定義SPI的引腳 ; -D TFT_MISO=-1 // 主讀從寫(xiě) 暫不需要 -D TFT_MOSI=15 -D TFT_SCLK=14 -D TFT_CS=12 -D TFT_DC=13 -D TFT_RST=2 #觸控的片選,這里暫不使用 # -DTOUCH_CS=-1 -D TFT_WIDTH=240 -D TFT_HEIGHT=320 -D LOAD_GLCD -D LOAD_FONT2 -D LOAD_FONT4 -D LOAD_FONT6 -D LOAD_FONT7 -D LOAD_FONT8 -D LOAD_GFXFF -D SMOOTH_FONT -D SPI_FREQUENCY=40000000 #觸控的頻率 這里沒(méi)有 ; -DSPI_TOUCH_FREQUENCY=2500000 [env:esp32-s3-ST7789] platform = espressif32 board = esp32-s3-devkitc-1 framework = arduino lib_deps = bodmer/TFT_eSPI@^2.4.76 upload_speed = 115200 monitor_speed = 115200 upload_port = COM4 build_flags = ; 使其它定義不生效 -D USER_SETUP_LOADED -D ST7789_DRIVER ; 定義SPI的引腳 ; -D TFT_MISO=-1 // 主讀從寫(xiě) 暫不需要 -D TFT_MOSI=15 -D TFT_SCLK=14 -D TFT_CS=12 -D TFT_DC=13 -D TFT_RST=2 #觸控的片選,這里暫不使用 # -DTOUCH_CS=-1 -D TFT_WIDTH=240 -D TFT_HEIGHT=320 -D LOAD_GLCD -D LOAD_FONT2 -D LOAD_FONT4 -D LOAD_FONT6 -D LOAD_FONT7 -D LOAD_FONT8 -D LOAD_GFXFF -D SMOOTH_FONT -D SPI_FREQUENCY=40000000
代碼提供者隨代碼提交platformio.ini,可以避免或者減少二次使用代碼的人配置菜單和sdk的工作量。
多線程編譯
一般默認(rèn)無(wú)需配置,以cpu線程數(shù)量創(chuàng)建任務(wù)。但可能CPU線程數(shù)的任務(wù)數(shù)量編譯速度可能不一定最快的。
增量編譯
修改代碼之后,build文件夾內(nèi)容還在,會(huì)增量編譯。但修改platformio.ini文件,會(huì)導(dǎo)致庫(kù)依賴和宏,以及開(kāi)發(fā)板還有各種影響編譯的屬性,可能會(huì)導(dǎo)致刪除build文件夾的輸出內(nèi)容,導(dǎo)致需要全量編譯。
debug
debug操作比較簡(jiǎn)單,這里以esp32s3開(kāi)發(fā)板自帶的usb_jtag為例演示,使用的是上一s3機(jī)器人的代碼。其他不自帶USB_JTAG的esp32需要購(gòu)買(mǎi)用于debug的外設(shè)。點(diǎn)擊debug按鈕即可。本人發(fā)現(xiàn)會(huì)有以下相關(guān)問(wèn)題。
- 如果線程切換或者其他原因?qū)е耫ebug中斷,再點(diǎn)擊debug重新跑它可能就好了。
- 如果debug時(shí)單步執(zhí)行某行代碼,不響應(yīng),則下次debug,在后方打斷點(diǎn)。通過(guò)跳到斷點(diǎn)的方式跳過(guò)它。
- 跳到斷點(diǎn)的時(shí)候偶爾執(zhí)行到中途,沒(méi)有到斷點(diǎn),繼續(xù)跳即可。
clion 切換build_type
clion需要查看多環(huán)境的代碼差異時(shí)??梢郧袚Qcmake下的build_type來(lái)查看宏的激活和引入包的變化。在platformio生成的CMakeListsPrivate.txt這個(gè)文件中定義了對(duì)應(yīng)每個(gè)環(huán)境的build_type來(lái)做不同配置的處理,雖然真實(shí)的編譯與clion配置的toolschain無(wú)關(guān),但clion的代碼提示。如報(bào)錯(cuò),代碼跳轉(zhuǎn)鏈接,自動(dòng)補(bǔ)全等,依賴cmake。