对于 ARM7 开发,Keil 与 GCC 相比如何?我正在为一个中型项目选择硬件顾问,有些使用 keil,有些使用 gcc。我想知道任何一种选择所涉及的问题......
5 回答
从编码/开发的角度来看,两者之间几乎没有区别。我认为您应该考虑的唯一事情不是特定于这些编译器。维护:
- 如果您无法访问 Keil 编译器,您是否能够维护该软件,或者这将是一笔不小的成本?
- 还支持什么调试硬件/JTAG,如果你需要一些,成本是多少?
- 如果由于以后不得不切换开发人员而不得不从一个编译器转移到另一个编译器,成本会是多少?
除非您对成本非常敏感,否则我认为真正的问题是谁将做得最好,因为编译器将是一个小问题。
应该可以构造您的代码以使用这两种编译器。像“packed”这样的属性可以被宏化,所以代码在两者下都很满意。将硬件细节下推到较低级别,并在运行时而不是编译时配置硬件映射。如果您必须拥有单独的 Kiel 和 GCC 版本的代码,请将它们放在单独的文件中并配置与 gcc make 或 Kiel 项目文件一起使用的文件。
我还没有解决的一个问题是汇编代码。Kiel 使用 armasm,而 gcc 使用 as。它们似乎有非常不同的源代码格式。如果可以的话,避免使用汇编程序的另一个原因。
使用 GCC 的优点是您可以针对非 ARM 平台 - 非常适合在具有更好开发工具的平台上模拟您的应用程序(即 x86 linux 下的 valgrind)。事实上,这是每个面向 ARM 的应用程序都应该采用的方法。先在 x86 上开发,然后移植到 ARM。
还有与基尔保持同步的成本。一旦我知道的地方停留在 RVDK 2.1(2002 年?)上,因为三个开发人员升级到最新版本的成本太高了。
我还要补充一点,gcc 和 pedantic 将比我们的(诚然古老的)基尔版本更好地消除代码中的警告和错误。
Kiel 可能会提供更紧凑的 ARM 代码,因此请保留它以进行目标构建。否则使用 GCC。
如果我没记错的话,Kiel 现在归 ARM 所有。ARM 编译器在生成优质代码方面比 gcc 更胜一筹。我似乎记得 Keil 包括缩减版或免费版或任何版本的 rvct。所以我的问题是,当 gcc 存在并且使用良好时,是否有更快、更清洁、更好的代码值得使用商业解决方案?我会选择 gcc,除非您处于性能紧缩的情况,并且愿意在网络上免费提供的所有基于 gcc 的信息与您的商业工具之间进行心理转换,然后再返回。一般来说,使用 gcc 可能是更好的路径,因为在 Kiel 的谷歌搜索框后面可能有大量信息,但基于 gcc 的解决方案的知识和信息量掩盖了这一点。
如果顾问使用一种工具为您完成项目的初始工作,然后他们最终移交工作,您可能会想要一个基于 gcc 的解决方案(这并不意味着说 vxworks gcc,甚至是代码源gcc,但是一个通用的 gcc 解决方案),因为毫无疑问,您或您雇用的其他人将不得不拿起这个质量并运行它,并且使用 gcc 您更有可能找到愿意和有能力的人。
商业解决方案的主要好处是在您遇到编译器或库问题时对我的支持。
当您使用主流硬件(在 gcc = x86 的情况下)时,开源很好。编译器或库的大多数问题通常会很快由社区修复。
如果您在(也许是异国情调的)嵌入式平台上进行开发,如果您对工具链有任何问题,您很快就会感到非常孤独。
我们使用 Keil 平台,对其性能和优化非常满意。几年前我运行了一些标准基准测试,它们非常好。另一个考虑因素是支持,到目前为止,Keil 的响应时间非常好,并且在一些棘手问题上的反馈也相对较好。
仅供参考,如果您的项目将使用 Keil RTOS 并且您对此有任何疑问,可以购买源代码。