1

这个问题与Upload Arduino code on virtual serial port through Arduino IDE 有关。主要问题是能够将代码上传到虚拟 COM 端口而不是使用 Arduino,因此我可以获取二进制代码输出并在其他应用程序中使用它。问题在于上传过程也与 Arduino 上的引导加载程序有关,这就是上传过程永远不会达到 100% 的原因。建议的解决方案是在我的应用程序中实现引导加载程序,或者使用已经存在的东西。

我现在的问题是我是否可以利用 Arduino IDE 中的不同编程模式来绕过引导加载程序,以便上传过程可以达到 100% 并且代码实际上会到达虚拟 COM 端口?

任何帮助将不胜感激。谢谢

4

1 回答 1

0

听起来您的虚拟串行端口驱动程序卡在某些超时或缓冲区上。IDE 使用特定协议调用 avrdude,以匹配 Arduino 引导加载程序中内置的内容,加载在 AVR 上。还有其他的bootloader(其实很多,不胜枚举),其中一些可能有不同的时序等,但使用它们基本上不再是Arduino。查看可能性。\avrdude.exe -c。

如果您只是想转储串行端口上的内容。我用过Virtual Serial Ports Emulator。它非常通用,因为它的模块化,让您可以构建您想要的东西。

此外,正如其他线程中提到的那样,请注意串行端口上的数据是在STK500 协议之上格式化的。您还在其他线程中提到您不想使用其他工具来获取数据。而为了使用另一个协议,您需要更改源 compiler.java 并重建项目以使用新协议调用 avrdude。因此,您不妨使用其他工具来获取它。见下文,这将重新绑定。

您可以从输入到 avrdude 的内容中获取原始二进制文件。因为它最初可能并不明显。由于 avrdude 得到 ELF 而不是 BIN。Arduino IDE 包含所有 avr-gcc 及其工具。位于 .\Arduino\hardware\tools\avr\bin 中的 avr-objcopy 可以将汇集到 avrdude 的 IDE 输出转换为您可能需要的二进制文件。无需确定串行端口流的范围。

要手动执行此操作,您需要通过启用 IDE 的详细编译打印来找到 IDE 的临时工作目录。并且还可能将 avr-objcopy 放在您的路径中。然后像下面的例子一样简单地调用它,用你的草图的文件名代替我的。

C:\Users\mflaga\AppData\Local\Temp\build6135656488044319492.tmp>avr-objcopy -I ihex FilePlayer.cpp.hex -O binary FilePlayer.cpp.bin

你可以用一个批处理文件替换 avrdude.exe,它调用 avrdude 和 avr-objcopy 来自动化

于 2013-04-09T03:18:13.290 回答