我在 8 位微控制器上使用 Microchip 的免费 TCP/IP(4.55 版)堆栈。
我正在尝试在不使用 asm("RESET") 进行全板重置的情况下重置堆栈。
关于如何重新启动此堆栈的任何想法。
更新
我通过以下步骤重置堆栈
- 将复位引脚切换到 Microchip 以太网芯片上
- 调用 StackInit();
- 手动重置 UDP 通告状态机
这似乎从我遇到的致命 SPI 错误中恢复过来。
调用 StackInit()。该函数重新初始化所有子模块(TCP、UDP、SMTP 等)。它还会破坏您打开的所有 TCP 和 UDP 套接字,因此您必须重新打开要使用的套接字。
附带说明:我关注了 Microchip 论坛上的主题。我的 TCP 堆栈中也出现了奇怪的重置。它最终成为堆栈溢出。将一些变量放在堆栈的顶部。
#pragma udata stackoverflow = 0xE00
UInt32 StackUpperBound[8];
#pragma udata
在 main() 的开头初始化这些变量,并在开头放置一个断点。查看这些变量是否被覆盖。
我对 Microchip 堆栈完全不熟悉,但除非堆栈被设计为重新启动,否则我怀疑你会成功。
如果所有缓冲区和结构都是静态分配的,那么理论上,您可以调用初始化例程来“重新启动”堆栈(假设它对结构进行了重新初始化)。
如果它使用动态缓冲区(malloc),那么我相信你会不走运。