打印

ucos在lpc3180上的移植(浮点部分)

[复制链接]
2988|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
JINBOS|  楼主 | 2007-1-18 15:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在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

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

45

帖子

0

粉丝