【发布时间】:2021-07-11 14:58:55
【问题描述】:
堆栈溢出的友好人士您好!
我目前正在使用 Arduino Uno 进行一个项目。因为我使用 c++ 程序创建了所有文件和草图,所以我想从我的工作流程中消除 Arduino IDE。为此,我可以非常轻松地使用 avrdude(IDE 无论如何都使用它)和一些 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”是我要编译和上传的 arduino Sketch。使用控制台并手动插入上述命令时,一切正常。
我正在苦苦挣扎的部分来了:
因为我也不希望用户手动打开控制台并输入一些乱码,我想使用 system() 将此命令集成到我的 c++ 程序中;功能:
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");
执行此函数时,命令无法执行,因为“Der Befehl "C:\Program" ist entweder falsch geschrieben oder konnte nicht gefunden werden.",大致翻译为“The Command "C:\Program" is not写对了还是找不到”。
我不明白为什么控制台在手动插入时接受命令,但在使用 system() 时不接受;功能。
希望你能帮我解决这个问题。
编辑: 通过使用
subst H: "C:\Program Files(x86)\Arduino\hardware\tools\avr\bin" 和
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");
我能够上传我的草图。请注意 \" 的更改位置。
但由于某种原因,当使用C:\Program Files(x86)\Arduino\hardware\tools\avr\bin 而不是H: 时,这不起作用。
最诚挚的问候
扎戈
【问题讨论】:
-
这总是由于不正确的引用/间距/转义。您需要了解:1)您的操作系统外壳如何解析命令,2)
system如何执行给定的命令,3)需要如何转义文字字符串以表示特殊字符。您的问题有些乱码,很难确切地看到您的代码是什么样的。无论如何,您应该能够在您的教科书中找到上述所有信息。您的教科书中是否有关于这个主题的具体内容不清楚? -
哈,我刚刚对 Windows 传递参数的方式大喊大叫 here。多么合适。
-
你好山姆,谢谢你的回答。抱歉我的问题乱码,我是这个论坛的新手。我不是教科书的工作。我理解 System() 的方式; c++ 中的功能是它只是用给定的命令(在我的例子中是控制台)调用主机环境的命令处理器。所以我认为直接在控制台中插入时有效的任何命令也应该适用于 system();只要您确保字符串格式正确。但我认为这个假设是错误的(否则它会起作用)。我将在没有额外反斜杠的情况下注释我的代码:
-
@sam-varshavchik 我尝试使用一些格式化功能来减少问题的乱码
-
@peter-reinstate-monica 很好,确实很合适。但老实说,我几乎不理解你的评论,因为我对 Windows 缺乏了解,我猜......所以我真的不知道这如何帮助我修复我的代码
标签: c++ arduino windows-console avrdude