Cortex-M33 浮点单元(FPU)深度解析
1. 启用非安全模式下的浮点单元
在Cortex - M33处理器中,要启用非安全模式下的浮点单元,可以使用以下代码:
SCB->NSACRj = 0x00000C00; // Enables the floating-point unit for Non-secure use
需要注意的是,写入CP10和CP11位的值必须相同,否则结果在架构上是不可预测的。
2. 浮点寄存器组
浮点寄存器组包含32个32位寄存器,从双精度浮点处理的角度看,它们也可以被视为16个64位双字寄存器。
- 调用者保存寄存器(S0 - S15) :当函数A调用函数B时,函数A必须在调用函数B之前保存这些寄存器的内容(例如,保存到栈中),因为这些寄存器的值可能会在函数调用过程中被改变(例如,用于返回结果)。
- 被调用者保存寄存器(S16 - S31) :如果函数A调用函数B,且函数B在计算中需要使用超过16个寄存器,那么函数B必须先保存这些寄存器的内容(例如,保存到栈中),并在返回函数A之前从栈中恢复这些寄存器的值。
- 初始值 :这些寄存器的初始值是未定义的。
3. 浮点状态和控制寄存器(FPSCR)
FPSCR是一个特殊的寄存器,它保存着算术运算的结果标志和粘性状态标志,以及用于控制浮点单元行为的位域。
超级会员免费看
订阅专栏 解锁全文
8473

被折叠的 条评论
为什么被折叠?



