我已经在SAMD21J18A MCU上实现了Bootloader实现,基于
Atmel示例。我可以通过USB CDC连接到引导加载程序,它在Windows中被识别为COM端口,名称为AT91 USB to Serial Converter
,没有任何问题。
COM端口工作正常,我制作了一个可运行的Windows Form C#程序,用于将代码下载到引导加载程序。在工作程序中,我只是手动设置了PortName
。
现在,我想使程序更加用户友好,并想制作一个ComboBox
以使用户能够选择要使用的COM端口。因此,我正在调用GetPortNames
函数:
string[] Ports = null;
Ports = SerialPort.GetPortNames();
只要我不插入我的引导程序,此方法就可以正常工作。
如果我附上例如。 FTDI设备,它会检测到该设备并将其添加到列表中,但是如果我附加了Bootloader("AT91 USB to Serial Converter")
,则在System.StackOverflowException
函数上会得到一个SerialPort.GetPortNames()
。
有人知道GetPortNames
或USB CDC驱动程序出了什么问题吗?
感谢您的帮助mjwills:-)
完整的程序太大,无法在此处显示,因此我决定制作一个简短的程序来显示问题。但是,新的简短程序没有这个问题。因此,发现问题并非直接源于Visual Studio所引用的行。 无论如何,这是造成问题的函数:
// Update comport pull-down list:
private void UpdateComPortList()
{
string[] Ports = null;
Ports = SerialPort.GetPortNames();
int index = -1;
string ComPortName = null;
comboBoxComPort.Items.Clear();
do
{
index += 1;
comboBoxComPort.Items.Add(Ports[index]);
//if(Properties.Settings.Default.comPort == Ports[index]) comboBoxComPort.SelectedIndex = index;
}
while (!((Ports[index] == ComPortName) || (index == Ports.GetUpperBound(0))));
comboBoxComPort.Items.Add("update list...");
}
如果我删除我现在已经注释的行,则该程序可以运行。 我认为问题在于,我尝试选择一个项目,同时添加项目...