Могу ли я сбросить стек TCP / IP Microchip без перезагрузки платы? - PullRequest
2 голосов
/ 04 марта 2009

Я работаю со свободным стеком Microchip TCP / IP (версия 4.55) на 8-битном микроконтроллере.

Я пытаюсь сбросить стек без полного сброса платы с помощью asm ("RESET").

Любые идеи о том, как перезапустить этот стек.

UPDATE

Сброс стека с помощью следующих шагов

  1. Переключить контакт сброса на микросхему Ethernet-чипа
  2. Call StackInit ();
  3. Сбросить конечный автомат объявления UDP вручную

Это похоже на восстановление после фатальных ошибок SPI, с которыми я столкнулся.

Ответы [ 2 ]

3 голосов
/ 25 марта 2009

Вызов StackInit (). Эта функция повторно инициализирует все подмодули (TCP, UDP, SMTP и т. Д.). Он также закроет все открытые сокеты TCP и UDP, поэтому вам придется заново открыть сокеты, которые вы хотите использовать.

В качестве примечания: я следил за темой на форуме по микрочипам. Я также получал странные сбросы в моем стеке TCP. Это закончилось переполнением стека. Поместите некоторые переменные в верхнюю часть вашего стека.

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

Инициализируйте эти переменные в начале функции main () и установите точку останова в начале. Посмотрите, не перезаписываются ли эти переменные.

0 голосов
/ 04 марта 2009

Я совершенно не знаком со стеком микрочипов, но если стек не предназначен для перезапуска, я сомневаюсь, что у вас все получится.

Если все буферы и структуры размещены статически, то теоретически вы можете вызвать процедуры инициализации, чтобы «перезапустить» стек (предполагая, что он выполняет повторную инициализацию структур).

Если он использует динамические буферы (malloc), то, я думаю, вам не повезет.

...