徒然日記 電子工作編でタグ「GDL」が付けられているもの
とりあえず 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 の使い方
昨日作った LCD表示プログラムを H8/OS 上のコマンドインタープリターで動くようにあれこれやってみる。
この環境は何年か前に使ったことがあるのだが、そのときは H8/OS のページにあるLinux 上で動くコンパイラを使ったので割とすんなり行ったのだが、今回は GDL と一緒にインストールした Windows 版の gcc をコマンドラインから使うのでいろいろうまくいかない。
H8/OS のサンプルプログラムの Makefile と リンカスクリプトを使ったがそのままではコンパイルできない。
あれこれやって、結局
Makefile は h8300-hms-* -> h8300-elf-*
ram3664.x は OUTPUT_FORMAT("coff-h8300") ->OUTPUT_FORMAT("elf32-h8300")
ぐらいでそれらしいヘキサ (*.MOT)ファイルを吐くようになった。
ちなみにコードサイズ自体は 0x324 byte 。H8/OS + コマンドインタープリター環境ではユーザーの使える RAM サイズは 1.5KByte 程度なので、当分はなんとかなるだろう。
----
このあとの工程は、
H/W 作成
H8/OS をインストールさせてコマンドインタープリタの動作確認
H8/OS の API を使って LCD 接続確認
自作 LCD アクセスルーチンのテスト・デバッグ
パルス幅検出部のコーディング
車両エミュレーターの作成
車両エミュレータを使ってのテスト
全体のコーディング
車両エミュレータを使ってのテスト
実車両を使って実パルスを測定
パルス入力部分の設計・実装
実車両に積んでテスト
....ずいぶんあるなぁ。一日一時間ずつやってるんだけど、何ヶ月かかるか...。
この環境は何年か前に使ったことがあるのだが、そのときは H8/OS のページにあるLinux 上で動くコンパイラを使ったので割とすんなり行ったのだが、今回は GDL と一緒にインストールした Windows 版の gcc をコマンドラインから使うのでいろいろうまくいかない。
H8/OS のサンプルプログラムの Makefile と リンカスクリプトを使ったがそのままではコンパイルできない。
あれこれやって、結局
Makefile は h8300-hms-* -> h8300-elf-*
ram3664.x は OUTPUT_FORMAT("coff-h8300") ->OUTPUT_FORMAT("elf32-h8300")
ぐらいでそれらしいヘキサ (*.MOT)ファイルを吐くようになった。
ちなみにコードサイズ自体は 0x324 byte 。H8/OS + コマンドインタープリター環境ではユーザーの使える RAM サイズは 1.5KByte 程度なので、当分はなんとかなるだろう。
----
このあとの工程は、
H/W 作成
H8/OS をインストールさせてコマンドインタープリタの動作確認
H8/OS の API を使って LCD 接続確認
自作 LCD アクセスルーチンのテスト・デバッグ
パルス幅検出部のコーディング
車両エミュレーターの作成
車両エミュレータを使ってのテスト
全体のコーディング
車両エミュレータを使ってのテスト
実車両を使って実パルスを測定
パルス入力部分の設計・実装
実車両に積んでテスト
....ずいぶんあるなぁ。一日一時間ずつやってるんだけど、何ヶ月かかるか...。