我正在使用Microchip的8位微控制器上的免费TCP / IP(版本4.55)堆栈。
我正在尝试重置堆栈,而不使用asm(“RESET”)执行全板重置。
有关如何重新启动此堆栈的任何想法。
更新
我按照以下步骤重置堆栈
这似乎从我遇到的致命SPI错误中恢复过来。
答案 0 :(得分:3)
调用StackInit()。该功能重新初始化所有子模块(TCP,UDP,SMTP等)。它还会破坏你打开的所有TCP和UDP套接字,因此你必须重新打开你想要使用的套接字。
作为旁注:我遵循了Microchip论坛上的主题。我的TCP堆栈中也出现了奇怪的重置。它最终成为堆栈溢出。将一些变量放在堆栈的顶部。
#pragma udata stackoverflow = 0xE00
UInt32 StackUpperBound[8];
#pragma udata
在main()的开头初始化这些变量,并在开头放置一个断点。看看这些变量是否被覆盖。
答案 1 :(得分:0)
我完全不熟悉Microchip堆栈,但除非堆栈设计为重新启动,否则我怀疑你会成功。
如果所有缓冲区和结构都是静态分配的,那么理论上,你可以调用初始化例程来“重启”堆栈(假设它重新初始化了结构)。
如果它使用动态缓冲区(malloc),那么我相信你会失败。