[H8-ML(2618)] Re: 大きな配列をタイマー割り込みで参照
From: hamayan <hamayan@xxxxxxxxxxxxxxx>
Date: 2002年12月27日(金)10時54分04秒
お世話になっています。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★★★★★★★

スレッド概略
[表示中](起点)


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]