我正在调整一些用于通过 USB 将 .bin 文件上传到我们的产品之一的测试软件。该产品具有 Atmel AT91SAM7X256 处理器。该软件全部用 c# 编写,在 windows XP 机器上运行。
以前的程序员(不再与公司合作)使用名为 AT91BootDLL.dll 的 dll 文件来扫描 USB 端口以查找 ateml 处理器并获取其句柄。然后它可以打开 USB 连接并执行各种操作,例如读取、写入等。这一切正常,但时不时地它无法再找到任何连接的东西。发生这种情况时,我无法再通过 USB 将任何东西连接到 PC,因为 Windows 无法检测到它。然后我必须关闭 PC,并且在执行此操作时,Windows 决定冻结。
我需要深入了解它,因为我对这个 dll 或嵌入式编程都没有经验,所以我只有这些结论。处理器正在做某事导致 USB 端口锁定,或者这个 dll 文件正在做这件事。
我可以在程序中做些什么来帮助防止这种情况发生吗?
对于上传然后从这个处理器读回,有没有人知道另一种方法?
下面是一些用于扫描和打开的代码。
private static AT91BootDLL at91 = new AT91BootDLL();
private static unsafe int GetHandle()
{
// Create a dummy list for the dummy SAM-BA interface ;-)
byte* dummyName = stackalloc byte[100];
byte** dummyList = stackalloc byte*[100]; // { n1, n2, n3, n4, n5 };
for (int i = 0; i < 100; ++i)
{
dummyList[i] = dummyName;
}
// This function needs to be called before a USB connection can be opened.
at91.AT91Boot_Scan(ref *(byte*)dummyList);
// Now that the scan function has been called, we may open an USB connection.
int handle;
byte[] name = Encoding.ASCII.GetBytes("\\usb\\ARM0\x00");
at91.AT91Boot_Open(ref name[0], out handle);
return handle;
}