1

ネストされた割り込みを使用するソフトウェアを実行している ARM Cortex-A9 ベースのシステムに取り組んでいます。ただし、ネストされた割り込みを実装する方法には、浮動小数点値と操作が破損する可能性があるため、欠陥があるようです。

これを軽減するために、割り込みルーチンに入るときに浮動小数点レジスタの状態を保存しようとしています。私がFPSCRで試している方法は次のとおりです。

asm ("VMRS %0, FPSCR " : "=r" ( savedReg)); //Save

asm ("VMSR FPSCR, %0 " : "=r" ( savedReg)); //Restore

読み取りは機能しているように見えますが、書き込みは機能していないようです。A9 が再起動します。

この方法で FPSCR にアクセスできますか? 他にどのような方法が推奨されますか?

4

3 に答える 3

1

FPSCR と savedReg に未定義の値を書き込んでいます。あなたがしたい:

asm volatile ("VMSR FPSCR, %0 " : : "r" ( savedReg)); //Restore

また、浮動小数点演算がインライン アセンブラ間で行われるという保証はありません (役立つ場合もvolatileあり"memory"ます)。スタンドアロン アセンブラを使用してください。

于 2013-08-30T08:24:47.683 に答える
0

Linux カーネル モジュールを使用してアセンブリ コードを実行し、ユーザー モードがロード時に興味深いコプロセッサ レジスタにアクセスできるようにします。これは、実験/診断にのみ有用であり、出荷コードでは明らかに有用ではありません。

于 2013-08-26T19:02:17.383 に答える