采用arm cortex A处理器,开启MMU,不开启速度太慢,在一个进展中的浮点计算,发现结果不正确,有跳变,加上运行前关中断,结束开中断,结果就正确,没有跳变
解决的方法尝试如下
1、加入dsb,isb屏障不行
2、把使用的变量指定到没有cahe的区域不行
希望大侠指点一下
原因我现在想明白了,中断程序有浮点运算,对应的附点寄存器没有保存,中断退出没有恢复,修改的方向2个,一个中断不要执行任何浮点操作,浮点只在进程中进行,中断只发信号量,二个,改中断汇编部分部分,中断进入,保存寄存器,保存浮点寄存器,进入中断,中断退出,是否任务切换,没有恢复浮点寄存器恢复寄存器,有任务切换,怎么操作在仔细想想
中断不要执行任何浮点操作
改动基本没有,但问题是不好确保其它小伙伴不这么用,或有时覆盖测试不全,会有遗漏。
保存浮点寄存器
对于不使用浮点的中断,以及不使用浮点的线程,这样代价略大。
因此最好是实现 Lazy Stacking and Context Switching
。
仅为用了浮点的线程和中断保存和切换浮点寄存器。
指令异常中,打开FPU,并把对应的任务的FPU标记打开,下次遇到汇编带v的指令 还是会触发异常中断