完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我计划对我继续看到的一些问题做一些协调。很多我都能纠正,但我决定在这里分享,因为它们可能对其他人有用(而且因为我已经厌倦了必须把我们使用的每个新版本的和谐都固定某些东西)。我制作几个线程仅仅是因为一个线程将绝对庞大。这个线程属于HARMony的TCP/IP堆栈(主要是FTP)。这样做会使一些XML没有根错误出现时,我试图张贴。有没有合适的解决办法?Trace/TCP/IP协议栈确实令人印象深刻。我们自己的测试表明,它比旧的MLA栈更快、更可靠。但是,我添加了一些内容来帮助我们解决,特别是FTP。我可能应该对此做一个单独的线程,但我真的不知道在运行时而不是在MHC中应用TCP/IP初始化设置的最佳方法。我们存储IP地址、掩码和一些其他信息,例如DHCP客户端是否应该运行到机载EEPROM中。我们在MHC中设置默认值,然后希望能够从EEPROM读取设置并基于此修改堆栈设置。现在,我们现在修改和声文件,以提供一个自定义的TCP/IP堆栈init函数,该函数由SysIsIrimalIZE()调用。我们还从TCPIP_NETWORK_CONFIG和TCPIP_STACK_MODULE_CONFIG中删除“const”限定符,以便在调用真正的TCPIP_STACK_Initialize()之前在自定义init函数中修改它们。根据我所理解的,MHC有一个图形库的堆估计器。请为TCP/IP堆栈添加类似的内容。如果TCP/IP堆栈的堆估计器没有发生,那么至少提供用于获取TCP/IP堆的“高水印”的功能;也就是说,让我们看看最大的总分配是什么。我设法将它添加到内部堆(稍后我可以邮寄代码),至少有助于检查是否分配了足够的堆。请添加对FTP的“DELE”和“NOOP”命令的支持。如果需要,“DELE”支持可以是MHC选项。注意,这将需要在“tcpip/src/./sys_fs_wrapper.c”中设置文件删除包装函数。函数TCPIP_FTP_ServerInitialize()应该初始化FTP描述符的文件句柄。函数TCPIP_FTP_ServerProcess()应该确保如果在传输过程中连接已关闭,则关闭连接对象的文件描述符。否则,您将面临无法启动新传输的风险,因为文件句柄悬空打开(是的,我遇到过这种情况)。如果连接超时,相同的TCPIP_FTP_ServerProcess()函数也应该将FTP命令状态设置为TCPIP_FTP_CMD_SM_IDLE。我不记得为什么我必须进行此修复,因为我很久以前就进行了此修复,但我认为省略此操作会导致超时后无法重新连接。TCPIP_FTP_FileGet()和TCPIP_FTP_FileGet()中的成功传输应该重置FTP活动计时器,以便长时间传输不会导致重新连接。连接不及时。
|
|
相关推荐
5个回答
|
|
|
很高兴听到这个消息,谢谢你的更新!嗯,听起来现在的方法是修改“StalgIn I.C”来适应我们的需要。对吗?那当然是有道理的。我之所以着手修改用于生成“system_init.c”的模板,仅仅是因为我们有多个项目,而且在一个地方制作mod比在每个项目中制作更容易。我真的很喜欢这样做,因为它需要很多修改FTL文件。将来我可能要做的就是在MHC中添加一个选项,简单地不调用TCPIP_STACK_Initialize(),然后用自己的设置自己调用它。一件好事是,它看起来像是堆栈复制了设置,所以我可以总是把我需要的设置复制到堆栈中并在那里修改它们。理论上,人们可以在调用TCPIP_STACK_Initialize()之后立即更改设置,但是堆栈会阻止您执行chan很多事情直到它处于“准备”状态。但是,文档说一些设置,比如IP地址,在堆栈运行时不应该改变,这样无论如何都不能工作。也许我记错了,但是这些函数返回了当前的堆统计信息,对吧?如果是这样的话,这可能不会描绘整个画面,就像你在下面用估计器建议的那样。我实现了一个“高水印”函数,它将返回自堆栈启动以来使用的最大堆空间。这实际上给出了一个相当好的画面,说明人们可以期望什么,尽管不可否认,只有当许多可用的插座在某个时间点被使用过(例如,如果分配5个插座,这无济于事,但是在检查水印之前只使用3)。在MHC中,用户提供插座的数量。为UDP、TCP等分配。用户还提供这些套接字的默认缓冲区大小以及要使用的MAC描述符的数量(对于PIC32内部MAC)。如果您使用TCP、UDP等工具,那么这个信息至少可以非常接近最坏情况下的堆要求。对于动态使用(比如MAC补足内容)和MAC缓冲区,您必须添加额外的内容,但是看起来您很接近。显然,如果用户喜欢动态地重新调整缓冲区大小,那么这就超出了窗口。
|
|
|
|
|
|
我想你修改SythyIn.c的方法有很多意义。这就是我的想法。但我理解FTL文件在处理多个项目时的修改。也许最好的方法是建议防止MHC生成对堆栈init的调用(或者为此可能需要的任何模块)。这是灵活的,并且易于应用于多个项目。-我认为TCP/IP中的内部堆已经有了一些关于当前分配空间的信息。保持运行时间最小阈值应该是相当简单的。我将把它添加到待办事项列表中,这是一个很好的建议。在启用堆跟踪时,您还可以使用TecCPIPHeAPTraceEngEnter。这将给你每个模块的水印,甚至更好的粒度。我知道它在API中没有公开,它是内部的,但是相当容易使用。-静态堆估计器:是的,很容易根据套接字的数量及其相关的缓冲区等进行一些简单的计算。根据需要重新分配/释放,即取决于流量。因此,我不确定该计算的实用性……实际上可能相当令人困惑,导致有人认为应该有大量的堆空间可用,而实际上没有。如果添加了这样一个事实,即套接字本身可以在运行时更改缓冲区,则图片变得相当复杂。不管怎样,我会想出一些更好的方法来解决这个问题。谢谢你的建议。
|
|
|
|
|
|
我确实怀疑,一旦你把这个特性添加到TCPIP栈中,你会在这里得到请求,为其他中间件模块添加一个类似的特性。考虑到这一点,我们应该能够适应你决定去哪个方向。有一个例子展示了如何让用户init函数对那些没有涉足和谐模板的人来说是有帮助的。回想一下,我可能会把“StaskIn in.c”中的初始化结构保留为“const”,让用户将他们需要的任何部分复制到堆栈上。这意味着RAM只会暂时被堆栈所使用,而不是在内存中无所作为的结构。结构至少不是那么大,至少是这样。我实际上从来没有看过跟踪输入的东西。这可能是更有用的,所以谢谢你让我知道。作为参考,这里是我如何处理内部堆的水印。我从未向池和外部堆添加支持,所以那些“TCPIPpHeAPuHyWestMARK()”函数只返回0。还有一个初始化代码,在启动时将水印设置为0是不值得展示的。我已经研究了TX包是如何分配的,至少对于TCP是这样的,我认为栈使用了一个基本上是“零拷贝”的方案,其中MAC描述符指向TCP有效载荷。直接在输出缓冲区中。假设您需要为TCP/IP报头分配空间,但这并不多。我还认为每个套接字(同样地,至少对于TCP)只允许一个包一次排队(_TcpvXAllocateTxPacketIfQueued()?)对于每个套接字,虽然我在那一点上可能是错的。在堆估计中添加一个“模糊因子”来估计动态数据比如包分配和运行时缓冲区大小是否可以接受的折衷?想要真正使用动态调整大小或动态MAC补充内容的用户(完全公开:我们不使用这两种方法)可能会增加模糊因子。估计堆用户需要的数量已经是一个猜谜游戏,这将有助于我们做出更好的猜测。
|
|
|
|
|
|
将TCP/IP的高水印API添加到内部开发列表中。您提出的代码使用堆保持的现有变量,这与我的想法非常接近。我必须看看在池堆中如何支持该特性,在池堆中计算每个桶/槽是合理的。-关于TCP的分组分配,由于TCP状态机需要保存数据直到被确认,所以它是如何工作的。这里关注的是UDP和ICMP传输,以及在运行时补充的MAC RX缓冲区。如前所述,如果可能的话,我们将设法找到一种方法来支持这一点。
|
|
|
|
|
|
谢谢你的回复!我期待着看到你们提出的建议。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1123浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 01:07 , Processed in 0.919267 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1128