| 
 
| 最近在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 | 
 |