Ich habe eine VxWorks-Anwendung, die auf ARM uC läuft.Wie ermittelt man, warum eine Aufgabe zerstört, VxWorks?
Lassen Sie mich zuerst die Anwendung zusammenfassen;
Anwendung besteht aus einem 3rd-Party-Stack und einer Gateway-Anwendung. Wir haben eine Betriebssystemabstraktionsschicht implementiert, um Betriebssystemabhängigkeiten zu unterstützen.
Der zugrunde liegende Stack verfügt über eine eigene Speicherverwaltung & Steuerfunktion, die Speicherblöcke in einer doppelt verknüpften Liste enthält.
Zum Beispiel; Wir führen nicht direkt malloc/new, free/delete aus. Stattdessen rufen wir die Routinen der OSA-Ebene auf und holen den Speicher von OS und fügen ihn in eine Liste ein (Routinen: XXAlloc, XXFree, XXReAlloc)
Und wenn wir den Speicher freigeben, verwenden wir wieder XXFree.
In der Tat ist dieser Block eine Struktur, die
magic Zahlen Anzeige der Anfang und das Ende des Speicherblocks hat -Größe, dass Benutzer -Größe in Wirklichkeit zugeordnet Verlangte aufgrund Ausrichtung vorherige und nächste Zeiger Ausgabe - Zeiger auf ein Stück Speicher, der der Anwendung zurückgegeben wird. Link-Register, das anzeigt, wo in der Anwendung xxAlloc aufgerufen wird.
Mit diesem Blockstruktur-Stack kann überprüft werden, ob ein Block beschädigt ist oder nicht.
Auch wir haben pthread-Bibliothek, die von Linux portiert wird, die wir -create verwenden/beenden Threads (derzeit sind es 22 Threads) -synchronization Objekte (Ereignisse, Mutexe ..)
Es ist Hauptaufgabe aufgerufen von taskSpawn und später erstellte diese Aufgabe andere Threads.
Dies war eine Beschreibung der Anwendung und ihrer VxWorks-Schnittstelle.
Das Problem ist:
eine der Aufgaben plötzlich von VxWorks zerstört wird keine Information über das Geben, was falsch ist. Ich habe auch einen Jtag Debugger und es trifft die VxWorks taskDestoy() Routine, aber Call-Stack gibt keine Informationen weder PC oder R14.
Ich bin verdächtige spezifische Routine in Code, wo riesige xxAlloc ist fertig, aber Problem auftritt sehr sporadisch gibt keine Ahnung, dass ich es Quellcode zuordnen kann.
Ich denke, Betriebssystem erkennt und Ausnahme und führt seine Behandlung im Hintergrund.
würde jede mögliche Hilfe
Grüße
Vorschlag, um die Frage ein wenig zu formatieren: Problemstellung am Anfang und Hintergrundinformationen danach. Auf diese Weise müssen die Leser nicht die ganze Geschichte lesen, um herauszufinden, ob sie übereinstimmt. – Adriaan