XP で MinGW GCC ツールチェーンを、XP の「民間」プロセスで許可されている仮想メモリ アドレス空間を超える高メモリ (>0xFFFF0000) にアクセスする組み込みプロジェクトのベンダー コードで使用しようとしています。
例外の次の命令で実行を続行できるようにする、つまり無視する何らかの方法でメモリアクセス例外を自分で処理したいと考えています。MinGWでそれを行う方法はありますか? またはMSツールチェーンで?
したがって、非常に単純化された図は次のとおりです。
/////////////
// MyFile.c
MyFunc(){
VendorFunc_A();
}
/////////////////
// VendorFile.c
VendorFunc_A(){
VendorFunc_DoSomeDesirableSideEffect();
VendorFunc_B();
VendorFunc_DoSomeMoreGoodStuff();
}
VendorFunc_B(){
int *pHW_Reg = 0xFFFF0000;
*pHW_Reg = 1; // Mem Access EXCEPTION HERE
return(0); // I want to continue here
}
詳細: AVR32-gcc ツールチェーンを使用して、freeRTOS を備えた Atmel AVR32 プラットフォームで組み込みプロジェクトを開発しています。ハードウェア (および低速の avr32 シミュレーター) に依存しない高レベルのアプリケーション コードを開発/デバッグすることが望ましいです。さまざまな gcc、makefile、およびマクロ トリックにより、Avr32/freeRTOS プロジェクトを MinGW/Win32 freeRTOS ポート環境でビルドし、eclipse/gdb でデバッグできます。ただし、(ベンダーが提供する) Avr32 コードでの高メモリー HW アクセスは、MinGW exe をクラッシュさせます (メモリー アクセス例外が原因で)。
私はこれらのアプローチのいくつかの組み合わせを考えています:
1) SW でアクセス例外を管理します。理想的には一種の HW シミュレーターを作成したいのですが、それは難しく、危険なアセンブリ コードが必要になると思います。多くの例外はおそらく無視できます。
2) Avr32 ヘッダー ファイルの変更されたコピーを作成して、HW レジスタ #defines をユーザー プロセス アドレス空間に再配置します (そして、仮想メモリ空間のそれらの領域をコミットするいくつかの構造体とリンカー セクションを作成します)。
3) 「実際の」HW ターゲット コードでのコード クラフトを最小限に抑えるために、高メモリ/HW アクセス、または代わりにより多くのマクロ トリックをもたらす関数呼び出しの条件付きコンパイル。(このプロジェクトには他の開発者がいます。)
提案や役立つリンクをいただければ幸いです。
このページは正しい方向に進んでいますが、非常に複雑に思えます。また、避けたい C++ です。しかし、他の提案がなければ、まだ試してみるかもしれません. http://www.programmingunlimited.net/siteexec/content.cgi?page=mingw-seh