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

据我所知,仅在主管模式下才允许修改协处理器。

于 2013-08-26T14:34:37.433 回答
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 回答