硬汉嵌入式论坛

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

[技术讨论] STM32F4系列如何正确开启硬件FPU功能

[复制链接]

56

主题

131

回帖

299

积分

高级会员

积分
299
发表于 2022-4-18 14:35:23 | 显示全部楼层 |阅读模式
有看到例程,发现工程里Target  floating point hardware 配置选择 singel precision
但是函数SystemInit里有开启FPU的代码
/* FPU settings ------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
  #endif



查看宏定义__FPU_PRESENT为1,但是__FPU_USED没有为1

#if defined ( __CC_ARM )
  #if defined __TARGET_FPU_VFP
    #if (__FPU_PRESENT == 1)
      #define __FPU_USED       1
    #else
      #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
      #define __FPU_USED       0
    #endif
  #else
    #define __FPU_USED         0
  #endif



要正确开启是不是要设置__FPU_USED为1呢?要在c/c++ define 处填上__TARGET_FPU_VFP呢?


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2022-4-19 09:29:32 | 显示全部楼层
你是实际调试查看这个是否运行了的吗。

还是仅仅看了下这里在MDK下展示的是灰色。
回复

使用道具 举报

56

主题

131

回帖

299

积分

高级会员

积分
299
 楼主| 发表于 2022-4-19 13:53:56 | 显示全部楼层
eric2013 发表于 2022-4-19 09:29
你是实际调试查看这个是否运行了的吗。

还是仅仅看了下这里在MDK下展示的是灰色。

看了显示灰色。。。。。。。。。。。我运行一下看看,这是keil 5的bug吗?版本5.34
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-6-9 15:57:05 | 显示全部楼层
很奇怪,__TARGET_FPU_VFP 不加这个宏定义,配置选择 singel precision,SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));显示灰色,执行fastInvSqrt函数,它是启动了FPU的
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-6-9 16:02:58 | 显示全部楼层
代码如下,只在主循环里执行
uint32_t a=0,bb=0,aa=2*64000;
float fastInvSqrt(const float x)
{
    const float xhalf = x * 0.5f;
    union {
                        float x;
        uint32_t i;
                        } u;
                u.x=x;
    u.i = 0x5f3759df - (u.i >> 1);
    return u.x * (1.5f - xhalf * u.x * u.x);
}

                while(1)
                {
                        GPIOE->BSRRL =GPIO_Pin_14;
                        a++;
                        bb=40000000.0f*fastInvSqrt((float)a*aa);
                        GPIOE->BSRRH = GPIO_Pin_14;
                }
芯片是F407VET6示波器测量IO波形,频率在0.38微秒左右的时间,即0.4微秒以内执行一次,如果工程里Target  floating point hardware 配置选择not used,波形时间好像在几微秒左右,__TARGET_FPU_VFP添加与不添加好像没任何影响,这个宏实际是什么用途?不添加SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); 灰色显示,但依然是FPU能正常使用
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 06:14 , Processed in 0.157522 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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