ボードをリセットせずにMicrochip TCP / IPスタックをリセットできますか?
質問
8ビットマイクロコントローラーでマイクロチップの無料のTCP / IP(バージョン4.55)スタックを使用しています。
asm(" RESET")でボード全体をリセットせずにスタックをリセットしようとしています。
このスタックを再起動する方法に関するアイデア。
更新
次の手順でスタックをリセットしました
- マイクロチップイーサネットチップ上でリセットピンを切り替えます
- StackInit()を呼び出す;
- UDPアナウンスステートマシンを手動でリセットする
これは、発生した致命的なSPIエラーから回復するようです。
解決
StackInit()を呼び出します。その関数は、すべてのサブモジュール(TCP、UDP、SMTPなど)を再初期化します。また、開いているすべてのTCPおよびUDPソケットを上書きするため、使用するソケットを再度開く必要があります。
補足として:Microchipフォーラムのスレッドをフォローしました。また、TCPスタックで奇妙なリセットが発生していました。最終的にはスタックオーバーフローになりました。いくつかの変数をスタックの一番上に置きます。
#pragma udata stackoverflow = 0xE00
UInt32 StackUpperBound[8];
#pragma udata
main()の先頭でこれらの変数を初期化し、先頭にブレークポイントを置きます。これらの変数が上書きされているかどうかを確認してください。
他のヒント
Microchipスタックについてはまったく詳しくありませんが、スタックが再起動するように設計されていない限り、成功するかどうかは疑問です。
すべてのバッファと構造が静的に割り当てられている場合、理論的には、初期化ルーチンを呼び出して「再起動」することができます。スタック(構造の再初期化を行うと仮定)。
動的バッファ(malloc)を使用している場合は、運が悪いと思われます。
所属していません StackOverflow