J'ai une application VxWorks s'exécutant sur ARM uC.Comment déterminer pourquoi une tâche détruit, VxWorks?
D'abord permettez-moi de résumer l'application; L'application comprend une pile tierce et une application de passerelle. Nous avons implémenté une couche d'abstraction du système d'exploitation pour prendre en charge l'indépendance du système d'exploitation.
La pile sous-jacente possède sa propre fonction de contrôle de gestion de la mémoire & qui contient des blocs de mémoire dans une liste à double liaison.
Par exemple; nous n'effectuons pas directement malloc/new, free/delege. Au lieu de cela, nous appelons les routines de la couche OSA et il récupère la mémoire de l'OS et la place dans une liste puis retourne cette mémoire à l'application (routines: XXAlloc, XXFree, XXReAlloc)
Et lors de la libération de la mémoire, nous utilisons à nouveau XXFree.
En fait, ce bloc est une struct qui a
indication des numéros -Magic le début et la fin du bloc de mémoire -size que l'utilisateur a demandé attribué -size en réalité due à l'alignement question des pointeurs précédent et suivant - pointeur sur le morceau de mémoire renvoyé à l'application. lien registre qui montre où dans l'application xxAlloc est appelée.
Avec cette pile de structure de bloc peut vérifier si un bloc est corrompu ou non.
Nous avons aussi PTHREAD qui est la bibliothèque de Linux porté que nous utilisons pour -create/mettre fin à des fils (actuellement il y a 22 fils de discussion) -synchronization objets (événements, mutex ..)
Il est la tâche principale appelé par taskSpawn et plus tard cette tâche a créé d'autres threads.
c'était une description de l'application et de son interface VxWorks.
Le problème est:
l'une des tâches devient soudainement détruite par VxWorks donnant aucune information sur ce qui ne va pas. J'ai aussi un débogueur jtag et il frappe la routine taskDestoy() de VxWorks mais la pile des appels ne donne aucune information ni PC ni r14.
Je me méfie de la routine spécifique dans le code où xxAlloc énorme est fait mais le problème se produit très sporadique ne donnant aucune indication que je peux le mapper au code source.
Je pense que l'OS détecte et exception et exécute sa manipulation silencieusement.
toute aide serait grande
ce qui a trait
suggestion pour reformater la question un peu: l'énoncé du problème au début et l'information d'arrière-plan après cela. De cette façon, les lecteurs n'ont pas besoin de lire toute l'histoire pour savoir si elle correspond. – Adriaan