マイコンの実行速度は!?

大学でアドバイスもらったり、Shibasakiさんにアドバイスをもらったりでいろいろ最適化されてきたのでそろそろ公開できそうな感じになってきたソース。
皆様には本当に感謝しています。

それで、結局、PWMのところでいろんな案が出てきて結局どれにしようか迷っている。

もともとのソースはこれ。(1)

if (cnt1==0)P1.DR.BYTE=0x01;
if (cnt1==1)P1.DR.BYTE=0x02;
if (cnt1==2)P1.DR.BYTE=0x04;
if (cnt1==3)P1.DR.BYTE=0x08;
if (cnt1==4)P1.DR.BYTE=0x10;
if (cnt1==5)P1.DR.BYTE=0x20;
if (cnt1==6)P1.DR.BYTE=0x40;
if (cnt1==7)P1.DR.BYTE=0x80;

それに対して自分の出した改善策はコレだったのですが・・・。(2)

switch(cnt1){
	case 0:	P1.DR.BYTE=0x01;	break;
	case 1:	P1.DR.BYTE=0x02;	break;
	case 2:	P1.DR.BYTE=0x04;	break;
	case 3:	P1.DR.BYTE=0x08;	break;
	case 4:	P1.DR.BYTE=0x10;	break;
	case 5:	P1.DR.BYTE=0x20;	break;
	case 6:	P1.DR.BYTE=0x40;	break;
	case 7:	P1.DR.BYTE=0x80;	break;
}

こんな案や(3)

static unsigned char byte[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
P1.DR.BYTE = byte[cnt1];

こんな案を頂きました(4)

P1.DR.BYTE = 1 << cnt1;

突っ込みが入るくらいなので、(1)がプログラム的に劣っているのは間違いないのです・・・。
自覚もありました。それで検証してみたのですが・・・。

見た目に関して言えば、(1)、(2)、(3)は人間に分かりやすいという性質がある。
(4)はパッと見た感じ分かりにくいですがインテリジェンスな感じがします。行数が少ないというメリットもありますね。

実行時間で比較した場合、(2)(3)は、アセンブリを見た感じ、どの値をとっても実行したときのクロック数は同じ感じです。
(4)に関しては1ビットシフトをn回分繰り返すということで実行速度にバラつきが出そうな感じです。(1)は当然比較回数が異なるのでバラつきが出ます。

で、結局「-S」のオプションでアセンブリを出したりしてみたもののよく考えたらCISCであるH8は命令ごとにステートが違うので単純に行数では実行速度の比較が出来ない・・・。しかもちょっと分かりにくい。

ちなみにアセンブリの命令一覧を見ていて8ビットのローテーション命令があった。
左シフトしてあふれたケタを右に入れる命令。
これがC言語ではじめから存在したら何も問題はないのに・・・。(実はあるのだろうか?)

来週は実機で激しくループさせてみたり、パソコンで実行時間計ったりしてみたいと思う。
まぁ、ぶっちゃけた話、どのソースを使っても((1)でも)、サーボの動きに見た目の変化はなかったんだけどねw
ここまで来たら徹底的に実験したいと思います。

Profile

me.jpg
Name : みっちー
小学校で電子工作にハマり、高校時代はゲームプログラミング、大学時代にロボット製作へどっぷり浸かりました。
社会人になっても、なにかとものを作るのが大好きで、日々ネタと仲間を求めて活動中です。

Dream Drive!!

bana.png
http://dream-drive.net

趣味のロボットとプログラムを中心としたコンテンツのサイトです。

My Robots

kolink2.jpg
KO-LINK2
第2世代 並行リンク足ロボット

kolink.jpg
KO-LINK
並行リンク足ロボット

BusterGX.jpg
BusterGX (Ex Walker)
G-ROBOT + ROBO-XERO

kumaco.jpg
KUMACO
ぬいぐるみロボット

SARUBO.jpg
SARUBO
JX-SYSTEM搭載ぬいぐるみロボット

kokuten3.jpg
KOKUTEN 3
リアルタイム逆運動学制御ロボット

meros.jpg
MEROS
膝なしロボット
(胸部マトリックスLED搭載)
by Mechaniker

kokuten12.jpg
KOKUTEN 1&2
はじめてのロボット
by Mechaniker

協賛広告

月別 アーカイブ

このブログ記事について

このページは、みっちーが2007年6月 8日 18:13に書いたブログ記事です。

ひとつ前のブログ記事は「今日がダメでも明日がある」です。

次のブログ記事は「マイコンの実行速度は!? その2」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。