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