こんにちは。松林です。
皆様,レスありがとうございます。
今日も一日悩みそうです。
山中様
>アイデアとしてたとえば
>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