私はARM uCで動作するVxWorksアプリケーションを持っています。タスクが破壊する理由を特定する方法、VxWorks?
まず、アプリケーションを要約しましょう。
アプリケーションはサードパーティのスタックとゲートウェイアプリケーションで構成されています。 OS依存関係をサポートするオペレーティングシステム抽象化レイヤーを実装しました。
基本スタックには、メモリブロックを二重リンクリストに保持する独自のメモリ管理&制御機能があります。
たとえば、私たちは直接malloc/new、free/delegeを実行するのではなく、OSAレイヤーのルーチンを呼び出すと、OSからメモリを取得してリストに格納し、このメモリをアプリケーションに返します(ルーチン:XXAlloc、XXFree、XXReAlloc)
メモリを解放するときに、再びXXFreeを使用します。
実際にこのブロックは、そのユーザ-size開始メモリブロック の端が原因アライメントの問題前と次ポインタ に実際に -sizeを割り当て要求
-magic数字表示を有する構造体です - アプリケーションに戻されたメモリの部分へのポインタ。 xxAllocアプリケーションがどこに呼び出されたかを示すリンクレジスタ。
このブロック構造では、ブロックが破損しているかどうかを確認できます。
また、我々は我々が -create /終了スレッド(現在は22件のスレッドがあります) -synchronizationオブジェクトに使用することのLinuxから移植されたライブラリのpthreadている(イベント、ミューテックスを...)
を主なタスクがありますtaskSpawnによって呼び出され、後でこのタスクは他のスレッドを作成しました。
これは、アプリケーションとそのVxWorksインターフェイスの説明です。
問題がある:タスクの
1が突然間違っているのかについて何の情報も与えないのVxWorksによって破壊されます。 私はjtagデバッガも持っていて、VxWorksのtaskDestoy()ルーチンにヒットしますが、コールスタックはPCやr14の情報を与えません。
巨大なxxAllocが実行されているが問題が発生している特定のルーチンが疑わしいです 非常に散発的なので、ソースコードにマップすることはできません。
私はOSが検出して例外を発生し、その処理を静かに実行していると思います。
あなたのタスクが終了した場合に任意のヘルプは
よろしく
質問を再フォーマットするための提案:最初の問題文とその後の背景情報。このようにして、読者はストーリー全体を読んでそれが一致するかどうかを調べる必要はありません。 – Adriaan