微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Arm嵌入式GCC工具链-差异版本7和9

如何解决Arm嵌入式GCC工具链-差异版本7和9

我们在Cortex-M3项目(由ARM维护的arm-none-eabi)中使用了基于GCC的ARM嵌入式工具链。

我们最近在一个使用GNU11和GNU ++ 14和newlib-nano(nano.specs)的项目中将其从7.2.1升级到了9.3.1,优化级别设置为Og。

我们面临一些奇怪的行为,突然一个随机的GPIO突然不再打开/关闭,如果使用7.2.1,则不会发生这种情况。当单步执行程序以检查其为何不再旋转时,所有命令均正确执行:初始化,然后将值写入GPIO。 同样值得注意的是,如果我们将优化级别更改为任何其他级别(O0、01、02、0s),它将再次起作用,似乎带有9.3.1的Og会破坏某些东西。

然后,我们开始搜索必须从优化中排除的代码段(哪个函数或指令),以便使其再次可运行。在那里,我们找不到解决方案,因为它不是一个函数调用。通过缩小范围来随机进行,只是通过禁用对与访问GPIO无关的随机函数的优化,它可以再次工作。

目前,我们不知道如何进一步处理此问题,以找到此行为的根本原因。

问题:

  • 在Gnu11 / Gnu ++ 14,newlib-nano和调试优化(Og)方面,在7.2.1和9.3.1之间发生了什么变化?
  • 如何解释旧版本似乎会生成可运行的二进制文件,而新版本会引起问题?
  • 您如何解释为什么只有Og会引起麻烦,而所有其他优化级别似乎都可以正常工作?

高度赞赏任何提示/输入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。