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