完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的项目是使用一个带有LAN9303的自定义板。它的目的是,网络设置(IPS+DHCP ON/OFF +主机名)可以改变,并且它打算运行几个月,没有任何重新启动。它有一个按钮,它应该重置整个网络接口并将设置返回到工厂默认值。因此,我想重新初始化堆栈,甚至进行PHY的硬件重置。对于第一次启动,来自MHC的生成代码初始化堆栈,然后启动基于伯克利API的Web服务器。为了在按钮按下后进行完全重置,我使用这样的状态机:-FixSTyStest:If(TCPIPSHSTACKSTATUS()= =就绪)然后下一个状态。-准备好:如果我有一个按钮按下事件,然后是下一个状态。-WaITyByPro改变:在5秒之后的下一个状态。-STOPH-http:Server:去初始化HTTP服务器,它使用伯克利API。下一个状态。-DEVALILIti:IF(TCPIPSISTACKSTATUS()= =就绪),然后TCPIPSISTACKE DENEXPRARIALIZE()和下一个状态-PHYRESRESE:做一个硬件PHY重置。下一个状态。-初始化:TCPIPPSSTACKILIALIALIZE()。下一个状态。- WITITY初始化:IF(TCPIPSISTACKSTATUS()= =就绪)然后下一个状态。-STARTHOSTHTPXServer:初始化使用伯克利API的HTTP服务器。到就绪状态。这是迄今为止完美的工作。甚至重复。网络下降,再次出现(我可以看到堆栈中的调试消息),在此之后Web服务器再次工作。但是,有时TCPIPSISTACKDEDIALIALIZE()在消息“堆删除失败”时失败了!,它是在TCPIPpStaskKiStaskAd()中创建的。调试显示,从TCPIPpHeAPuxIn.c返回的TyTCPIPHeAPPDELTEET()正在返回TCPIPHSTACKHEAPAPRESURIN使用。它是这样做的,因为HDCPT和GT;HEAPSTART和HDCPT和GT HeAPUn单元是0,BthdCDCP-和GT HeAPHead和HDCPT-&G. HeAPHead & Gt;单位不是0。在此之后,NexTcPipStaskIpIrimalIZE()在“堆创建失败,类型:1”时失败。我不知道它何时发生以及为什么会发生。例如,重启可能工作超过20次,然后突然失败。而且很少在第一次尝试时失败。但是,如果你试图保持Web服务器忙,或者如果网络几乎每隔5秒重启一次,就更可能发生。你知道为什么这种方法有时会失败,尽管它通常起作用吗?我忘了停止/去初始化某事还是忘记等待某个状态?----PIC32 MZ2048 EFM144使用MiHealthV2.02.00 BMPLAB V3.55 XC32 V1.42TCPIP堆栈模块(配置MHC)在定制BOADLAN9303上:堆配置默认为MHC,并使用内部堆。只有一个较大的RAM大小(81920)被赋予,并且动态分配调试被打开。我的代码不积极地使用网络,只有Web服务器和协调模块自己使用它。
以上来自于百度翻译 以下为原文 My project is using a custom board with a LAN9303. It is intended that the network settings (IPs + DHCP on/off + hostname) can be changed and also it is intended to be running for months without any restart. It has a push button, which should reset the whole network interface and return the settings to factory default. Therefore, I want to reinitialize the stack, and even do a hardware reset of the PHY. For the first start the generated code from MHC initializes the stack, and I start a Berkeley API based web server. For doing the full reset after a button press I am using a state machine like this: - FIRST_START: If (TCPIP_STACK_Status() == READY) then next state. - READY: If I had a button press event, then next state. - WAIT_BEFORE_CHANGE: after 5 seconds next state. - STOP_HTTP_SERVER: Deinitialize the HTTP server, which uses the Berkeley API. Next state. - DEINITIALIZE: If (TCPIP_STACK_Status() == READY) then TCPIP_STACK_Deinitialize() and next state. - PHY_RESET: Do a hardware PHY reset. Next state. - INITIALIZE: TCPIP_STACK_Initialize() with changed TCPIP_HOSTS_CONFIGURATION. Next state. - WAIT_INITIALIZED: If (TCPIP_STACK_Status() == READY) then next state. - START_HTTP_SERVER: Initialize the HTTP server, which uses the Berkeley API. Go to READY state. This works perfectly so far. Even repeatedly. Network goes down, and comes up again (I can see the debug messages from the stack) and after this the web server is working again. However, sometimes the TCPIP_STACK_Deinitialize() fails with the message "Heap Delete fail!", which is created in TCPIP_STACK_KillStack(). Debugging revealed that _TCPIP_HEAP_Delete() from tcpip_heap_internal.c is returning TCPIP_STACK_HEAP_RES_IN_USE. It is doing this because hDcpt->_heapStart and hDcpt->_heapUnits are 0, but hDcpt->_heapHead and hDcpt->_heapHead->units are not 0. After this, the next TCPIP_STACK_Initialize() fails with "Heap creation failed, type: 1". I don't really know when and why it happens. E.g. the restart might work for more than 20 times and then suddenly fail. And very seldom it even fails on the first attempt. But it seems to occur more likely if you try to keep the web server busy or if you do the network restarts nearly every 5 seconds. Do you have any idea, why this approach fails sometimes, although it usually seems to work? Do I forget to stop/to deinitialize something or forget to wait for a certain state? -------- PIC32MZ2048EFM144 on custom board LAN9303 using MII HARMony v2.02.00b MPLAB v3.55 XC32 v1.42 TCPIP Stack modules (configured with MHC): const TCPIP_STACK_MODULE_CONFIG TCPIP_STACK_MODULE_CONFIG_TBL [] = { {TCPIP_MODULE_IPV4, 0}, {TCPIP_MODULE_ICMP, 0}, // TCPIP_MODULE_ICMP {TCPIP_MODULE_ARP, &tcpipARPInitData}, // TCPIP_MODULE_ARP {TCPIP_MODULE_UDP, &tcpipUDPInitData}, // TCPIP_MODULE_UDP {TCPIP_MODULE_TCP, &tcpipTCPInitData}, // TCPIP_MODULE_TCP {TCPIP_MODULE_DHCP_CLIENT, &tcpipDHCPInitData}, // TCPIP_MODULE_DHCP_CLIENT {TCPIP_MODULE_ANNOUNCE, &tcpipAnnounceInitData}, // TCPIP_MODULE_ANNOUNCE {TCPIP_MODULE_DNS_CLIENT, &tcpipDNSClientInitData}, // TCPIP_MODULE_DNS_CLIENT {TCPIP_MODULE_NBNS, &tcpipNBNSInitData}, // TCPIP_MODULE_NBNS {TCPIP_MODULE_BERKELEY, &tcpipBerkeleyInitData}, // TCPIP_MODULE_BERKELEY { TCPIP_MODULE_MANAGER, &tcpipHeapConfig }, // TCPIP_MODULE_MANAGER // MAC modules {TCPIP_MODULE_MAC_PIC32INT, &tcpipMACPIC32INTInitData}, // TCPIP_MODULE_MAC_PIC32INT }; Heap Configuration is default from MHC and using an internal heap. Only a larger RAM Size (81920) was given and Dynamic allocation Debug was turned on. My code does not actively use the network, only the web server and the Harmony modules are using it on its own. |
|
相关推荐
5个回答
|
|
|
|
|
|
似乎起作用了。到目前为止,我还没有看到错误。再次感谢。我真的需要报告我的问题与MHC“独立项目”选项,因为他们总是困扰我在和谐更新。有许多问题:失败包括由于错误的目录中的文件或文件。失败是由于未记录的/隐藏的依赖关系。失败的原因包括完全不必要的。例如,只有网络相关:DrviExtEpSmithSSC9303.h复制到不同的文件夹T。ErrvvExtEpple SMSC9303.C和包含失败。以太网PHY驱动程序库在控制台系统服务库和调试系统服务库中具有秘密依赖性,这是未记录的。DRVI ExpEXSITSMC9303.H包括来自CMS处理器系统Service Labor的“St/Realths/SysSuffel.h”。绝对没有理由。
以上来自于百度翻译 以下为原文 Seems to work. So far, I haven't seen the error again. Thanks again. I really need report my issues with the MHC "Standalone Project" option, because they always annoy me during Harmony updates. There are many of those issues:
|
|
|
|
“DrviExtEpple SMSC9303.h被复制到不同的文件夹TANDRVVEXETPHYSMESC9303.C,并且包含失败。”OK,我将报告。以太网PHY驱动程序库对控制台系统服务库和调试系统服务库有秘密依赖性,这是没有记录的。这只是一些诊断。如果检测到错误,则初始化期间的消息。如果没有启用控制台和/或调试服务,则这些调用应解决空缺而不会引起任何问题。你看到不同的东西了吗?DrviExpEXSMESC9303.h包含“系统/命令/SysRealth.h”,绝对没有理由。我同意,我们将删除包含,不需要在那里。
以上来自于百度翻译 以下为原文
|
|
|
|
以太网PHY驱动程序库在控制台系统服务库和调试系统服务库中具有秘密依赖性,这是没有记录的。如果检测到错误,这些只是初始化过程中的一些诊断消息。如果没有启用控制台和/或调试服务,则这些调用应解决空缺而不会引起任何问题。你看到不同的东西了吗?这些电话并没有引起这些问题。包含在DrviEthPHy中的指令。C试图包含文件:但是如果控制台和/或调试被禁用,这些文件就不存在,因为MHC没有复制它们。
以上来自于百度翻译 以下为原文
|
|
|
|
好的,谢谢你的发现,它会被修复的。
以上来自于百度翻译 以下为原文 OK, got it. Thank you for the find, it will be fixed. |
|
|
|
只有小组成员才能发言,加入小组>>
5160 浏览 9 评论
1998 浏览 8 评论
1927 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3170 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2224 浏览 5 评论
727浏览 1评论
612浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
501浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
626浏览 0评论
524浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 22:03 , Processed in 1.335542 second(s), Total 85, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号