SSブログ

SilentCのユーザードライバーを試す前に ジャンプテーブルを作ろう [SilentC]

Img_0933_s.jpgどうもこの環境はさっぱり使い方が判っておりません。こんな時参考にするのがウイザードが生成した設定やコードを見て、ああでもない、こうでもない、とTry & Errorを繰り返す訳ですが。フリスクさん!日本語のマニュアル用意しようよ!。

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月号 [雑誌]

Interface (インターフェース) 2009年 01月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/11/25
  • メディア: 雑誌



nice!(0)  コメント(2)  トラックバック(0) 

nice! 0

コメント 2

noritan

ColdFire V2 のサンプル・プロジェクトで、 exceptions.c にある _vect 配列が実メモリ空間にマップされているのは、 Settings ダイアログの Linker - ColdFire Linker にある Force Active Symbols に _vect が記述されているからです。もし、この指定が無ければ、オブジェクトファイルには、 _vect がマップされず、消滅します。

配列の名前を変えるのなら、明示的に jump_vectors 配列を参照するか、このダイアログにシンボル名を記述する必要があると思います。

by noritan (2008-11-30 22:14) 

hamayan

Force Active Symbolsの中身は、何やらメッセージが出るので消してしまいました。
何か色々やってマップされるようにはなったのだけれど、やはり適当なでっち上げは駄目か!。

取り敢えずForce Active Symbolsに_jump_vectorsを記述しておきます。

by hamayan (2008-11-30 22:44) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。