Microsoftライブラリには、アンダーフロー/オーバーフローを処理する加算および減算の関数(_Q15addおよび_Q15sub)が含まれています。
乗算はアセンブリ関数として実装できます(コードは良いと思います-これはメモリからのものです)。
C呼び出しプロトタイプは次のとおりです。
extern _Q15 Q15mpy(_Q15 a, _Q15 b);
ルーチン(プロジェクトの.sソースファイルに配置)は次のとおりです。
.global _Q15mpy
_Q15mpy:
mul.ss w0, w1, w2 ; signed multiple parameters, result in w2:w3
SL w2, w2 ; place most significant bit of W2 in carry
RLC w3, w0 ; rotate left carry into w3; result in W0
return ; return value in W0
。終わり
libq.hを含めることを忘れないでください
このルーチンは、結果に対して15ビットの右シフトではなく、1ビットの左シフトを実行します。Q15の数値は常に<=1の大きさであるため、オーバーフローの懸念はありません。