2012-03-29 20 views
0

私はVxWorksで作業を始めました。私は現在、次の作業を行っています: -例外処理とメモリ管理のためのハンドルを提供するためにVxWorks上に抽象化レイヤを実装する方法は?

メモリ管理(ヌルポインタの使用を検出するなど)の例外処理を含むフレームワークを作成する必要があります。全体として、オペレーティングシステム上の抽象レイヤーのようになります。このフレームワークは、ダウンロード可能なカーネルモジュールの形で提供されます。単位テスト(DKM)もこのフレームワークから引き出されるでしょう。

私は例外ハンドラ&を自分で処理したいのですが、どうすればいいのか分かりません。

ED &特定のAPIで正しく動作するためにはRコンポーネントをカーネルイメージで設定する必要がありますが、既にカーネルスペースにあるDKMには完全なアクセス権がありませんメモリ(RAM、永続メモリ)&に直接アクセスできますか?

私の目標達成のためのガイドラインを教えていただけますか?

現在、いくつかの詳細を表示した後に例外が発生すると、タスクは停止します&モジュールのデバッグを求めるプロンプトが表示されます。その後、コアダンプを表示するために、私はedrShowコマンドを使用します。

私がしたいことは、タスクが停止した後にデバッグプロンプト&を取り除いて、明示的にコマンドを発行することなくユーザにコアダンプを表示することです。

私はedrStub.c(edrKernelFatalPolicyHandlerメソッド)を調べましたが、目的の結果を得るためにそれを操作する方法を理解できませんでした。

答えて

1

あなたが話していることは、例外メカニズムの拡張を実装したいと思っていると思います。
ED & Rは、すでに述べた条件を既に満たしています。問題のあるタスクは通常、デバッガに接続できるように中断されます。

例外のデフォルト処理が気に入らない場合は、comp/src/vxworks/edrStub.cにあるコードを変更することができます(私はそこにいると思います)。その後、致命的な例外を処理する独自の関数を実装できます。中にものを置くことについては

あなたが特定の例外に対処したい場合は、あなたがあなた自身の例外ハンドラをプラグインexcLibを使用することができますが、あなたは本当にあなたがやっているかを知りたい...

DKMの場合、最も簡単なことは、特定の機能にあらかじめ定義された関数ポインタを持たせることです。関数ポインタが設定されている場合は、その関数を呼び出します。それ以外の場合は、通常のコードを呼び出します。 DKMには、通常、関数ポインタを設定するdkmInit()関数がいくつかあります。

ので

例えば:もちろん

void regularExceptionHandler() { 
    if (__myExceptionHandler != NULL) { 
     __myExceptionHandler(); 
     return; 
    } 

、__myExceptionHandlerは、ベースのVxWorksカーネルイメージの一部である必要があります。
これはvxWorksで頻繁に使用されるパターンです。

関連する問題