静的なデータ領域の参照アドレスが正しくなるように、こちらのリンカスクリプトを参考にして、 リンカスクリプトでbootpackのヘッダ部分を定義する方式に変更した。
tinyos_lnk.ls
OUTPUT_FORMAT("binary") ENTRY("Main") SECTIONS { .head 0x0 : { LONG(128 * 1024) /* 0 : stack+.data+heap の大きさ(4KBの倍数) */ LONG(0x54696e79) /* 4 : シグネチャ "Tiny" */ LONG(0) /* 8 : mmarea の大きさ(4KBの倍数) */ LONG(0x310000) /* 12 : スタック初期値&.data転送先 */ LONG(SIZEOF(.data)) /* 16 : .dataサイズ */ LONG(LOADADDR(.data)) /* 20 : .dataの初期値列のファイル位置 */ LONG(0xE9000000) /* 24 : 0xE9000000 */ LONG(Main - 0x20) /* 28 : エントリアドレス - 0x20 */ LONG(24 * 1024) /* 32 : heap領域(malloc領域)開始アドレス */ } .text : { *(.text) } .data 0x310000 : AT ( ADDR(.text) + SIZEOF(.text) ) { *(.data) *(.rodata*) *(.bss) } .eh_frame : { *(.eh_frame) } }
静的変数が正しく参照できなかったので、きっとdataセクションを0x310000にすれば良いのだろうなと思っていたのだけど、 単純に .data 0x310000 と書くと、作成されるファイルのサイズが大きくなってしまい、FDイメージが作成できなかった。
ATでtextセクションの後ろにくるように指定でき、イメージを小さくできた。
このリンカスクリプトにより、次の静的変数は正しく参照できるようになった。
- パレットの定義変数 static unsigned char table_rgb[16 * 3]
- フォントA static char font_A[16]
文字Aが表示できたので、今日はここまで。
0 件のコメント:
コメントを投稿