Embedded 我可以重置Microchip';s TCP/IP堆栈而不重置板?

Embedded 我可以重置Microchip';s TCP/IP堆栈而不重置板?,embedded,microchip,Embedded,Microchip,我正在8位微控制器上使用Microchip的免费TCP/IP(版本4.55)堆栈 我试图在不使用asm进行全板重置(“重置”)的情况下重置堆栈 关于如何重新启动此堆栈的任何想法 更新 我使用以下步骤重置堆栈 将复位引脚切换至微芯片以太网芯片上的 调用StackInit() 手动重置UDP公告状态机 这似乎可以从我遇到的致命SPI错误中恢复过来。我对微芯片堆栈完全不熟悉,但除非堆栈设计为重新启动,否则我怀疑您是否会成功 如果所有的缓冲区和结构都是静态分配的,那么理论上,您可以调用初始化例程来“重新

我正在8位微控制器上使用Microchip的免费TCP/IP(版本4.55)堆栈

我试图在不使用asm进行全板重置(“重置”)的情况下重置堆栈

关于如何重新启动此堆栈的任何想法

更新

我使用以下步骤重置堆栈

  • 将复位引脚切换至微芯片以太网芯片上的
  • 调用StackInit()
  • 手动重置UDP公告状态机

  • 这似乎可以从我遇到的致命SPI错误中恢复过来。

    我对微芯片堆栈完全不熟悉,但除非堆栈设计为重新启动,否则我怀疑您是否会成功

    如果所有的缓冲区和结构都是静态分配的,那么理论上,您可以调用初始化例程来“重新启动”堆栈(假设它对结构进行了重新初始化)

    如果它使用动态缓冲区(malloc),那么我相信您会运气不佳。

    调用StackInit()。该函数将重新初始化所有子模块(TCP、UDP、SMTP等)。它还将关闭所有已打开的TCP和UDP套接字,因此必须重新打开要使用的套接字

    作为旁注:我遵循了微芯片论坛上的主题。我的TCP堆栈中也出现了奇怪的重置。结果是堆栈溢出。在堆栈顶部放置一些变量

    #pragma udata stackoverflow = 0xE00
    UInt32 StackUpperBound[8];
    #pragma udata
    

    在main()的开头初始化这些变量,并在开头放置断点。查看这些变量是否被覆盖。

    我已尝试调用StackInit(),但执行此操作后无法恢复TCP套接字。你把空白数组堆栈上限放在哪里了?在主文件中或堆栈中的某个位置。还有,您创建自己的块的原因是什么?(stackoverflow)在链接器文件中,我的堆栈位于0xD00,长度为0x100字节。因此,将变量0xE00放在堆栈的顶部。我总是给我定义的任何区块命名,这只是一种习惯。在main()中,我有一个循环将StackUpperBound初始化为DEADBEEF。