お世話になっています。hamayan です。
Katsushi> hamayan様,suzuki様,
Katsushi>
Katsushi> %を使わず,”count & 0x3f”とすることですが,
Katsushi> 最初の投稿にありますように,次のリストを
Katsushi>
Katsushi> void interrupt_timer0(void)
Katsushi> {
Katsushi> DA.DR0=dat[ratio][ampR][count%divNum];
Katsushi> DA.DR1=dat[ratio][ampL][count%divNum];
Katsushi> count++;
Katsushi> }
Katsushi>
Katsushi> 次のようにすでに変更しています。ビット演算とポイント演算で
Katsushi> これだけでも劇的に早くなりました。
すいません、先頭の部分しか読んでいませんでしたね。
Katsushi> void interrupt_timer0(void)
Katsushi> {
Katsushi> register unsigned a= (count&(divNum-1));/*=count%divNum 高速化*/
Katsushi> DA.DR0=*(adrR+a);/*右足,=adrR[count%divNum];*/
Katsushi> DA.DR1=*(adrL+a);/*左足*/
Katsushi> count++;
Katsushi> }
Katsushi>
Katsushi> でも,これにIOポートのビット出力を2行加えただけで,もう間に合いません。
Katsushi> 巨大な配列を使わない,改良前のプログラムでは,
Katsushi> 条件分岐を多数書いて,ビット出力していましたが,十分間に合っていました。
配列が巨大で問題が発生するのではなく、3次元配列の処理で、mulとか、divとか、
modとかが多数呼ばれているから、処理が間に合わなくなるのでは。全ての次元に
変数を使っていますしね。
Katsushi> list出力もみられないし・・・。こまりました。
Katsushi> いずれにしても,これからまた考えてみますが,
Katsushi> アドバイス頂ければ幸いです。
LIST出力が得られないのは、私も同じだったりして(~_~;)
日立半導体セミナー提供のデバックモニターは、入手していないのでしょうか。
配列は作らず、割り込み処理も、単なるサブルーチンとして、簡潔なプログラム
を作成して、デバックモニターでRAMに転送して、逆アセンブルを見る手も有
ります。
divやmul等のアドレスはMAPに出力されるので、これでどの程度呼ばれているか
判ります。
それでも解決できない時、結局処理能力が、既にH8の能力を超えている
(演算全部、割り込みも通常処理も含めて、それに掛かる時間の総量がCPU時間を
越えている、と言う意味です。)ので、もっと高速なCPUを選ぶ事になりますね。
------------------------------------------------------------
)^o^()^o^()^o^()^o^()^o^()^o^()^o^()^o^()^o^()^o^()^o^()^o^(
☆☆☆☆☆☆☆☆☆☆☆☆designed by hamayan☆☆☆☆☆☆☆☆☆
from はまやん
アドレスは
hamayan@xxxxxxxxxxxxxxxx
FILEを添付される場合は
hamayan@xxxxxxxxxxxxxxx
★★★★★★★★★end of message and thank you★★★★★★★