2

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

我正在尝试在不使用 asm("RESET") 进行全板重置的情况下重置堆栈。

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

更新

我通过以下步骤重置堆栈

  1. 将复位引脚切换到 Microchip 以太网芯片上
  2. 调用 StackInit();
  3. 手动重置 UDP 通告状态机

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

4

2 回答 2

3

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

附带说明:我关注了 Microchip 论坛上的主题。我的 TCP 堆栈中也出现了奇怪的重置。它最终成为堆栈溢出。将一些变量放在堆栈的顶部。

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

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

于 2009-03-25T18:30:12.483 回答
0

我对 Microchip 堆栈完全不熟悉,但除非堆栈被设计为重新启动,否则我怀疑你会成功。

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

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

于 2009-03-04T20:17:07.877 回答