代码之家  ›  专栏  ›  技术社区  ›  Justin Tanner

我可以在不重新设置板的情况下重置微芯片的TCP/IP堆栈吗?

  •  2
  • Justin Tanner  · 技术社区  · 15 年前

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

    我正在尝试重置堆栈,而不使用asm进行全板重置(“重置”)。

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

    更新

    我用以下步骤重置堆栈

    1. 将重置针切换到微芯片以太网芯片上
    2. 调用stackInit();
    3. 手动重置UDP公告状态机

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   Robert Deml    15 年前

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

    旁注:我在微芯片论坛上关注这个话题。我的TCP堆栈中也得到了奇怪的重置。最后是堆栈溢出。在堆栈顶部放置一些变量。

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

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

        2
  •  0
  •   Benoit    15 年前

    我对微芯片组完全不熟悉,但如果不重新启动芯片组,我怀疑你是否会成功。

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

    如果它使用动态缓冲区(malloc),那么我相信你会走运的。