硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2725|回复: 4
收起左侧

[μCOS-III] 关于f407上面浮点FPU测试的一些疑问。

[复制链接]

16

主题

45

回帖

93

积分

初级会员

积分
93
发表于 2017-3-1 15:05:27 | 显示全部楼层 |阅读模式
创建浮点任务.jpg 浮点测试.jpg

这是我测试的一个浮点任务。
测试主要先看fpu是否工作。
另外看看目前一些网上说必须需要配置的地方。
1.任务创建测试的时候,我并没有把OS_OPT_TASK_SAVE_FP这个选项选择上去。
2.在启动文件里面。

; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
                 IMPORT  SystemInit
                 IMPORT  __main

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP
并没有增加 关掉lazy stacking的程序。

但是结构如上面截图所示 ,依然可以工作。
也出现了,VADD,F32的浮点指令。
这个是为什么?
请大神指导。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2017-3-1 17:38:54 | 显示全部楼层
首先说下你的程序。你程序能够使用浮点,跟uCOS没有任何关系,因为你已经在MDK的option选项里面使能了FPU。
然后我们说说uCOS的浮点问题,这个问题由来已久。
1.  早期F4系列发布的时候,uCOS-III官方出的Demo对浮点寄存器的入栈和出栈做的极其不合理。
     后来就有了我们自己实现的方案,也就是我们早期做的这个教程,http://www.armbbs.cn/forum.php?mod=viewthread&tid=1788,V5板子所有的uCOS-II和III的例子都是这种方案。
2.  之后uCOS官方更新了一次,不过他们是不是禁止了Lazy Stack特性。性能不是很好,也就是我们V6板子采用的这种方式。也是得设置参数OS_OPT_TASK_SAVE_FP。
3.  最后,uCOS官方再次更新,统一了M3.M4,M7的底层实现。也开始使能Lazy Stack特性。因为使用这个特性才是CM内核使用RTOS的根本。
    http://www.armbbs.cn/forum.php?mod=viewthread&tid=18010
回复

使用道具 举报

16

主题

45

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2017-3-2 16:36:08 | 显示全部楼层

回 eric2013 的帖子

eric2013:首先说下你的程序。你程序能够使用浮点,跟uCOS没有任何关系,因为你已经在MDK的option选项里面使能了FPU。
然后我们说说uCOS的浮点问题,这个问题由来已久。
1.  早期F4系列发布的时候,uCOS-III官方出的Demo对浮点寄存器的入栈和出栈做的极其不合理。
  &nb .. (2017-03-01 17:38) 
你好,刚才认真看了下你的回复。
1、每次出的DEMO对于os_cpu.c和os_cpu.asm这两个文件来说,他都可以可靠的工作的,只是效率高低的问题。

2、我们V5的开发板基于407的,我也有,看到里面的例程,都是基于你在一个文档里面写的FPU的修改在UCOIII1-11期这个文档里面有。我也移植过来。也是工作文档。ucos的版本是3.01.

3、我们V6的开发板我也有,基于429的。发现到了429后,底层有些不同了。os_cpu.c和os_cpu.asm这两个部分有了很大的变化,os_cpu.asm由于对于汇编我不太懂,也没有怎么研究,所以,只是直接拷贝过来。对于os_cpu.c里面的堆栈初始化我看了一些内容,就是如果你选择了。OS_OPT_TASK_SAVE_FP这个属性的话,他才会对浮点的相关寄存器进行处理。另外在我们的启动文件.s里面,存在了关掉Lazy Stacking的东西。ucos的版本是3.03和3.04


4.我们M7的板子,我还没有,也没有仔细看。ucos的版本是3.05

也就是说,对于ucos的底层这部分,堆栈的处理和PendSV中断的处理。这几部分。我们比没有必要纠结使用哪个,因为他们都是可靠的。只是效率的高低。如果这需要考虑的话,我们是不是应该兼容一种方式可以兼容M3,M4,M7的方式。这样我们自己在升级ucos的时候,或者换芯片的时候可以不需要考虑太多。
当然,你刚才也说,如果ucos下一次升级版本,把这个方式又改了。我们就另当别论了。

另外一个问题是:如果我们的芯片比如是407或者429.但是我没有开启FPU的。我的程序底层中涉及单精度的float的计算。这个时候mdk编译是否会将程序编译为软fpu的功能而正常执行?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2017-3-2 16:42:41 | 显示全部楼层

回 zxdzwcs 的帖子

zxdzwcs:你好,刚才认真看了下你的回复。
1、每次出的DEMO对于os_cpu.c和os_cpu.asm这两个文件来说,他都可以可靠的工作的,只是效率高低的问题。

2、我们V5的开发板基于407的,我也有,看到里面的例程,都是基于你在一个文档里面写的FPU的修改在UCOIII1-11期这个文档里面有。我也移植过 .. (2017-03-02 16:36) 
1.  V6的是3.05版本,实际版本要看C源码,底层移植文件的版本不准确。
2 . M3,M4,M7去年官方发布的几个例子已经都统一,你直接在官方下载例子参考移植即可。
     在os_cpu.asm文件的开头有注释。

3. 会的,编译器会处理。
回复

使用道具 举报

16

主题

45

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2017-3-2 17:15:52 | 显示全部楼层

回 eric2013 的帖子

eric2013:1.  V6的是3.05版本,实际版本要看C源码,底层移植文件的版本不准确。
2 . M3,M4,M7去年官方发布的几个例子已经都统一,你直接在官方下载例子参考移植即可。
     在os_cpu.asm文件的开头有注释。

....... (2017-03-02 16:42) 
好的。多谢eric2013
那我现在实际使用没有什么问题,也就不纠结这个问题。能用就行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 17:36 , Processed in 0.325019 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表