2009-03-04 2 views
2

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

Я пытаюсь сбросить стек, не выполняя полный сброс платы с помощью asm («RESET»).

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

ОБНОВЛЕНИЕ

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

  1. Переключение сброса штифтом к на чипе Микрочип Ethernet
  2. Вызов StackInit();
  3. вручную сбросить UDP объявить состояние машины

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

ответ

3

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

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

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

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

+0

Я попытался вызвать StackInit(), но после этого не могу вернуть свои сокеты TCP. Где вы разместили свой пустой массив StackUpperBound? в вашем основном файле или где-то в стеке. –

+0

Кроме того, по какой-либо причине вы создали свой собственный блок? (stackoverflow) –

+0

В файле компоновщика мой стек находился в 0xD00 и имел длину 0x100 байтов. Поэтому, ставя мои переменные, 0xE00 находится в верхней части стека. Я всегда даю имена любым блокам, которые я определяю, как привычку. В main() у меня есть цикл для инициализации StackUpperBound до DEADBEEF. – Robert

0

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

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

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

Смежные вопросы