Могу ли я сбросить стек TCP / IP Microchip без перезагрузки платы?
Вопрос
Я работаю со стеком бесплатного TCP / IP от Microchip (версия 4.55) на 8-разрядном микроконтроллере.
Я пытаюсь сбросить стек, не выполняя полный сброс платы с помощью asm ("СБРОС").
Есть какие-нибудь идеи о том, как перезапустить этот стек.
Обновить
Я сбрасываю стек с помощью следующих шагов
- Переключите вывод сброса на на микросхеме Microchip Ethernet
- Вызовите StackInit();
- Вручную сбросьте конечный автомат UDP announcement
Похоже, это позволяет оправиться от фатальных ошибок SPI, с которыми я столкнулся.
Решение
Вызовите StackInit().Эта функция повторно инициализирует все подмодули (TCP, UDP, SMTP и т.д.).Это также приведет к блокировке всех открытых вами сокетов TCP и UDP, поэтому вам придется повторно открывать сокеты, которые вы хотите использовать.
В качестве дополнительного примечания:Я следил за темой на форуме Microchip.Я также получал странные сбросы в моем стеке TCP.В итоге это привело к переполнению стека.Поместите некоторые переменные в верхнюю часть вашего стека.
#pragma udata stackoverflow = 0xE00
UInt32 StackUpperBound[8];
#pragma udata
Инициализируйте эти переменные в начале main() и поставьте точку останова в начале.Посмотрите, не перезаписываются ли эти переменные.
Другие советы
Я совершенно не знаком со стеком микрочипов, но если стек не предназначен для перезапуска, я сомневаюсь, что вы добьетесь успеха.
Если все буферы и структуры распределены статически, то теоретически вы могли бы вызвать процедуры инициализации, чтобы "перезапустить" стек (предполагая, что он выполняет повторную инициализацию структур).
Если он использует динамические буферы (malloc), то я полагаю, вам не повезло бы.