2009-03-04 6 views
2

Je travaille avec la pile TCP/IP (version 4.55) libre de Microchip sur un microcontrôleur 8 bits. J'essaie de réinitialiser la pile sans effectuer une réinitialisation de la carte complète avec asm ("RESET").Puis-je réinitialiser la pile TCP/IP de Microchip sans réinitialiser la carte?

Des idées sur la façon de redémarrer cette pile.

UPDATE

réinitialiser la pile avec les étapes suivantes

  1. bascule la broche de remise à zéro sur la puce Ethernet Microchip
  2. appel StackInit();
  3. réinitialiser manuellement l'UDP annonce machine d'état

Cela semble récupérer des erreurs fatales SPI que je rencontrais.

Répondre

3

Appelez StackInit(). Cette fonction réinitialise tous les sous-modules (TCP, UDP, SMTP, etc.). Il va également taper tous les connecteurs TCP et UDP que vous avez ouverts, vous devrez donc rouvrir les sockets que vous souhaitez utiliser.

En note: j'ai suivi le fil sur le forum Microchip. Je recevais aussi d'étranges réinitialisations dans ma pile TCP. Il a fini par être un débordement de pile. Mettez des variables en haut de votre pile.

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

Initialiser ces variables au début de main() et de mettre un point d'arrêt au début. Voir si ces variables sont écrasées.

+0

J'ai essayé d'appeler StackInit(), mais je ne peux pas ramener mes sockets TCP après cela. Où avez-vous placé votre tableau vide StackUpperBound? dans votre fichier principal, ou quelque part dans la pile. –

+0

Aussi, quelle que soit la raison pour laquelle vous avez créé votre propre bloc? (stackoverflow) –

+0

Dans le fichier de l'éditeur de liens, ma pile était située à 0xD00 et avait une longueur de 0x100 octets. Donc, mettre mes variables sont 0xE00 est en haut de la pile. Je donne toujours des noms à tous les blocs que je définis comme une habitude. Dans main(), j'ai une boucle pour initialiser StackUpperBound à DEADBEEF. – Robert

0

Je ne suis absolument pas familier avec la pile Microchip, mais à moins que la pile ne soit conçue pour être redémarrée, je doute que vous réussissiez.

Si tous les tampons et structures sont alloués de manière statique, alors en théorie, vous pouvez appeler les routines d'initialisation pour "redémarrer" la pile (en supposant qu'elle effectue une réinitialisation des structures). S'il utilise des tampons dynamiques (malloc), alors je crois que vous n'auriez pas de chance.

Questions connexes