STARM マイコン基板 (3)

FM音源プログラムのソースをプロジェクトに追加し、コンパイルエラーを潰して*1コンパイルは通るようになったのですが、リンカの制限に引っかかって、オブジェクトが生成されません。
そこで、ROM 上の定数配列 (stab[ ], fnum128[ ] など) は、単なるデータなので、サイズ制限のないシステムのリンカを使って、特定の絶対アドレスに配置した状態の HEX ファイルを作成し、後でプログラム本体の HEX ファイルとマージすることにしました。
こうすれば、リンカが扱うのはプログラム部分だけになるので、制限に引っかかりにくくなります。
ただし、プログラム側に、データを配置した絶対アドレスを教えなければなりません。
SH2 用の C コンパイラでは、

#define octkey ((const unsigned char *) 0x010800)

上に示すような表現ができたのですが、ARM 用の C コンパイラでは許してもらえませんでした。
仕方がないので、アセンブラ・ディレクティブでシンボルに値を割り当て、エクスポートするだけの、下のようなソースファイル (tgtbls.s) を作って、うまく行きました。

        export  octkey
octkey  equ     0x08015800,DATA
        end

リンク後のコードサイズは約 7 Kバイトです。
現在は MIDI 入力をサポートしていないので、MIDI メッセージを受信することはなく、mididec() 関数、sysxdec() 関数などは決して呼ばれないことをリンカが検出し、自動的に削除しています。 削除されたサイズは約 2 Kバイトです。

*1:ちゃんと動くように書き換えると言うよりも、エラーが出る部分をコメントアウトするという感じです