SH/H8 用フラッシュライタ (21) H8ライターの書き込み制御ファイルをコンパイルする(4) ― 2010年10月25日 20時57分13秒
「SH/H8 用フラッシュライタ (18) H8ライター 0.38b3」で作成した 7045_F286_P1152.mot を shc の新しいバージョンでも作成してみようと思った。
これは以前コンパイルできることを確認済みだ。
しかし、コンパイルしてリンクしようとするとエラーでリンクできない。
以前使ったものと、バージョンが異なるのかもしれない。
今回は
SH SERIES C/C++ Compiler V.9.03.02.000
以下のように、セクションサイズの合計が制限を超えてしまうというエラーになる。
"LINK.SUB"の内容を変更して事なきを得たが困ったものだ。
以前使ったコンパイラのバージョンの時の LINK.SUB (SuperH RISC engine Standard Toolchain (V.9.0.3.0))
今回使ったコンパイラのバージョンの時の LINK.SUB (SuperH RISC engine Standard Toolchain (V.9.3.2.0))
環境: SuperH RISC engine Standard Toolchain (V.9.3.2.0)
これは以前コンパイルできることを確認済みだ。
しかし、コンパイルしてリンクしようとするとエラーでリンクできない。
以前使ったものと、バージョンが異なるのかもしれない。
今回は
SH SERIES C/C++ Compiler V.9.03.02.000
以下のように、セクションサイズの合計が制限を超えてしまうというエラーになる。
Optimizing Linkage Editor V.9.05.01.000 Copyright (C) 1989,2008 Renesas Technology Corp. and Renesas Solutions Corp. All rights reserved. SentinelRMS (C) 1989-2006 SafeNet, Inc. All rights reserved. Software license problem: Duration of Trial License of UNKNOWN is exhausted. (37) ** L3430 (F) The total section size exceeded the limit Optimizing Linkage Editor Abortsubcommand の解釈が変わってしまったようだ。
"LINK.SUB"の内容を変更して事なきを得たが困ったものだ。
以前使ったコンパイラのバージョンの時の LINK.SUB (SuperH RISC engine Standard Toolchain (V.9.0.3.0))
OUTPUT 7045_v INPUT 7045_v LIST FORM stype START P,B/0fffff000 EXIT
今回使ったコンパイラのバージョンの時の LINK.SUB (SuperH RISC engine Standard Toolchain (V.9.3.2.0))
INPUT 7045_V.obj list START P,B/0fffff000 OUTPUT 7045_v.abs end INPUT 7045_V.abs FORM stype OUTPUT 7045_v.mot EXIT
環境: SuperH RISC engine Standard Toolchain (V.9.3.2.0)
SH/H8 用フラッシュライタ (20) H8ライター 0.38b3 ― 2010年10月24日 21時02分02秒
H8ライターのバージョンが上がっていた。
「USB <-> シリアル変換ケーブルを使用した場合、転送が遅かったのを修正」
ということなので試してみたくなった。
測定条件
CPU基板 AKI-SH2/7045F
ファイルサイズ mot file 176,166byte
シリアルポート AKI/USB-RS232
時間計測はストップウォッチ
これは驚きだ。
ここまで早くなるなんて...
h8flush を抜いて最速になってしまった。
7045_F286_P1152.mot (7045_F286_P384.MOTのボーレートだけを115200に変更)
参照: H8ライター + H8工作 + PIC工作
「USB <-> シリアル変換ケーブルを使用した場合、転送が遅かったのを修正」
ということなので試してみたくなった。
測定条件
CPU基板 AKI-SH2/7045F
ファイルサイズ mot file 176,166byte
シリアルポート AKI/USB-RS232
時間計測はストップウォッチ
H8Writer 0.38b3 23.68秒 参考までに h8flush 3.7 27.53秒 fw 2.6 46.03秒 fdt 4.02 78.40秒 H8Write Turbo 2.2 82.94秒 H8Writer 0.36 83.72秒
これは驚きだ。
ここまで早くなるなんて...
h8flush を抜いて最速になってしまった。
7045_F286_P1152.mot (7045_F286_P384.MOTのボーレートだけを115200に変更)
参照: H8ライター + H8工作 + PIC工作
FRK-SH2A (8) SHC vs gcc (2) ― 2010年05月30日 18時30分21秒
知人に教わった確率で円周率を求めるモンテカルロ法を用いて SH2A-FPU を評価してみる。
プログラムは以下の通り。
CPU は:SH7262 (FRK-SH2A)
コンパイラ: SuperH RISC engine C/C++ Compiler (V.9.03.02)
コンパイラ: KPIT GNUSH v0601
コンパイラ: KPIT GNUSH v1001
ループ回数: 10000000 回
FPU の効果はよく分かる。しかし、これまたショックな結果。
GCC おそーい!!
0601 はFPUが使えないのか?
ちなみに、パソコンでやると 1.44秒
パソコンは Intel Celeron 1.5GHz
コンパイラは gcc
プログラムは以下の通り。
CPU は:SH7262 (FRK-SH2A)
コンパイラ: SuperH RISC engine C/C++ Compiler (V.9.03.02)
コンパイラ: KPIT GNUSH v0601
コンパイラ: KPIT GNUSH v1001
ループ回数: 10000000 回
shc 932 FPU 31.87 秒 shc 932 NOFPU 441.24 秒 gcc 0601 FPU . 動かない gcc 0601 NOFPU 1863.0 秒 gcc 1001 FPU 190.0 秒 gcc 1001 NOFPU 1796.0 秒
FPU の効果はよく分かる。しかし、これまたショックな結果。
GCC おそーい!!
0601 はFPUが使えないのか?
ちなみに、パソコンでやると 1.44秒
パソコンは Intel Celeron 1.5GHz
コンパイラは gcc
FRK-SH2A (7) 問題点 番外編 (3) ― 2010年05月29日 13時31分15秒
不具合対策をやってみようという人のために
ちょっと注意点を
ショットキダイオードの極性を間違えると永久に動かない基板になってしまいます。
極性を間違えないよう十分注意してください。
また、改造をお勧めしているわけではありません。
ここに示すのはショットキダイオードを使う場合の最終案です。
最初のテストでは D3 と D4 しか使いませんでしたが D1 を加えれば完璧でしょう。
D2 はなくても大丈夫です。
D4 は一見なくてもいいように思えますが ISL9021 の場合必ず必要です。
これが無いとインターシルが言うところの reverse current protection が働いてしまいます。
ご健闘をお祈りします。
ちょっと注意点を
ショットキダイオードの極性を間違えると永久に動かない基板になってしまいます。
極性を間違えないよう十分注意してください。
また、改造をお勧めしているわけではありません。
ここに示すのはショットキダイオードを使う場合の最終案です。
最初のテストでは D3 と D4 しか使いませんでしたが D1 を加えれば完璧でしょう。
D2 はなくても大丈夫です。
D4 は一見なくてもいいように思えますが ISL9021 の場合必ず必要です。
これが無いとインターシルが言うところの reverse current protection が働いてしまいます。
ご健闘をお祈りします。
FRK-SH2A (8) SHC vs gcc (1) ― 2010年05月21日 21時30分16秒
特に目的があった訳ではない。何気なく gcc のソフトをそのまま shc でコンパイルして動かしてみた。
ソースは割り込みを使わず雑誌のサンプルをループの中に入れただけ
我が目を疑いもう一度 gcc で動かした。
gcc で作ったソフトのほうが2倍ぐらい時間がかかっている。
今まで長らく gcc を愛用してきたので目で見て分かる違いにはちょっとショックだ。
さて、今後どうしよう。
環境
FRK-SH2A +
SHC: SuperH RISC engine C/C++ Compiler (V.9.03.02)
GCC: KPIT GNUSH v0601
ソースは割り込みを使わず雑誌のサンプルをループの中に入れただけ
while(1){ for(i=0;i<0x50000;i++); g_led_onoff ^= 1; if(g_led_onoff == 0){ led_on(); }else{ led_off(); } }LED の点滅速度がまったく違う。
我が目を疑いもう一度 gcc で動かした。
gcc で作ったソフトのほうが2倍ぐらい時間がかかっている。
今まで長らく gcc を愛用してきたので目で見て分かる違いにはちょっとショックだ。
さて、今後どうしよう。
環境
FRK-SH2A +
SHC: SuperH RISC engine C/C++ Compiler (V.9.03.02)
GCC: KPIT GNUSH v0601
FRK-SH2A (7) 問題点 番外編 (2) ― 2010年05月21日 21時20分22秒
こういう不具合に遭遇している人がいないかweb上を探してみたが見つからない。
インターフェースの発行部数が13000として、そのうち半分の基板に電源を入れたとする。
6500枚もあれば私と同じような現象に遭う人が何人かいても不思議ではないはずだが?
まあ、6500枚のうち2枚が不良品でその2枚を私が持っているという事か。
さて、雑誌のうたい文句は
「SH-2Aマイコン基板は、追加部品&はんだ付け不要で、USBケーブル1本ですぐにホスト・パソコンとCPU基板を実機接続することが可能です。」
ということであったが、このお約束を破ってしまうことになった。
あ!前回の修正でも破っているのか。
では対策その2
JPP1 にジャンパピンを半田付けする。
もうすでに取り付けていれば手間はかからない。
これであの問題の対策になるの?
はい、そのとおり。
根本的な解決方法ではないが、これでも起動は100% (大丈夫か?100%と言って、3回試しただけなのに...)
どのように使うかというと
1.常時 JPP1 にジャンパソケットを挿入しておく。
2.USB コネクタを接続する。(電源ON)
3.JPP1 のジャンパソケットを外す。(リセット解除)
4.”ピコ~ン”の音と共に仮想COMポートが起動。
これだけ。(少し手間だけどね!)
ただし、順番を間違えるとだめだよ!
結局のところ、どこかで放電してやればいいんだよね。
従って、JPP1 である必要は無い。
どこでもよいはずだ。
というわけで対策その3
抵抗で放電してしまえ!作戦。
こちらの方が簡単かな?いや目立たないだけか。
上記のように手順を順守する必要が無い。
でもチップ抵抗が2個必要?いやR1だけでよいかも知れない。
抵抗はC14の上に3.3kを小亀のように乗せてやろう。
もうひとつ、C39もしくはC43の上に1.2kを小亀のように乗せる。
乗せただけではだめなので半田でくっつけてね。
もちろん場所はどこでもよいのでコンデンサの部分にこだわらなくてよい。
2、3 どちらの対策をやっても効果は100%のはず。
もうひとつ挙げておこうか。
対策その4
以下の基板を接続する。
CQ-BBEL
CQBB-IMG
CQBB100A
CQBB100B
CQBB-200
これは試していない。
またどの基板が適合するのかよく分からない。
でもこれらを接続すればOKのはず。
インターフェースの発行部数が13000として、そのうち半分の基板に電源を入れたとする。
6500枚もあれば私と同じような現象に遭う人が何人かいても不思議ではないはずだが?
まあ、6500枚のうち2枚が不良品でその2枚を私が持っているという事か。
さて、雑誌のうたい文句は
「SH-2Aマイコン基板は、追加部品&はんだ付け不要で、USBケーブル1本ですぐにホスト・パソコンとCPU基板を実機接続することが可能です。」
ということであったが、このお約束を破ってしまうことになった。
あ!前回の修正でも破っているのか。
では対策その2
JPP1 にジャンパピンを半田付けする。
もうすでに取り付けていれば手間はかからない。
これであの問題の対策になるの?
はい、そのとおり。
根本的な解決方法ではないが、これでも起動は100% (大丈夫か?100%と言って、3回試しただけなのに...)
どのように使うかというと
1.常時 JPP1 にジャンパソケットを挿入しておく。
2.USB コネクタを接続する。(電源ON)
3.JPP1 のジャンパソケットを外す。(リセット解除)
4.”ピコ~ン”の音と共に仮想COMポートが起動。
これだけ。(少し手間だけどね!)
ただし、順番を間違えるとだめだよ!
結局のところ、どこかで放電してやればいいんだよね。
従って、JPP1 である必要は無い。
どこでもよいはずだ。
というわけで対策その3
抵抗で放電してしまえ!作戦。
こちらの方が簡単かな?いや目立たないだけか。
上記のように手順を順守する必要が無い。
でもチップ抵抗が2個必要?いやR1だけでよいかも知れない。
抵抗はC14の上に3.3kを小亀のように乗せてやろう。
もうひとつ、C39もしくはC43の上に1.2kを小亀のように乗せる。
乗せただけではだめなので半田でくっつけてね。
もちろん場所はどこでもよいのでコンデンサの部分にこだわらなくてよい。
2、3 どちらの対策をやっても効果は100%のはず。
もうひとつ挙げておこうか。
対策その4
以下の基板を接続する。
CQ-BBEL
CQBB-IMG
CQBB100A
CQBB100B
CQBB-200
これは試していない。
またどの基板が適合するのかよく分からない。
でもこれらを接続すればOKのはず。
FRK-SH2A (7) 問題点 番外編 (1) ― 2010年05月17日 22時42分43秒
実を言うとこの私、不覚にも FRK-SH2A を二枚買ってしまったのだ。
一枚かって様子を見、必要であればもう一枚買えばよかった。
今となっては遅いんだけど...
そこで問題なのは修正のためのショットキダイオード
もう手持ちがない。
あったとしても、あの半田付けをもう一度やるのはいやだ。
手間もお金もかけたくない。
というわけで、二枚目は別の方法で解決することにする。
そういえば最近インターフェースやトランジスタ技術にマイコンが付属することが時々ある。
今回のインターフェースもそうだが、ハードウェアもソフトウェアも動いたり動かなかったり。
でも、ぜんぜん不思議に思わなかったし、怒りもこみ上げてこない。
なぜか自然で当然のことのように思えた。
執筆者のレベルからしてこんなもんだろうというあきらめが最初からあるためだろう。
しかし本来、技術雑誌の役割とは「こうあるべきだ」といった方向性と、ある種の意外性をもってリーダーシップ的な存在となるべきではないかと思う。
一度、プロのエンジニアが設計したマイコン基板を見てみたい。
一枚かって様子を見、必要であればもう一枚買えばよかった。
今となっては遅いんだけど...
そこで問題なのは修正のためのショットキダイオード
もう手持ちがない。
あったとしても、あの半田付けをもう一度やるのはいやだ。
手間もお金もかけたくない。
というわけで、二枚目は別の方法で解決することにする。
そういえば最近インターフェースやトランジスタ技術にマイコンが付属することが時々ある。
今回のインターフェースもそうだが、ハードウェアもソフトウェアも動いたり動かなかったり。
でも、ぜんぜん不思議に思わなかったし、怒りもこみ上げてこない。
なぜか自然で当然のことのように思えた。
執筆者のレベルからしてこんなもんだろうというあきらめが最初からあるためだろう。
しかし本来、技術雑誌の役割とは「こうあるべきだ」といった方向性と、ある種の意外性をもってリーダーシップ的な存在となるべきではないかと思う。
一度、プロのエンジニアが設計したマイコン基板を見てみたい。
FRK-SH2A (6) 修正後はほぼ順調 ― 2010年05月11日 22時54分56秒
FRK-SH2A は、修正後順調に動いてはいるが、きわめて使い勝手の悪いものになっているのが残念だ。
高性能の CPU ということで期待が大きかっただけに、設計のまずさが目立つのかもしれない。
FRK-SH2A の設計者も今回の失敗にくじけずハードウェアの基本から学びなおしてほしいものだ。
電源周りは特にね
高性能の CPU ということで期待が大きかっただけに、設計のまずさが目立つのかもしれない。
FRK-SH2A の設計者も今回の失敗にくじけずハードウェアの基本から学びなおしてほしいものだ。
電源周りは特にね
FRK-SH2A (5) 問題点 (4) ― 2010年05月08日 19時35分48秒
付属SH-2Aマイコン基板(FRK-SH2A)の解決していない問題点、残りは不明なデバイスだ。
●不明なデバイスとなり、仮想 COMPORT が起動しない場合がある。
これがどういうわけか再現しなくなった。
ISL9021 の対策を行ってから一度も出てこない。
因果関係はよくわからないが、解決したということにしよう。
●不明なデバイスとなり、仮想 COMPORT が起動しない場合がある。
これがどういうわけか再現しなくなった。
ISL9021 の対策を行ってから一度も出てこない。
因果関係はよくわからないが、解決したということにしよう。
FRK-SH2A (5) 問題点 (3) ― 2010年05月08日 09時23分15秒
付属SH-2Aマイコン基板(FRK-SH2A)の解決していない問題点、次は割り込みだ。
●KPIT GNUSH v1001 の割り込み処理がうまくいかない。
これについては重要なことを見落としていた。
インターフェースの記事によると
「シリアル接続HEWモニタは、ダウンロードするユーザ・プログラムがレジスタバンクをイネーブルに設定しなくても、すでにイネーブル状態で動作しているので、割り込みが発生するとレジスタセットが切り替わって割り込み処理プログラムが実行されます。よって、割り込み処理から戻るところで、レジスタをもとに戻す命令を埋め込まないと、割り込み処理から正常に復帰できません。」
ということだ。
つまり、FRK-SH2A をシリアルモニタで使う場合、レジスタバンクを使わないならディセーブルにしなければならない。
INTC.IBNR.WORD = 0x0000;
を追加して確かめる。
割り込みも問題なく動く。
これで、お気に入りの KPIT GNUSH v0601 も継続して使えそうだ。
●KPIT GNUSH v1001 の割り込み処理がうまくいかない。
これについては重要なことを見落としていた。
インターフェースの記事によると
「シリアル接続HEWモニタは、ダウンロードするユーザ・プログラムがレジスタバンクをイネーブルに設定しなくても、すでにイネーブル状態で動作しているので、割り込みが発生するとレジスタセットが切り替わって割り込み処理プログラムが実行されます。よって、割り込み処理から戻るところで、レジスタをもとに戻す命令を埋め込まないと、割り込み処理から正常に復帰できません。」
ということだ。
つまり、FRK-SH2A をシリアルモニタで使う場合、レジスタバンクを使わないならディセーブルにしなければならない。
INTC.IBNR.WORD = 0x0000;
を追加して確かめる。
割り込みも問題なく動く。
これで、お気に入りの KPIT GNUSH v0601 も継続して使えそうだ。
最近のコメント