我正在不同的系统上执行以下代码。我需要一个通用的COMPORT参数,以便代码在所有系统上运行正常,具体取决于该设备所涉及的COM PORT。
C:\ arduino \ setup \ hardware / tools / avr / bin / avrdude -CC:\ arduino \ setup \ hardware / tools / avr / etc / avrdude.conf -v -v -v -v -patmega328p -carduino -P \。 \ COM121 -b115200 -D -Uflash:w:C:\ Users \ XYZ \ ABC \ files \ abc.cpp.hex:i
答案 0 :(得分:0)
您是否尝试检查波特率?可能是造成这个问题的原因。如果使用较低的波特率,情况会更好。此外,波特率应在您的代码和COM端口配置中匹配。 (检查设备管理器)
答案 1 :(得分:0)
由于我无法访问评论,因此我将回答 ASSUMING 您在WINDOWS操作系统下尝试此操作。
首先,为此请求编写实用程序会更简单,更优雅,因为命令行中没有任何特定设置可以解决不同系统上所有可能的COM端口设置。
在Windows下,没有' Alias'命令将通用名称与配置项(如COM端口)相关联,因此应用通用名称是不可能的。您可以编写一个FOR循环并将其放在CMD或BAT文件中,其中包含尝试将文本回显到典型COM端口名称列表(如COM1,COM2等)的逻辑。
如果在MS-DOS或Windows下的CMD或命令提示符窗口中键入此行:
echo "This is a test" > COM1:
您将得到无响应(好)或操作系统将回复:
The system cannot find the file specified.
后者表示没有这样的设备。 FOR循环可以测试第一个不返回错误的设备的迭代。这里的问题是,在具有多个串行端口的系统上(通常),您的代码将尝试它找到的第一个设备。如果用户将串行电缆连接到其他端口,则无法正常工作。
这就是我建议您编写实用程序的原因。该实用程序可以列出可用串行端口的列表,然后尝试使用查询查询设备的每个端口。这是我所知道的唯一可以保证'命令行的方法。您希望使用的内容在所有系统中都是统一的。
答案 2 :(得分:0)
我假设您正在使用Windows并希望您的命令可以在不同的Windows机器上运行,即使Arduinos位于不同的COM端口上也是如此。如今,大多数Arduinos都使用usbser.sys。如果您假设只有一个设备使用usbser.sys插入系统并且是Arduino,则可以在名为USBSER000的对象上访问Arduino。您可以将\\.\USBSER000
作为端口参数传递给AVRDUDE以引用Arduino的端口。
您必须正确地转义该字符串,因此您编写的实际命令将类似于:
avrdude -P\\\\.\\USBSER000 ...
可能对您有所帮助的其他事项:
%VARNAME%
或$VARNAME
来引用它。答案 3 :(得分:0)
using System;
using System.IO.Ports;
public class ports
{
static public void Main ()
{
var portNames = SerialPort.GetPortNames();
foreach(var port in portNames) {
Console.WriteLine (port);
}
}
}
使用命令提示符
上的命令通过mono C#编译器编译并执行此代码mcs ports.cs
mono ports.exe
现在可以在任何系统中使用ports.exe来检索可用的COM端口列表。