SilentCのユーザードライバーを試す前に ジャンプテーブルを作ろう [SilentC]
どうもこの環境はさっぱり使い方が判っておりません。こんな時参考にするのがウイザードが生成した設定やコードを見て、ああでもない、こうでもない、とTry & Errorを繰り返す訳ですが。フリスクさん!日本語のマニュアル用意しようよ!。
SilentCからユーザードライバーにアクセスする為には、ユーザードライバーの先頭領域にジャンプテーブルを用意しなくてはいけません。関数のアドレスの配列を用意します。勿論C言語で記述します。
この場合参考になりそうなのがexceptions.cです。ここにはリセットベクターを含む割込み処理のベクターテーブルが記述されていますので、これを参考にでっちあげます。試しにvectors.cと言う名前のファイルを作成し、以下の様に記述して適当な関数のアドレスを並べてみました。
勿論lcfファイルの変更も必要です。
MAPを見る限り、無事に配置できたみたいです。
※これが正しいやり方かどうか、まったくもって判りません。信用しない様にして下さい。
SilentCからユーザードライバーにアクセスする為には、ユーザードライバーの先頭領域にジャンプテーブルを用意しなくてはいけません。関数のアドレスの配列を用意します。勿論C言語で記述します。
この場合参考になりそうなのがexceptions.cです。ここにはリセットベクターを含む割込み処理のベクターテーブルが記述されていますので、これを参考にでっちあげます。試しにvectors.cと言う名前のファイルを作成し、以下の様に記述して適当な関数のアドレスを並べてみました。
extern void main( unsigned long argc ); extern void soft_spi_init( unsigned long argc ); extern void AdrSet( unsigned long adr ); extern void SizeSet( unsigned long size ); #pragma define_section vectortable ".vectortable" far_absolute R const __declspec(vectortable) void *jump_vectors[] = { main, soft_spi_init, AdrSet, SizeSet, };
勿論lcfファイルの変更も必要です。
.vectors : { vectors.c(.vectortable) . = ALIGN (0x4); } >> code
MAPを見る限り、無事に配置できたみたいです。
# .vectors 20000000 00000010 .vectortable jump_vectors (vectors.c) # .text 20000010 000000BC .text main (main.c) 200000CC 00000004 .text _ExitProcess (startcf.c) 200000D0 0000015E .text soft_spi_init (soft_spi.c) 2000022E 00000012 .text AdrSet (soft_spi.c) 20000240 00000012 .text SizeSet (soft_spi.c)
※これが正しいやり方かどうか、まったくもって判りません。信用しない様にして下さい。
Interface (インターフェース) 2009年 01月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/11/25
- メディア: 雑誌
2008-11-30 15:24
nice!(0)
コメント(2)
トラックバック(0)
ColdFire V2 のサンプル・プロジェクトで、 exceptions.c にある _vect 配列が実メモリ空間にマップされているのは、 Settings ダイアログの Linker - ColdFire Linker にある Force Active Symbols に _vect が記述されているからです。もし、この指定が無ければ、オブジェクトファイルには、 _vect がマップされず、消滅します。
配列の名前を変えるのなら、明示的に jump_vectors 配列を参照するか、このダイアログにシンボル名を記述する必要があると思います。
by noritan (2008-11-30 22:14)
Force Active Symbolsの中身は、何やらメッセージが出るので消してしまいました。
何か色々やってマップされるようにはなったのだけれど、やはり適当なでっち上げは駄目か!。
取り敢えずForce Active Symbolsに_jump_vectorsを記述しておきます。
by hamayan (2008-11-30 22:44)