Fab*_*tti 11 gcc arm stm32 keil cortex-m
我准备在STM32处理器上为我的项目使用C开发Cortex-M内核的一些固件,并在网上搜索我发现了很多不同的编译器:Keil,IAR,Linaro,Yagarto和ARM嵌入式GNU工具处理器.
我想知道,这些可能影响我选择的编译器之间存在哪些功能差异?例如,作为发烧友,我不需要供应商的支持或帮助,目前对代码大小的限制是可以的.此外,易用性并不是主要关注点,因为我喜欢学习(目前我已经配置了Keil Lite和Eclipse以及GNU ARM配置和工作).
生成的代码在这些编译器之间的大小/速度方面是如此不同?有比较表吗?(我在网上发现只有陈旧的信息)
基准测试本身就是一种艺术形式,通常易于操纵结果以显示所需内容。除了很小的测试用例之外,我不希望编译器产生相同的结果,有时在那些小的测试用例中,它们的结果要么相同,要么有时相差很大,因为您的测试暴露了一个编译器知道/使用的优化,而另一个其他没有。
我曾经用dhrystone来跟踪此类情况(编译器性能数字),但是在已知的基准测试(不是dhrystone意味着更多,而其他基准测试)的情况下,您可能会发现一些编译器正在调整自身以使其在基准测试下看起来不错也许是以其他为代价的。
没有正确的答案,没有普遍的“最佳”,这一切都是情人眼中的你。哪种工具更容易使用,哪种更适合gui或漂亮的颜色或声卡声音等等。然后从那里去。
与其他程序相比,我测试过的应用程序的gnu编译器通常不会产生“快速”的代码,这是我的基准测试,但是有更多的人使用免费的gnu工具,因此由于数量众多,对该工具的支持范围更加广泛网页和论坛以及示例。gnu不会有大小限制,但是可能需要更多的学习知识或其他内容来启动和运行...
cortex-ms分为armv6m和armv7m系列,v6m(cortex-m0)仅具有少量的thumb2扩展,armv7m具有大约150个thumbv2扩展到拇指,因此您需要知道您的工具支持什么,而没有在错误的芯片上使用错误的东西。然后,如果编译器知道所有这些信息,那么它们将并且将根据同一源代码产生不同的指令混合。此外,在同一编译器或系列中,使用不同的命令行选项,您可以/将获得截然不同的代码。然后,如果您有一个带有此类功能的东西,那么在启用了缓存的cortex-m4上,根据代码在缓存行中的放置方式,您可能会获得截然不同的性能,因此,基准测试本身就是每个blob的研究项目。您要基准测试的C代码。
如果您可以使用这些工具,则可以通过学习使用竞争性工具并能够胜任工作,或者在工作中选择自己认为合适的工具,或者走进基尔之家,从而在专业上为自己增加价值。并能够立即工作或住在牛羚房屋并立即工作。如果您只是gnu,而您的工作可能是在基尔的房子,那您可能会失业。
我们做了一些比较;IAR 和 Keil 在默认设置下的性能通常优于 GCC。但是通过一些编译器标志,您可以使 GCC 与 IAR 和 Keil 的结果非常接近。
您提到的一些编译器是集成开发环境。其他的只是普通的编译器。有些人更喜欢带有为您精心打包的编译器、编辑器和调试器的集成环境。其他人更喜欢建立自己的环境。这是一个品味问题。
除了Yagarto,还有GCC for ARM的“Code Sourcery”发行版。
| 归档时间: |
|
| 查看次数: |
5930 次 |
| 最近记录: |