【问题标题】:Keil vs GCC for ARM7?ARM7的Keil vs GCC?
【发布时间】:2010-11-16 14:50:53
【问题描述】:

在 ARM7 开发方面 Keil 与 GCC 相比如何?我正在为一个中型项目选择硬件顾问,有些使用 keil,有些使用 gcc。我想知道选择任一选项所涉及的问题......

【问题讨论】:

  • KEIL提供紧凑稳定的集成开发环境,包括C/C++编译器、调试器和JTAG/SWD接口。它们以最少的配置连贯地工作。另一方面,如果您想使用 GCC,则需要准备 JTAG 代理(例如 OpenOCD),其配置可能会变得具有挑战性。长话短说,KEIL 是更稳定、更紧凑的工具链,可以以最小的努力来提升项目。但是如果你想了解 JTAG 和远程调试如何与 GDB 服务器一起工作,我绝对建议使用开源工具。这是我的两分钱。
  • Qustion 快 9 年了,很高兴看到情况保持稳定

标签: gcc embedded arm keil arm7


【解决方案1】:

从编码/开发的角度来看,两者之间几乎没有区别。我认为您应该考虑的唯一事情不是特定于这些编译器。 维护

  • 您能否维护 如果您无权访问该软件 Keil 编译器或者它会是一个 小成本?
  • 还有哪些调试硬件/JTAG 受支持,如果您需要一些,费用是多少?
  • 费用是多少 如果您必须从一个编译器迁移 由于不得不 以后切换开发人员?

除非您对成本非常敏感,否则我认为真正的问题是谁会做得最好,因为编译器将是一个小问题。

【讨论】:

    【解决方案2】:

    商业解决方案的主要好处是在您遇到编译器或库问题时对我的支持。
    当您使用主流硬件(在 gcc = x86 的情况下)时,开源很好。编译器或库的大部分问题通常会很快被社区修复。
    如果您在(可能是异国情调的)嵌入式平台上进行开发,如果您对工具链有任何问题,您很快就会感到非常孤独。

    【讨论】:

    • 老实说,您多久遇到一次编译器问题?我多年来一直在使用商业选项(在 ARM7 和 8051 开发中)并且很少遇到困难。
    • @Nate:感到幸运!我们在这里为 ARM9 使用 gcc,当我们尝试使用优化时,编译器遇到了一个非常讨厌的问题。幸运的是,我们找到了解决问题的补丁。几年前,我在另一家公司工作,我们不得不从 gcc(用于 C166)更改为 KEIL,因为库中充满了错误。
    • 作为 CodeSourcery 的员工,我觉得我应该指出“商业解决方案”和“开源”不是一个非此即彼的选择——我们销售基于 GCC 的解决方案商业级支持以解决和防止此类问题。 (我们也不是唯一一家销售 GCC 支持的公司。)
    • 曾与 DEC 和 Intel 分别在他们的 VC++ 链接器和编译器上进行过合作,即使获得支持并不表示获得支持。我花了三个月的时间才得到一个可以组合一个 32MB 可执行文件的 DEC Alpha 链接器。三个月无法在他们的平台上发布我的代码。非常糟糕(也许是他们现在死去的原因)。
    • 我们使用 Rowley CrossWorks 编译器 - 引擎盖下的 GCC,但有商业支持。支持非常好 - 根据我的经验,比 IAR 更好。
    【解决方案3】:

    如果我没记错 Kiel 现在归 ARM 所有。 ARM 编译器在生成优质代码方面比 gcc 更胜一筹。我似乎记得 Keil 包括缩减版或免费版或任何版本的 rvct。所以我的问题是,当 gcc 存在并且使用良好时,是否有更快、更清洁、更好的代码值得使用商业解决方案?我会选择 gcc,除非您处于性能紧缩的情况,并且愿意在网络上免费提供的所有基于 gcc 的信息与您的商业工具之间进行心理转换,然后再返回。一般来说,使用 gcc 可能是更好的途径,因为在 Kiel 的 google 搜索框后面可能有大量信息,但基于 gcc 的解决方案的知识和信息量却掩盖了这一点。

    如果顾问使用一种工具为您完成项目的初始工作,然后在最后他们将工作移交给您,您可能会想要一个基于 gcc 的解决方案(这并不意味着说 vxworks gcc,或者甚至代码源 gcc,但一个通用的 gcc 解决方案),因为毫无疑问,您或您雇用的其他人将不得不拿起这个质量并使用它,并且使用 gcc 您更有可能找到愿意和有能力的人。

    【讨论】:

      【解决方案4】:

      我们使用 Keil 平台,对其性能和优化非常满意。几年前我运行了一些标准基准测试,它们非常好。另一个考虑因素是支持,到目前为止,Keil 的响应时间非常好,并且在一些棘手问题上的反馈也相对较好。

      仅供参考,如果您的项目将使用 Keil RTOS 并且您对此有任何疑问,可以购买源代码。

      【讨论】:

        【解决方案5】:

        应该可以构建代码以使用这两种编译器。像“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 版本更好地消除代码中的警告和错误。

        Kiel 可能会提供更紧凑的 ARM 代码,因此请保留它以进行目标构建。否则使用 GCC。

        【讨论】:

          猜你喜欢
          • 2016-03-12
          • 2016-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-15
          相关资源
          最近更新 更多