TI中文支持网
TI专业的中文技术问题搜集分享网站

关于28377D的USB通信问题!

因为有些原因,会造成USB通信中断,需要重新初始化USB程序,这要才能继续通信,但这样却造成了内存的增加。经过测试,只要运行一次以下两条语句,电脑的内存就会增加.

TerminateDevice(hUSB);
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),
&bDriverInstalled);

HG:

你好! 你这段代码请指明出处、运行环境、问题的具体表现是什么? 

C 程序代码造成内存变化是正常情况,你需要清晰的表达到底要解决什么问题?  

因为有些原因,会造成USB通信中断,需要重新初始化USB程序,这要才能继续通信,但这样却造成了内存的增加。经过测试,只要运行一次以下两条语句,电脑的内存就会增加.

TerminateDevice(hUSB);
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),
&bDriverInstalled);

lijingheng:

回复 HG:

你好!

   代码出处:C:\ti\controlSUITE\device_support\F2837xD\v150\F2837xD_common\tools\usb_bulk_example\usb_bulk_example.c  中的254行和448行。

    运行环境:VS2012

    我根据controlSUITE提供的上位机代码和下位机代码编写了一个关于28377D的USB通信讯的上位机界面(画曲线波形)。电脑和28377D可以通过USB通信,把大量数据传回电脑。

1.电脑和DSP正常通信。

2.通信约10多秒后,电脑和DSP通信中断。

3.为了重新能通信,电脑只能通过执行以下代码初始化USB接口。28377也会重新初始化USB。(软件通过一段时间没有发送或接收成功数据为条件判断通信死掉,需要重新连接初始化)

hUSB = InitializeDevice(BULK_VID, BULK_PID, (LPGUID)&(GUID_DEVINTERFACE_TI_BULK), &bDriverInstalled);

4.电脑和28377又能正常通信。(但上位机每次执行完以上上代码,从电脑的任务管理器可以看到上位机占用内存会增加4K。我个人认为以上的语句造成了内存涉露)

我有以下建议:

你们可以通过更改以下代码测试一下,代码路径

C:\ti\controlSUITE\device_support\F2837xD\v150\F2837xD_common\tools\usb_bulk_example\usb_bulk_example.c  

每隔10秒自动运行一次以下语句    ,观看一下电脑内存

hUSB = InitializeDevice(BULK_VID, BULK_PID,(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),&bDriverInstalled);

因为有些原因,会造成USB通信中断,需要重新初始化USB程序,这要才能继续通信,但这样却造成了内存的增加。经过测试,只要运行一次以下两条语句,电脑的内存就会增加.

TerminateDevice(hUSB);
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),
&bDriverInstalled);

HG:

回复 lijingheng:

你好!  pc平台的上位机应用代码仅供参考,目的是说明功能调用,并不适合直接商用。

希望以下的解释对你有帮助,你描述的情况确实是内存泄漏。

 InitializeDevice 和 TerminateDevice 代表设备对象的正常初始化和关闭,应成对使用。

你的案例中由于各种异常,导致系统获取设备后,没有正常处理异常退出。

此处解释一下两个函数的功能: 均封装了一下DDK的API函数接口。

InitializeDevice内含 OpenDevice(), WinUsb_Initialize等;

TerminateDevice内含 WinUsb_Free,CloseHandle。

现在问题就明朗了, 系统中的资源没有释放。

希望能解决你的问题,其实这种上位机问题与28377并没有关系。

因为有些原因,会造成USB通信中断,需要重新初始化USB程序,这要才能继续通信,但这样却造成了内存的增加。经过测试,只要运行一次以下两条语句,电脑的内存就会增加.

TerminateDevice(hUSB);
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),
&bDriverInstalled);

lijingheng:

回复 HG:

你好!InitializeDevice 和 TerminateDevice 我一直是成对使用的。重新初始化之前,我都会关掉USB,即执行TerminateDevice  。但内存确实是一直增加。我清楚上位机位问题和28377无关,你们提供的PC平台上位机应用不适合商用。

TerminateDevice(hUSB); hUSB = InitializeDevice(BULK_VID, BULK_PID, (LPGUID)&(GUID_DEVINTERFACE_TI_BULK), &bDriverInstalled);

但现在的问题是TerminateDevice有问题,执行TerminateDevice(hUSB)后并没有达到释放系统内存的目的。希望TI能提供帮助。

谢谢!

因为有些原因,会造成USB通信中断,需要重新初始化USB程序,这要才能继续通信,但这样却造成了内存的增加。经过测试,只要运行一次以下两条语句,电脑的内存就会增加.

TerminateDevice(hUSB);
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),
&bDriverInstalled);

lijingheng:

回复 HG:

你好!

BOOL TerminateDevice(void){ BOOL bRetcode; BOOL bRetcode2;

bRetcode = WinUsb_Free(devInfo.winUSBHandle);

bRetcode2 = CloseHandle(devInfo.deviceHandle);

if(bRetcode & bRetcode2) { return(TRUE); } else { return(FALSE); }}

    在需要重新初始化的时候,我会先执行TerminateDevice ,然后再执行InitializeDevice。但是电脑内存还是在增加。TerminateDevice 运行后返回结果为FALSE,没有释放内存成功。如何才能够正确地释放电脑内存呢??请给我指明道路,谢谢!!

我重新初始化的时候,会运行以下程序。

TerminateDevice(hUSB); hUSB = InitializeDevice(BULK_VID, BULK_PID, (LPGUID)&(GUID_DEVINTERFACE_TI_BULK), &bDriverInstalled);

希望大神帮帮忙

因为有些原因,会造成USB通信中断,需要重新初始化USB程序,这要才能继续通信,但这样却造成了内存的增加。经过测试,只要运行一次以下两条语句,电脑的内存就会增加.

TerminateDevice(hUSB);
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),
&bDriverInstalled);

yi zhou4:

回复 lijingheng:

你好,麻烦问一下,LPGUID是什么数据类型 我目前用其他语言重新写一个USB上位机软件,但是不知道LPGUID是什么数据类型

因为有些原因,会造成USB通信中断,需要重新初始化USB程序,这要才能继续通信,但这样却造成了内存的增加。经过测试,只要运行一次以下两条语句,电脑的内存就会增加.

TerminateDevice(hUSB);
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),
&bDriverInstalled);

younger young:

回复 lijingheng:

可以留个联系方式交流下吗   最近也在做这个   

因为有些原因,会造成USB通信中断,需要重新初始化USB程序,这要才能继续通信,但这样却造成了内存的增加。经过测试,只要运行一次以下两条语句,电脑的内存就会增加.

TerminateDevice(hUSB);
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),
&bDriverInstalled);

younger young:

回复 HG:

对于DSP  28377d  要实现USB通信上位机软件   你们的软件工具包里面有这样可以互相读取交换数据的驱动吗    

因为有些原因,会造成USB通信中断,需要重新初始化USB程序,这要才能继续通信,但这样却造成了内存的增加。经过测试,只要运行一次以下两条语句,电脑的内存就会增加.

TerminateDevice(hUSB);
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),
&bDriverInstalled);

Qiang Lee:

你好,请问您是申请的28377D的样片吗?还是购买的?谢谢!

因为有些原因,会造成USB通信中断,需要重新初始化USB程序,这要才能继续通信,但这样却造成了内存的增加。经过测试,只要运行一次以下两条语句,电脑的内存就会增加.

TerminateDevice(hUSB);
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_TI_BULK),
&bDriverInstalled);

jingheng li:

回复 younger young:

lijingheng.1989@163.com

赞(0)
未经允许不得转载:TI中文支持网 » 关于28377D的USB通信问题!
分享到: 更多 (0)