|
楼主 |
发表于 2012-1-1 11:55:52
|
显示全部楼层
昨天晚上终于把FPU的上下文切换完成了。
1. 自动检查FPU是否打开,如果已经打开,则为FPU预留空间。
2. 线程切换时,把FPU的所有寄存器保存并切换。
笔记如下:
1. 为加快中断响应,当发生中断时,虽然会自动对FPU的S0~S15进行压栈,但没有真正压入,
只是预留了空间,并把地址写入FPCAR寄存器。如果在中断中使用硬件浮点指令,此时才真正
进行压栈。一般中断服务函数中都不会使用浮点运算,所以这样对中断延迟基本没有影响(相对cortex-M3)。
2. 对FPU寄存器的操作指令与普通指令基本一致,指令名称加了V前缀。
如切换上下文:
VSTMFD r1!, {d8 - d15} ; push FPU register s16~s31
STMFD r1!, {r4 - r11} ; push r4 - r11 register
LDMFD r1!, {r4 - r11} ; pop r4 - r11 register
VLDMFD r1!, {d8 - d15} ; pop FPU register s16~s31 |
|