因为有些原因,会造成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