platformio进阶使用

monitor_filters 使用
esp32_exception_decoder 解码esp32异常栈
多环境配置 配置不同的TFF_eSPI
以及其他过滤器的使用
多环境编译 [env:xxx]
使得同一份代码用于编译不同硬件外设不同开发板或者其他配置差异的场景。
可以在build_flags中加入库的宏, sdk的宏用于菜单配置,和自定义的宏,控制自己的代码的编译。多环境配好build_flags等属性 实现无需移植代码进行多配置编译。
举例如下
[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 // 主读从写 暂不需要 -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 // 主读从写 暂不需要 -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 #触控的频率 这里没有 ; -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 // 主读从写 暂不需要 -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的工作量。
多线程编译
一般默认无需配置,以cpu线程数量创建任务。但可能CPU线程数的任务数量编译速度可能不一定最快的。
增量编译
修改代码之后,build文件夹内容还在,会增量编译。但修改platformio.ini文件,会导致库依赖和宏,以及开发板还有各种影响编译的属性,可能会导致删除build文件夹的输出内容,导致需要全量编译。
debug
debug操作比较简单,这里以esp32s3开发板自带的usb_jtag为例演示,使用的是上一s3机器人的代码。其他不自带USB_JTAG的esp32需要购买用于debug的外设。点击debug按钮即可。本人发现会有以下相关问题。
- 如果线程切换或者其他原因导致debug中断,再点击debug重新跑它可能就好了。
- 如果debug时单步执行某行代码,不响应,则下次debug,在后方打断点。通过跳到断点的方式跳过它。
- 跳到断点的时候偶尔执行到中途,没有到断点,继续跳即可。
clion 切换build_type
clion需要查看多环境的代码差异时。可以切换cmake下的build_type来查看宏的激活和引入包的变化。在platformio生成的CMakeListsPrivate.txt这个文件中定义了对应每个环境的build_type来做不同配置的处理,虽然真实的编译与clion配置的toolschain无关,但clion的代码提示。如报错,代码跳转链接,自动补全等,依赖cmake。