SSブログ

マイコンは計算が苦手 [パソコン]

PIC16F1825とPIC24F08KL200の計算速度を測ってみました。 なぜそんな事をするかと言うと、いつも使っているPIC16xxxには乗除算の機能が無いからです。

えっ、掛け算、割り算ができいって? そうなんです、パソコンなどと違い、この手の超小型マイコンは掛け算、割り算がハードウェアーでサポートされていません。 じゃあどうやって計算するのかと言うと、プログラムで作るんですね。 幸いな事に今ではコンパイラーを使用できるので、それらが勝手にやってくれます。

そこで、ハードウェアーの掛け算がないPIC16F1825と掛け算が有るPIC24F08KL200でどのくらい速度が違うの計測してみる事にしました。

両者ともオシレーターの周波数を8MHzに揃えました。 PIC24では内部クロックがPIC16の2倍になりますので普通の処理もPIC24の方が速いはずです。


以下のプログラムでLEDを点滅させてみました。

while(1){
    LATAbits.LATA0 ^= 1; // LED on/off
}

TEK0000.JPG

上がPIC24下がPIC16のLEDにかかる電圧です。 PIC24は2倍の速さになっていません。 このくらいのプログラムなら機械語では3ステップくらいで済むはずですが、実際にはもっとかかっている様です。 PIC24の方は最適化があまりされていない様です。 

次に、掛け算、割り算の速度を測ります。


volatile int a,b,c;
a = 0;
b = 1234;
c = 4321;
while (1) {
     LATAbits.LATA0 = 1; // LED on
     a = b * c;
     LATAbits.LATA0 = 0; // LED off
     a = b / c;
}
TEK0002.JPG
下がPIC16で掛け算の間LEDを点灯、割り算の間LEDを消灯を繰り返します。 これでみると、両方で約247μ秒かかっています。 割り算の方が速いのが変な気もします。
TEK0001.JPG
上がPIC24で、約7μ秒で乗除算をしていますので35倍くらい速くなっていますね。
秋月電子通商でPIC16F1825が250円、PIC24F08KL200が160円となっておりこれならPIC24の方が良い様な気がしますが、実際にはいろんな理由でPIC24は使いにくかったりします。 
コンピューターなんて計算する装置だと思われがちですが、この様な小さなマイコンでは掛け算、割り算がなかったりするんですよね。 掛け算、割り算、ルートくらいなら私もプログラムしたことはありますが、浮動小数点演算とかになるととても自分では作る気になれません。 そう言う時は他人が作ったものを使わせてもらいます。 コンピューターの世界では著作権などに触れずに使えるライブラリーがたくさん有って助かりますね。

コメント(4) 

コメント 4

Mitch

自分はアナログ屋でしたので、プログラムはお手上げです^^;
by Mitch (2023-03-30 17:57) 

まっちゃん

▶Mitch さん
アナログは難しいですね。
今回スリーステートのインターフェースをソフトで書いていたのですが、オシロスコープに現れない様なところで何か誤動作が起きていて、見つけるのに苦労しました。

by まっちゃん (2023-03-31 11:09) 

takapy77

昔、アセンブラーで掛算、割算のプログラムを
作った事がありますが、それは大変だった事を
思い出しました。
by takapy77 (2023-04-01 22:29) 

まっちゃん

▶takapy77 さん
PICも最初はアセンブラーで組んでいたんですけどね。
最近はCが使えるので楽です。
アセンブラーだとメモリーのページの切り替えを意識しないといけないので結構面倒です。

by まっちゃん (2023-04-02 11:33) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。