不韋 呂
/
CQ_FixedPointSin_CMSIS
CQ出版社インターフェース誌の2017年8月号で解説している,固定小数点演算で sin 関数の値を求める二つの関数を比較するためのプログラムの全体.
CMSISmain.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2017-08-02
- Revision:
- 0:9b1d4712f862
File content as of revision 0:9b1d4712f862:
//---------------------------------------------------------------------- // 自作 Sin16() と ARM の arm_sin_q15() の実行時間の比較 // arm_sin_q15.c は自分でインポートする必要がある // 2017/03/01, Copyright (c) 2017 MIKAMI, Naoki //---------------------------------------------------------------------- #include "mbed.h" #include "SinCosFixed.hpp" // Sin16() 用 #pragma diag_suppress 3108 // arm_sin_q15() で,コンパイル時に出る warning 抑制のため #include "arm_math.h" // arm_sin_q15() 用 const int TS_ = 10; // 標本化間隔:10 μs Ticker timer_; AnalogOut da1_(A2); AnalogOut da2_(D13); DigitalOut dOut_(D2); const int DX_ = 997; int16_t phi1_ = 0; int16_t phi2_ = 0; void TimerIsr() { dOut_ = 1; int16_t sn1 = Sin16(phi1_); // 300 ns(実測値) dOut_ = 0; wait_us(2); dOut_ = 1; int16_t sn2 = arm_sin_q15(phi2_); // 570 ns(実測値) dOut_ = 0; phi1_ += 2*DX_; phi2_ = (phi2_ + DX_) & 0x7FFF; da1_.write_u16(sn1+32768); da2_.write_u16(sn2/2+32768); } int main() { timer_.attach_us(&TimerIsr, TS_); while (true) {} }