PatDef.fr

Accueil du site > Electronique embarquée > FreeRTOS > lwip demo - plantage aléatoire

lwip demo - plantage aléatoire

mardi 4 septembre 2007, par patrick Deflandre

Une fois compilé et chargé la démo lwIP_Demo_Rowley_ARM7 fournit avec la version FreeRTOSv4.2.0 tout semble bien fonctionner. Mais vous aurez peut-être comme moi la désagréable surprise de constater que si vous laissé la manip sous tension pendant un moment, il arrive que le système se fige.

Si vous mettez un débogueur, vous verrez votre application plantée dans une boucle infinie de la fonction ulEMACInputLength() ; Pour y remédier il faut légèrement modifier la configuration de base de cette démo.

Par défaut, celle ci est configurée pour ne pas répondre au message broadcast. Il faut valider cette option en :

- supprimant le bit AT91C_EMAC_NBC dans le registre AT91C_BASE_EMAC->EMAC_NCFGR. (fonction prvSetupDescriptors du fichier SAM7_EMAC.c)

- supprimant le bit AT91C_EMAC_CAF de ce même registre. Ce bit permettait d’accepter toutes les trames, même celle qui n’était pas à destination de l’adresse mac de la carte.

Code avant transformation :


/* Enable the copy of data into the buffers, ignore broadcasts,
and don't copy FCS. */
AT91C_BASE_EMAC->EMAC_NCFGR |= ( AT91C_EMAC_CAF | AT91C_EMAC_NBC | AT91C_EMAC_DRFCS);

Code après transformation :


/* Enable the copy of data into the buffers, accept broadcasts, refuse frame for other mac adress
and don't copy FCS. */
AT91C_BASE_EMAC->EMAC_NCFGR |= ( AT91C_EMAC_DRFCS );

Voila, après transformation, ça marche nickel.


Suivre la vie du site RSS 2.0 | Contactez-moi | Plan du site | SPIP