P4:コンパイラ動作確認
とりあえず H8OS 上で動く、シリアルポートから文字列を返すだけのプログラムを組んで動作確認をする。
#include "../h8os/syscall.h"
RAM 上のプログラムをコマンドインタープリターから実行すると動かない。.mot ファイルを良く見ると、なぜか ROM のある 0100 からデータがある。マップファイルを良く見ると BSS 領域の初期値。なぜ?
よくよく調べると、リンカのスクリプトファイルで 'rodata' となっているラベルが 'rodata.str1.1'となっている。'str1.1'ってなに?
とりあえずスクリプトファイルの rodata の後ろに rodata.str1.1 を追加してコンパイルすると。ROM 領域のデータは消えた。str1.1 か。 1.2 とかも出てくるんだろうか?
再度実行するが、まだ動かない。
念のためにと、シリアルポートのボーレート設定をコメントアウトして再挑戦。やっと動く。
----
今日見つけたページ
GNU リンカ LD の使い方
#include "../h8os/syscall.h"
int main()まずは、3664 の RAM にプログラムの転送ではまる。H8OS のコマンドインタープリターにコマンドがあるもんだと思ったらない。FDT から書き込むのかと思ったら違う (FLASH development toolkit だから当たり前か (^^;)、ドキュメントを良く見ると、RAM 転送ツールを使うと書いてあって、HP を良く見るとそういう名前のツールがある。それを使って、RAM に転送は成功。
{
// sio_speed(57600,16000000);
write_mode(SIO);
write_string("CPU is HD64F3664\n");
write_string("H8/OS is ready!!\n");
}
RAM 上のプログラムをコマンドインタープリターから実行すると動かない。.mot ファイルを良く見ると、なぜか ROM のある 0100 からデータがある。マップファイルを良く見ると BSS 領域の初期値。なぜ?
よくよく調べると、リンカのスクリプトファイルで 'rodata' となっているラベルが 'rodata.str1.1'となっている。'str1.1'ってなに?
とりあえずスクリプトファイルの rodata の後ろに rodata.str1.1 を追加してコンパイルすると。ROM 領域のデータは消えた。str1.1 か。 1.2 とかも出てくるんだろうか?
.text : {
*(.text)
*(.strings)
*(.rodata)
*(.rodata.str1.1) <---- 追加
_etext = . ;
} > ram
再度実行するが、まだ動かない。
念のためにと、シリアルポートのボーレート設定をコメントアウトして再挑戦。やっと動く。
H8/OS >exec f9c0CPU is HD64F3664なんで sio_speed がうまくいかないのかわからないが、今日はここで時間切れ。というか 30分ほどオーバー。
H8/OS is ready!!
executed.
----
今日見つけたページ
GNU リンカ LD の使い方
トラックバック(0)
このブログ記事を参照しているブログ一覧: P4:コンパイラ動作確認
このブログ記事に対するトラックバックURL: http://www.co-mind.info/cgi-bin/mt/mt-tb.cgi/1067