[H8-ML(2622)] Re: 大きな配列をタイマー割り込みで参照
From: Katsushi MATSUBAYASHI <matsu@xxxxxxxxxxxxxx>
Date: 2002年12月27日(金)12時41分43秒
山中様,藤原様,ひやした様
レス,ありがとうございます。

>>>     register unsigned a= (count&(divNum-1));/*=count%divNum 高速化*/
>>>     DA.DR0=*(adrR+a);/*右足,=adrR[count%divNum];*/
>>>     DA.DR1=*(adrL+a);/*左足*/
>>>     count++;
>>かなり最適化されてると思います、1バイトx2個のデータなら
>>ワードデータにし1回のアドレス演算で済む様にしては、それにし
>>てもこれだけの処理なのに重すきる様な、やはりhamayanさんが
>>言われてる様に逆アセンブルして原因を追求してみるしか無いと
>>思います。

そうなんです。これだけの処理なのに・・・。なにか別のところに
原因があるような気がしてなりません。
逆アセンブルは当方の環境ではできないのですが,
最終的には,環境を整えてするしかないかもしれません。

>>adrRやadrLの定義のしかたにより型変換などでムダな事やってそう
>>な気もしますが。

グローバル変数として,次のように定義して,
unsigned char *adrR,*adrL;/*データのアドレッシング用*/

main(から呼ばれる関数)で次のように代入しています。

adrR=((unsigned char *)dat+(ratio<<10)+(ampR<<6));/*高速化*/
adrL=((unsigned char *)dat+(ratio<<10)+(ampL<<6));/*高速化*/

>同感。これ以上の「劇的な最適化は」は出来ないように見えますね。
>で、ワタシ、最近こればっかりなのですが、どこで時間が掛かっているのか
>オシロとIOポート作戦で調べるとか。(^^;

(^^;)・・・やってみます。

>具体的な事がわからないので全くハズしているかもしれませんが、
>システム全体のアルゴリズムを再考してDMAのIOモードを使うとか、
>そういうソリューションは検討してみるのも手かもしれませんね。

作っているのは,マイクロロボット駆動ソフトウェアなのですが,
アクチュエータ駆動が正弦波,電磁石駆動がポートのビット操作・・・です。
アクチュエータ(PZT)も電磁石もぞれぞれ2個ずつあります。

>最もシンプルなコードで現象を再現して頂ければ
>イエローソフトのコンパイラ(で良ければ)で
>コンパイルしたアセンブラリストを提示できますけど。

ありがとうございます。
シンプルなコードで再現を目指してみます。
その仮定でとっかかりがみつかるかもしれません。

その他,お気づきの点ありましたら,今日一日悩みぬく予定ですので,
是非,ご教授ください。

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


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


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