【发布时间】:2012-12-14 09:35:17
【问题描述】:
我正在调整一些用于通过 USB 将 .bin 文件上传到我们的产品之一的测试软件。该产品具有 Atmel AT91SAM7X256 处理器。该软件全部用c#编写,在windows XP机器上运行。
以前的程序员(不再在公司工作)使用一个名为 AT91BootDLL.dll 的 dll 文件来扫描 USB 端口以查找 ateml 处理器并获取它的句柄。然后它可以打开一个 USB 连接并执行各种操作,例如读取、写入等。这一切都很好,但它时不时地找不到任何连接的东西。发生这种情况时,我无法再通过 USB 将任何东西连接到 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;
}
【问题讨论】: