最近在ucos官网上下了ucos在lpc3180上的移植,但我发现上面的没有做VFP浮点部分的移植,因此参考了ARM公司关于VFP9上的相关资料,把这部分加了进去, 以下为浮点寄存器保存和恢复部分的汇编,VFP9中的另外四个控制寄存器因为禁止VFP中断,因此不用处理.仅保存一个FPSCR OSFPRestore;(通过R0传参,具体可看uc/osII的书) STMFD SP!, {R0-R1} ;保存R0,R1 LDR R1,[R0] ; FMXR FPSCR,R1 ;恢复FPSCR FLDMDBX R0!,{D0-D15} ;恢复D0-D15 LDMFD SP!, {R0-R1} ;恢复R0,R1 MOV PC,LR
OSFPSave(通过R0传参,具体可看uc/osII的书) STMFD SP!, {R0-R1} FMRX R1,FPSCR STR R1,[R0] FSTMDBX R0!,{D0-D15} LDMFD SP!, {R0-R1} MOV PC,LR 测试的时候,开多个任务,每个任务都在做Tem=sin(0)运算,最低优先级的任务如下 Tem=sin(0); if(Tem!=0) { LED_On(); while(1); } 也就是说运算错识的话将会把led点亮,首先去掉OSFPRestore和OSFPSave代码,全速运行,一些时间后LED亮了,说明运算错误了,然后把OSFPRestore和OSFPSave代码加入,全速运行,LED一直都没亮. 我觉得这应该说明是成功了.但还不敢肯定,希望高人们指点一下,或交流一下. QQ:2750660 |