MPLAB-XでStopWatchを使ってみた [MPLABXとXC8]
(2015.04.18)
PIC16F1705を使ったアプリケーションの開発を続けています。10mSインターバルで行う処理の中でlongデータの乗除算を行うのですが、その演算処理時間が気になり、MPLAB-XのStopWatch(シミュレータの機能)を使って確認することにしました。
StopWatchウィンドウを開く
ところが、最初のディレイ処理で変なことに気づきました。1msのディレイ・ループの処理時間が2msと表示されるのです。
1msのディレイに2ms掛かっている
???
調べてみると、シミュレータのプロパティにInstruction Frequency(1MHzになっていた)があり、プログラムで設定したOSCCONレジスタの値(2MHzになる筈)はシミュレーション・クロックに反映されないらしいのです。
Instruction Frequencyが1MHzになっていた
Instruction Frequencyを実機に合わせれば、正しい処理時間を計測出来る筈ですが、プロパティを変更する方法が直ぐには判りませんでした。orz
暫くジタバタして、ようやく”unlockボタンをクリックすれば設定変更が可能になる”ということに気づきました。
unlockボタンをクリックすると設定変更できる
ヤレヤレ
===================================
ちなみに、PIC16F1705の演算処理時間はこんな感じでした。
(Instruction Frequencyが1MHzの場合)
unsigned int ix,iy;
unsigned long lx,ly;
__delay_ms(1); // 2.024ms
ix = 0x100;
iy = 0x0ff;
ix *= iy; // 192us
ix /= iy; // 352us
lx = 0x7fff;
ly = 0x7fff;
lx *= ly; // 511us
lx /= ly; // 968us
実機のInstruction Frequencyは2MHzですが、longの乗除算は多用しない方が良さそうです。
制御方式の見直しが必要だなぁ
PIC16F1705を使ったアプリケーションの開発を続けています。10mSインターバルで行う処理の中でlongデータの乗除算を行うのですが、その演算処理時間が気になり、MPLAB-XのStopWatch(シミュレータの機能)を使って確認することにしました。
StopWatchウィンドウを開く
ところが、最初のディレイ処理で変なことに気づきました。1msのディレイ・ループの処理時間が2msと表示されるのです。
1msのディレイに2ms掛かっている
???
調べてみると、シミュレータのプロパティにInstruction Frequency(1MHzになっていた)があり、プログラムで設定したOSCCONレジスタの値(2MHzになる筈)はシミュレーション・クロックに反映されないらしいのです。
Instruction Frequencyが1MHzになっていた
Instruction Frequencyを実機に合わせれば、正しい処理時間を計測出来る筈ですが、プロパティを変更する方法が直ぐには判りませんでした。orz
暫くジタバタして、ようやく”unlockボタンをクリックすれば設定変更が可能になる”ということに気づきました。
unlockボタンをクリックすると設定変更できる
ヤレヤレ
===================================
ちなみに、PIC16F1705の演算処理時間はこんな感じでした。
(Instruction Frequencyが1MHzの場合)
unsigned int ix,iy;
unsigned long lx,ly;
__delay_ms(1); // 2.024ms
ix = 0x100;
iy = 0x0ff;
ix *= iy; // 192us
ix /= iy; // 352us
lx = 0x7fff;
ly = 0x7fff;
lx *= ly; // 511us
lx /= ly; // 968us
実機のInstruction Frequencyは2MHzですが、longの乗除算は多用しない方が良さそうです。
制御方式の見直しが必要だなぁ
|
|
|
コメント 0