P4:プログラムの一部 ROM 化
プログラム全体のサイズが H8OS/3664 の RAM 領域で開発できる範囲を大きく超えることが明らかになったので、今まで作ったルーチンを少しずつ ROM 化していくことにした。
最初はサイズが小さく機能も少ない TimerA 割り込み関連の処理から。H8OS 本体のリンカスクリプトを見ながら専用のリンカスクリプトを作る。関数ベクタテーブルの ROM 化に手間取ったがとりあえずそれらしい *.mot ファイルが完成。
しかし、こういうのは最近の組み込みの範疇に入るのだろうか?いや、入るのだろうが、おそらく「プリミティブ」なごく一部な領域になるのだろう。
今日はここで time up。明日は呼び出す側のプログラム作成、ROM への書き込み、そして debug だ。
----
関数へのポインタの配列を定数化にするのに、少し悩む。
const int (*func_tbl[])(int) = {main,...};
だと、const int を返す関数のポインタへの配列になってしまう。
int (* const func_tbl[])(int) = {main,...};
正解はこちら。やっぱりポインタは難関だ。
----
gcc は(同じファイルにない)外部関数のアドレスを引っ張ってこれる。以前使っていた 8/16bit の C コンパイラではこれが出来なくて苦労した記憶がある。
----
今日、ヘキサファイルを眺めていて気付いたが、H8 の gcc はポインタが 4byte もある。コードがでかくなるわけだ。
昨日少し調べたが、H8 CPU は 16bit レジスタが 16本もある。なるほど、C で割り込みハンドラを書くとスタックを馬鹿食いたくさん使うわけだ。
最初はサイズが小さく機能も少ない TimerA 割り込み関連の処理から。H8OS 本体のリンカスクリプトを見ながら専用のリンカスクリプトを作る。関数ベクタテーブルの ROM 化に手間取ったがとりあえずそれらしい *.mot ファイルが完成。
しかし、こういうのは最近の組み込みの範疇に入るのだろうか?いや、入るのだろうが、おそらく「プリミティブ」なごく一部な領域になるのだろう。
今日はここで time up。明日は呼び出す側のプログラム作成、ROM への書き込み、そして debug だ。
----
関数へのポインタの配列を定数化にするのに、少し悩む。
const int (*func_tbl[])(int) = {main,...};
だと、const int を返す関数のポインタへの配列になってしまう。
int (* const func_tbl[])(int) = {main,...};
正解はこちら。やっぱりポインタは難関だ。
----
gcc は(同じファイルにない)外部関数のアドレスを引っ張ってこれる。以前使っていた 8/16bit の C コンパイラではこれが出来なくて苦労した記憶がある。
----
今日、ヘキサファイルを眺めていて気付いたが、H8 の gcc はポインタが 4byte もある。コードがでかくなるわけだ。
昨日少し調べたが、H8 CPU は 16bit レジスタが 16本もある。なるほど、C で割り込みハンドラを書くとスタックを
トラックバック(0)
このブログ記事を参照しているブログ一覧: P4:プログラムの一部 ROM 化
このブログ記事に対するトラックバックURL: http://www.co-mind.info/cgi-bin/mt/mt-tb.cgi/1124