This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 枚举问题:减少内存占用空间,移除主机并从RAM运行

Guru**** 2454880 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/574325/enumeration-issues-reduce-memory-footprint-removing-host-and-run-from-ram

主题中讨论的其他部件:TMS320F2.8062万

您好,

我目前正在使用USB处理产品,并且在枚举时遇到一些问题。  

最近,我已将USB库从v135更新到v151。 这有助于降低故障率,但导致了新的问题。 库源v135最初是在本地复制的,并修改了文件,将USB函数重新定位到“从ram运行”部分。 要使用v151以更简洁的方式执行此操作,我现在更愿意将.lib文件直接链接到项目,以方便将来的更新。 这样做会导致USB功能不再存在于RAM中,并且USB库的内存占用空间似乎是其容量的3倍...因此我无法再将其全部置于RAM中...

最初我认为链接器错误地包含了未使用的内容。  有关详细信息,请参见此线程。 在George Mock的帮助下,我确定了与主机模式功能相关的模块似乎包含在最终二进制输出中,而我只打算执行设备模式操作。 以下是在不尝试重定位到ram时对某些.map内容的分析:

map content

我知道我的前任已经通过从RAM运行库解决了与我所遇到的问题类似的问题。  请参阅此处。  所以我真的需要能够做到这一点(引导加载也需要更长的时间... :/)  

如何配置库或修改代码,使与主机相关的功能和任何其他不需要的模块不包括在二进制输出中?

*对于USB低层协议,哪些模块最重要,如果我不能像以前那样完全安装,最好将其重新定位到RAM中? (我想重新定位第一个usbdenum.obj和usbdhandler.obj)


目前,我的项目的最后一个版本使用库v151,该库作为.lib包含在闪存中(甚至是中断处理程序)。 经过大约40个主机重新引导周期(未关闭设备电源)后,产品在枚举时发生故障。 该器件基于TMS320F2.8062万,主机是Windows 10计算机。 我已经注意到,在这个过程中,来自USB的5V电压不会下降,因此我无法根据这个事件重置USB堆栈,而在“挂起事件”中,除了刷新缓冲区之外,还会执行更多操作,这似乎很危险...

我的实施基于“TivaWareTmUSB库用户指南”中所述的使用通用批量设备类的方法(第 2.5 .2),并且靠近控制套件中的相关示例项目(USB_DEP_BULK)。  如果 有人对如何消除这种情况有任何其他想法或线索,请告诉我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于存档,我没有找到任何解决方案来减少内存中USB库的内存占用空间,但设法找到了枚举故障的解决方案。

    首先,微控制器的基本(非USB)库中的某些函数与一些自定义函数共享相同的名称,编译器未检测到这些函数。 导致设备初始化可能不正确。

    其次,USB堆栈的某些描述符中有一个空格字符,这显然导致使用Windows 10时出现非确定性行为。 有时会遗漏射野,有时会正确交换射野。

    考虑到在这方面花费的时间,我停止了搜索更多不必要的优化。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请简要详细说明您所面临的具体问题。

    链接器不应链接在未使用的代码中。 要尝试消除这种情况,请确保您已启用优化,至少为-O2水平。

    SAL