从其他语言和平台得知,我们希望在代码刷新到硬件之前的构建过程中使用单元测试。对于不需要 ESP32 硬件的简单功能测试来说,这应该是可能的。
但据我们了解,C++ 代码是为 ESP32 芯片编译(和链接)的,不应在开发系统或 CI/CD 管道中运行。
有没有办法在另一个系统上模拟 ESP32(用于 C++)或以任何其他方式运行单元测试?
注意:我们使用“platformio”进行构建。
最佳答案
可以使用qemu_esp32来做到这一点模拟器。您可以编译测试运行程序并直接在模拟器上运行它,而不是将其刷新到真正的 esp32 芯片。
以下是如何执行此操作的示例(改编自 esp32_qemu_unity_test_action ):
- 像平常一样编译测试运行程序。在继续之前,您可能想要实际刷新它,只是为了知道您的测试运行器和测试正在工作。
idf.py build
cd build
- 通常,当您刷新 esp32 时,您会将多个二进制文件写入特定位置。此命令将所有这些合并到一个完整的二进制图像中。
esptool.py --chip esp32 merge_bin --fill-flash-size 4MB -o flash_image.bin @flash_args
- 运行 esp32 模拟器并提供完整的二进制 Flash 镜像。
/opt/qemu/bin/qemu-system-xtensa -nographic -no-reboot -machine esp32 -drive file=flash_image.bin,if=mtd,format=raw -serial file:output.log
通过指定-no-reboot
,模拟器将直接退出而不是重新启动。
关于c++ - 如何在不刷新的情况下运行 ESP32 的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58710050/