[H8-ML(2617)] Re: 大きな配列をタイマー割り込みで参照
From: Katsushi MATSUBAYASHI <matsu@xxxxxxxxxxxxxx>
Date: 2002年12月27日(金)10時36分47秒
こんにちは。松林です。
皆様,レスありがとうございます。
今日も一日悩みそうです。

山中様

>アイデアとしてたとえば
>64個の出力データ用バッフアを2つ持ち、メイン側で演算をして
>出力に使用していないバッフアを更新していき、処理が終わったら
>バッフア更新フラグを立ててやり、出力の割込みの中で1周期の
>終わりなどといったノイズが出にくい所でバッフアを切替える
>様にしてはどうでしょう。

1周期の終わりかどうかを判断するプログラムが入れられるほど,
処理が軽くなくて困っています。
2つのDAにデータを出力して,
p1ポートの2つのビットにビットアクセスする。
それだけでも間に合わないので,if文など入れられる状況ではなく・・・。
RAM上に64バイトの配列をとって,それにアクセスしていたときは,
軽かったのですが・・・。
ROM上の大きな配列にアクセスするのが,これほど遅いとは思えず・・・です。

hamayan様,suzuki様,

%を使わず,”count & 0x3f”とすることですが,
最初の投稿にありますように,次のリストを

void interrupt_timer0(void)
{
    DA.DR0=dat[ratio][ampR][count%divNum];
    DA.DR1=dat[ratio][ampL][count%divNum];
    count++;
}

次のようにすでに変更しています。ビット演算とポイント演算で
これだけでも劇的に早くなりました。

void interrupt_timer0(void)
{
    register unsigned a= (count&(divNum-1));/*=count%divNum 高速化*/
    DA.DR0=*(adrR+a);/*右足,=adrR[count%divNum];*/
    DA.DR1=*(adrL+a);/*左足*/
    count++;
}

でも,これにIOポートのビット出力を2行加えただけで,もう間に合いません。
巨大な配列を使わない,改良前のプログラムでは,
条件分岐を多数書いて,ビット出力していましたが,十分間に合っていました。

list出力もみられないし・・・。こまりました。
いずれにしても,これからまた考えてみますが,
アドバイス頂ければ幸いです。

// Katsushi MATSUBAYASHI   matsu@xxxxxxxxxxxxxx
// Associate Professor, Tokyo National College of Technology    
スレッド概略
[2610(R)](起点)
 └[2613(U)]
   └[表示中]
     └[2619(1)]


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


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