CQ出版・マルツパーツから販売されているARM Cortex-M0基盤 "MARY" (トランジスタ技術2011年4月増刊に付属)は,超小型ながら必要十分な基本機能と高い拡張性をもった,とてもクリスプなマイコンです.ご多分にもれず私も3月の発売時に大人買いしました(単体で買っても1980円,増刊号では3000円で2枚付属するという破格の安さも魅力の一つです).
- マイクロコントローラ:NXP LPC1114
- CPUコア:ARM Cortex-M0
- 動作クロック:48MHz
- 内蔵フラッシュメモリ:32kBytes
ソース:
#Ifdef __USE_CMSIS #include "LPC11xx.h" #endif int main(void) { int sample_out; GPIOSetDir(1, 8, 1); // PIO1_8 : OUTPUT sample_out = 0; while(1) { GPIOSetValue(1, 8, sample_out); sample_out = 1 - sample_out; } return 0; }
1000カウントの空for ループを入れて回したとき.ループ周期は約400μsecとなりました.
図は省略しますが,10000カウントにすると約4msec (=4000μsec) でした.デクリメントと条件分岐が一回あたり4μsecくらいかかるということですね.十分すぎるほど速いように見えますが,Cortex-M0は乗除算が(整数であっても)複数サイクルを要することと,浮動小数点演算はさらにさらに高コストなことを考えると,制御則などを下手にコーディングすると一気に時間がはねあがることも予想されます.これからもう少し演算性能をテストしておこうと思います.Cortex-M3,M4との比較も早くやってみたいところです.
追記:簡単な演算テストをしてみた結果は以下の通りでした.クロスコンパイラはgccです.
- int どうしの乗算 3.6μsec
- int どうしの除算 7μsec
- float どうしの乗算 60μsec
- float の sin関数 240μsec
追記の追記:
Arduinoのリアルタイム性能についても少し追記しておきましたが,Arduinoでは全開で回したときの周期が460μsecでした.sinやcosを入れると数十msecまで増えることもあります.