主题中讨论的其他器件:C2000WARE
您好!
我们正在64位 Windows 上开发一个 GUI 应用程序、该应用程序应使用 Visual Studio 2022中的 C++通过 USB 2.0与微控制器进行通信。 我们之前曾请求寻求有关提供64位版本的 tiusbdll 功能的帮助。 我们当前正在使用以下帖子中标记为答案的回复中共享的文件:
为了初始化通信、我们大致按照 在 utilities/tools/f2838x/usb_bulk_example.c 的 C2000Ware 版本3.02.00.00中通过调用 InitializeDevice ()设置 TIUSB_handle husb 并使用它通过适当的函数参数调用 WriteUSBPacket ()的顺序进行操作。 在本例中、这只是发送2个字节。根据我们使用 Wireshark 监视 PC 端 USB 端口的情况、这些字节会被发送、并根据监视微控制器中缓冲区的调试模式到达。
但是, 在微控制器发送任何响应之前,调用 ReadUSBPacket()以读取返回的数据会导致在 winusb.dll 调用读取操作期间出现意外的访问违规异常。winusb.dll 又被 tiusbdll.dll 调用。
由于我们确实有一个基于前一个工程用 C 语言写入的32位 tiusbdll 的有效通信协议、因此我们可以确认微控制器在接到32位协议的指示时可以发回所请求的数据、也可以在 Wireshark 中看到这一点。 ReadUSBPacket()的函数调用与我们尝试在64位版本中实现的函数调用相同,包括所有函数参数。
重新编译64位 dll-file 时发生的变化是否可能会导致读取操作无法像以前一样正常工作? 如果您需要进一步说明、请随时询问。
提前感谢您、此致。
编辑02/23/2023:我们已经进一步测试并考虑了可能需要在64位中以不同于32位的方式声明或初始化函数调用中使用的某些变量(例如关于缓冲区大小、地址类型等)。 是否可能需要更改任何类似更改才能将开关容纳 到64位?
此外,对于32位协议,安装在 Windows/system32/文件夹中的驱动程序文件 ucrtbased.dll 或 vcruntime140d.dll 是否可能必须更改或安装到其他地方?