090120

|



090101から、開発機のカバーをつけるとロムモニタからプログラムをロードす
る際に失敗するようになった。なんとなく理由がわかってきたので解決しまし
た。

問題はここだ。上が8個のLEDユニットで、下がポート4のコネクタ。ポート4で LEDを点灯させるように設定すると、確実に失敗する。

裏からはこんな感じ。ポートからの入力が、74HC04に入って、出力がLEDを点灯 する。ロムモニタではポート4の初期化をしてないので、デフォルトのまま入力 になっている。そうすると74HC04の入力が不定なので、発振してしまっていた 様子。
ロムモニタの最初でポート4を出力に設定して、出力を固定してやってOK。 入力ピンの処理は確実にしないとだめね。

一区切りついたところで、C++化してみることにしました。今迄もコンパイラは g++を使っていたので、libstdc++を使わないまでのC++だったのだけど。一つク ラスに変更してみたところ...libstdc++で45KBもとられた....。H8/3052はロム に512KBあるので、まぁなんとかなる(といってもロード時間がたるくなる)けれ ど、H8/TinyのH8/3664はロムは32KB。余裕で無理だ。
[c++]
    LOAD off    0x00000000 vaddr 0x0007ff4c paddr 0x0007ff4c align 2**0
         filesz 0x0000e808 memsz 0x0000e808 flags rwx
    LOAD off    0x0000e808 vaddr 0x000fe200 paddr 0x0008e754 align 2**0
         filesz 0x00000874 memsz 0x00001416 flags rw-
    LOAD off    0x0000f07c vaddr 0x000fdf10 paddr 0x000fdf10 align 2**0
         filesz 0x00000004 memsz 0x00000004 flags rw-
    LOAD off    0x0000f080 vaddr 0x000fdf40 paddr 0x000fdf40 align 2**0
         filesz 0x000000c4 memsz 0x000000c4 flags r--
  -rwxr-xr-x   1 uch  staff  190569 Jan 20 10:27 ud01.elf
  -rwxr-xr-x   1 uch  staff  177138 Jan 20 10:27 ud01.mot
  -rw-r--r--   1 uch  staff  112150 Jan 20 10:27 ud01.nm

strip
  -rwxr-xr-x   1 uch  staff   62144 Jan 20 10:30 ud01.elf


[c]
    LOAD off    0x00000000 vaddr 0x0007ff4c paddr 0x0007ff4c align 2**0
         filesz 0x00003e28 memsz 0x00003e28 flags r-x
    LOAD off    0x00003e28 vaddr 0x000fe200 paddr 0x00083d74 align 2**0
         filesz 0x000003ec memsz 0x00000d54 flags rw-
    LOAD off    0x00004214 vaddr 0x000fdf10 paddr 0x000fdf10 align 2**0
         filesz 0x00000004 memsz 0x00000004 flags rw-
    LOAD off    0x00004218 vaddr 0x000fdf40 paddr 0x000fdf40 align 2**0
         filesz 0x000000c4 memsz 0x000000c4 flags r--
  -rwxr-xr-x   1 uch  staff   30393 Jan 20 10:29 ud01.elf
  -rwxr-xr-x   1 uch  staff   48768 Jan 20 10:29 ud01.mot
  -rw-r--r--   1 uch  staff   10518 Jan 20 10:29 ud01.nm

strip
  -rwxr-xr-x   1 uch  staff   17448 Jan 20 10:31 ud01.elf
やはりカーネル部分はCで、アプリケーションのターゲットによってC++を使えれば 使う程度が落としどころか...。 libstdc++を使わない範囲の同じソースをg++とgccでコンパイルすると
[g++]
  -rw-r--r--   1 uch  staff  234030 Jan 20 14:32 ud01.dis
  -rwxr-xr-x   1 uch  staff   31452 Jan 20 14:32 ud01.elf
  -rwxr-xr-x   1 uch  staff   50448 Jan 20 14:32 ud01.mot
  -rw-r--r--   1 uch  staff   11008 Jan 20 14:32 ud01.nm
  -rwxr-xr-x   1 uch  staff   31452 Jan 20 14:32 

[gcc]
  -rw-r--r--   1 uch  staff  233440 Jan 20 14:35 ud01.dis
  -rwxr-xr-x   1 uch  staff   31100 Jan 20 14:35 ud01.elf
  -rwxr-xr-x   1 uch  staff   50394 Jan 20 14:35 ud01.mot
  -rw-r--r--   1 uch  staff   10685 Jan 20 14:35 ud01.nm
  -rwxr-xr-x   1 uch  staff   31100 Jan 20 14:35 ud01.rom.elf
  -rwxr-xr-x   1 uch  staff   48208 Jan 20 14:35 
これはそう変わらない。

DRO試作一号機のプログラムを、DRO試作二号機のテクノロジで書き直してます。 配線が違っていたりするのだけど、そこはソフトで吸収で。