我可以在不重置电路板的情况下重置Microchip TCP / IP堆栈吗?

时间:2009-03-04 18:50:59

标签: embedded microchip

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

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

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

更新

我按照以下步骤重置堆栈

  1. 将复位引脚切换到Microchip以太网芯片
  2. 调用StackInit();
  3. 手动重置UDP通知状态机
  4. 这似乎从我遇到的致命SPI错误中恢复过来。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

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

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

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