我希望能够对我的Arduino代码进行单元测试。理想情况下,我希望能够运行任何测试而不必上传代码到Arduino。有哪些工具或库可以帮助我完成这个任务?
目前正在开发一款Arduino模拟器(Arduemu),这可能会有所帮助,但它似乎还没有准备好供使用。
Atmel的AVR Studio包含了一个芯片模拟器,这可能是有用的,但我不知道如何将其与Arduino IDE配合使用。
我希望能够对我的Arduino代码进行单元测试。理想情况下,我希望能够运行任何测试而不必上传代码到Arduino。有哪些工具或库可以帮助我完成这个任务?
目前正在开发一款Arduino模拟器(Arduemu),这可能会有所帮助,但它似乎还没有准备好供使用。
Atmel的AVR Studio包含了一个芯片模拟器,这可能是有用的,但我不知道如何将其与Arduino IDE配合使用。
pinMode(xx, OUTPUT)
等)。基本上,Arduino是用C和C++编写的,甚至Arduino的库也是用C和C++编写的。因此,简单来说,只需将代码处理为C和C++并尝试进行单元测试。在这里,“处理”一词的意思是更改所有基本语法,例如将serial.println更改为sysout,pinmode更改为变量,void loop更改为while()循环,该循环在按键或经过某些迭代后中断。
我知道这是一个有点长的过程,不太直接。根据我的个人经验,一旦你开始使用它,它就会变得更加可靠。
-Nandha_Frost
如果您有兴趣运行一个INO草图并检查串行输出,我在我的Arduino NMEA checksum项目中有一个可用的实现。
以下脚本获取文件并使用Arduino CLI将其编译为HEX文件,然后加载到SimAVR中评估并打印串行输出。由于所有的Arduino程序都能够永久运行,而没有真正终止的选项(exit(0)
无效), 我让草图运行几秒钟,然后将捕获的输出与预期的输出进行比较。
下载并提取Arduino CLI(在本例中为版本0.5.0 - 当写作时最新):
curl -L https://github.com/arduino/arduino-cli/releases/download/0.5.0/arduino-cli_0.5.0_Linux_64bit.tar.gz -o arduino-cli.tar.gz
tar -xvzf arduino-cli.tar.gz
./arduino-cli core update-index
./arduino-cli core install arduino:avr
nmea-checksum.ino
,要获取 ELF 和 HEX,请运行:./arduino-cli compile -b arduino:avr:uno nmea-checksum.ino
sudo apt-get update
sudo apt-get install -y build-essential libelf-dev avr-libc gcc-avr freeglut3-dev libncurses5-dev pkg-config
git clone https://github.com/buserror/simavr.git
cd simavr
make
编译成功后,您将获得simavr/run_avr
,您可以使用它来运行草图。像我说的那样,否则就超时
,否则它将永远不会终止:
cd simavr
timeout 10 ./run_avr -m atmega168 -f 16000000 ../../nmea-checksum.ino.arduino.avr.uno.elf &> nmea-checksum.ino.clog || true
生成的文件将具有 ANSI 颜色代码控制字符包装串行输出,要消除这些字符:
cat nmea-checksum.ino.clog | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" > nmea-checksum.ino.log
cat nmea-checksum.ino.log
diff nmea-checksum.ino.log ../../nmea-checksum.ino.test
diff
会以0代码退出,否则脚本将失败。