【Keil备忘录】Keil MDK Warning: L6989W 数学计算函数警告问题

1. 发生的场景

  • stm32L4系列使用数学库时遇到

2. 警告内容

Warning: L6989W: Could not apply patch sdcomp-29491-629360 to instruction VPOP     {d8-d13} at offset 0x54, instruction is within an IT block and is not the last instruction for acos.o(i.__hardfp_acos).

3.警告含义

  • 某些 STM32L4 器件存在 FMC(Flexible Memory Controller)的错误,其中 FMC 不支持 9 个字或更多的读取突发访问。为了防止大于 8 个字的突发访问,开发了一个特殊的链接程序补丁,用于修补某些指令,以避免大于 8 个字的突发访问。然而,如果要修补的指令位于 IT(If-Then)块内而不是该块中的最后一条指令,就会生成此警告1

4.警告屏蔽解决尝试

使用通用的警告屏蔽方式,屏蔽掉指定的警告,仅供参考,可能不生效或错误

  • AC5:
    • 1.使用宏命令
      #pragma diag_suppress 6989
      // 引发L6989W警告的代码
      #pragma diag_default 6989
      
      1. 使用编译参数:
      • –diag_suppress=<警告码>,其中警告码是编译器给出的,比如 47 和 5502。
  • AC6:
    • 在 Keil 的配置选项中,添加 -Wno-<警告类型> 这样的命令来忽略某种警告。例如,如果你想忽略 [-Wunused-value] 警告,只需在配置界面添加 -Wno-unused-value。(但其实我也不知道这个警告是啥类型。。。)

5. 警告消除解决尝试

  • 发现使用数学计算函数的替换API可能可以解决报错,比如acos()替换为acosf(),我的警告就这么没了,没了!!!。。。嘿,网上搜半天都没找到合适的办法,自己随便试试就没了,看来不能太依赖搜索,有时候得让脑子运动一下~~
    • acos() acosf()这俩函数的区别,都满足使用需求,当然用没问题的那个啦~
      • acos() 函数接受 double 类型的参数,并返回 double 类型的结果。这个函数用于处理双精度浮点数,提供较高的精度。
      • acosf() 函数接受 float 类型的参数,并返回 float 类型的结果。这个函数用于处理单精度浮点数,它在某些平台上可能比 acos() 更快,因为它不需要将输入参数和返回值从 float 转换为 double。

还是0错误0警告看起来舒服。。。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值