Могу ли я сбросить стек TCP / IP Microchip без перезагрузки платы?

StackOverflow https://stackoverflow.com/questions/611935

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Я пытаюсь сбросить стек, не выполняя полный сброс платы с помощью asm ("СБРОС").

Есть какие-нибудь идеи о том, как перезапустить этот стек.

Обновить

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

  1. Переключите вывод сброса на на микросхеме Microchip Ethernet
  2. Вызовите StackInit();
  3. Вручную сбросьте конечный автомат UDP announcement

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top