Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Atmel处理器或AT91Boot dll是否正在破坏我的USB端口_C#_Atmel - Fatal编程技术网

C# Atmel处理器或AT91Boot dll是否正在破坏我的USB端口

C# Atmel处理器或AT91Boot dll是否正在破坏我的USB端口,c#,atmel,C#,Atmel,我正在修改一些测试软件,用于通过USB将.bin文件上传到我们的一款产品。该产品具有Atmel AT91SAM7X256处理器。该软件全部用c语言编写,并在windows XP机器上运行 以前的程序员(不再与该公司合作)使用一个名为AT91BootDLL.dll的dll文件来扫描ateml处理器的USB端口并获取其句柄。然后,它可以打开一个USB连接,并做各种事情,如读,写等,这一切都很好,但有时它再也找不到任何连接。当这种情况发生时,我无法再通过USB将任何东西连接到电脑,因为windows无

我正在修改一些测试软件,用于通过USB将.bin文件上传到我们的一款产品。该产品具有Atmel AT91SAM7X256处理器。该软件全部用c语言编写,并在windows XP机器上运行

以前的程序员(不再与该公司合作)使用一个名为AT91BootDLL.dll的dll文件来扫描ateml处理器的USB端口并获取其句柄。然后,它可以打开一个USB连接,并做各种事情,如读,写等,这一切都很好,但有时它再也找不到任何连接。当这种情况发生时,我无法再通过USB将任何东西连接到电脑,因为windows无法检测到它。然后我不得不关闭电脑,当我这样做时,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;
}
private static AT91BootDLL at91=new AT91BootDLL();
私有静态不安全int GetHandle()
{
//为虚拟SAM-BA接口创建虚拟列表;-)
字节*dummyName=stackalloc字节[100];
字节**dummyList=stackalloc字节*[100];/{n1,n2,n3,n4,n5};
对于(int i=0;i<100;++i)
{
dummyList[i]=dummyName;
}
//在打开USB连接之前,需要调用此函数。
at91.AT91Boot_扫描(参考*(字节*)dummyList);
//现在已经调用了scan函数,我们可以打开一个USB连接。
int句柄;
byte[]name=Encoding.ASCII.GetBytes(“\\usb\\ARM0\x00”);
at91.AT91Boot_打开(参考名称[0],输出手柄);
返回手柄;
}

您可以在此处下载最新的SAM-BA工具包,确保您拥有最新版本的所有内容:

但是从上面的代码来看,它基本上依赖于Atmel提供的例程。调用逻辑和/或固件中可能存在其他错误,但除非您发布完整的代码,否则我认为没有人能够帮助您。如果您不想发布,可以尝试Atmel engineering,如果您是批量客户,支持是可以的


就我个人而言,我一直使用CDC接口为AT91SAM系列编写自己的引导加载程序,将新映像从主应用程序写入外部闪存,然后设置标志并重新启动以加载它,以消除外部依赖性,但这是一个相当大的任务。

我认为不需要更多的代码,因为当软件需要句柄时,它会调用我提供的代码。正如您所看到的,返回了一个句柄,如果该句柄==0,则只会显示一个弹出窗口,说明无法检测产品。这就是问题发生时发生的情况。谢谢你提供的关于CDC的信息,我不知道它是什么,但我会用谷歌看看我能找到什么