You need to enable JavaScript to run this app. Windows下C++调用system()执行avrdude上传Arduino命令异常求解
优惠活动
大模型
产品
解决方案
定价
更多

Windows下C++调用system()执行avrdude上传Arduino命令异常求解

Arduino Uno 自动化上传流程中avrdude调用异常问题

项目背景

  • 项目基于Arduino Uno开发,所有项目文件、程序草图均由自研C++程序自动生成,计划移除Arduino IDE操作环节,直接调用Arduino官方上传工具avrdude,通过Windows控制台命令完成固件上传。
  • 手动在Windows控制台执行如下命令时,可正常完成程序上传:
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude" "-CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM4 -b115200 -D -Uflash:w:C:\Users\Jzargo\AppData\Local\Temp\arduino_build_766345/EPaper_TestDither.ino.hex:i
  • 上述命令上传的固件为EPaper_TestDither.ino编译生成的hex文件,手动执行无任何异常。

集成过程的异常表现

为简化操作,避免用户手动打开控制台输入复杂命令,计划将上述上传命令集成到自研C程序中,通过C标准库的system()函数发起命令调用,最初编写的调用代码如下:

system("\"C:\\Program Files(x86)\\Arduino\\hardware\\tools\\avr/bin/avrdude\" \" - CC:\\Program Files(x86)\\Arduino\\hardware\\tools\\avr/etc/avrdude.conf\" -v -patmega328p -carduino -PCOM4 -b115200 -D -Uflash:w:C:\\Users\\Jzargo\\AppData\\Local\\Temp\\arduino_build_766345/EPaper_TestDither.ino.hex:i");

执行上述C++代码时,控制台返回德语错误信息:

Der Befehl "C:\Program" ist entweder falsch geschrieben oder konnte nicht gefunden werden
(大致含义:命令'C:\Program'拼写错误或无法找到)
明明手动执行的命令可以正常运行,通过system()函数调用却出现路径被空格截断的解析错误,暂未定位问题原因。

补充测试情况

  • 尝试通过subst H: "C:\Program Files(x86)\Arduino\hardware\tools\avr\bin"命令将avrdude所在目录映射为H盘后,调整转义双引号的位置,重新编写system()调用代码如下:
system("\"H:/avrdude \"-CC:/Program Files (x86)/Arduino/hardware/tools/avr/etc/avrdude.conf\"\" -v -patmega328p -carduino -PCOM4 -b115200 -D -Uflash:w:C:/Users/Jzargo/AppData/Local/Temp/arduino_build_833906/EPaper_TestDither.ino.hex:i");
  • 上述修改后的代码可以成功完成Arduino草图上传,但只要不使用映射盘符H:,直接使用原C盘下的完整路径调用avrdude,就始终无法正常执行,需要排查路径解析失败的根本原因,找到无需额外映射盘符的可行解决方案。

内容的提问来源于stack exchange,提问作者J'zargo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 02:45:06