【问题标题】:Is code easily portable between Cortex A5 and Cortex A9 made by two different companies?代码是否易于在两家不同公司生产的 Cortex A5 和 Cortex A9 之间移植?
【发布时间】:2018-08-10 18:42:00
【问题描述】:

为一家公司制造的 Cortex A5 编写的代码可以毫无困难地移植到另一家公司制造的 Cortex A9 上吗?

我想编写一些在 Atmel 的 SAMA5D4 (Cortex A5) 上运行的裸机 C 代码,该代码从具有并行接口的 CMOS 相机获取视频并将其编码为 H.264。该芯片可以以 720p 进行硬件编码。

稍后,我可能想构建一个可以以 1080p 编码的类似设置,因此我想升级到更昂贵的芯片,NXP i.MX 6Solo (Cortex A9)。

所以我想知道我是否会遇到严重的问题,或者以后移植是否容易。我的直觉告诉我这应该很容易,但我想我最好先问问专家。如果这是一个巨大的头痛,虽然我可能会先从更昂贵的芯片开始。

我是新手,对 ARM 芯片甚至 C 完全没有经验,但我愿意学习 :-)

【问题讨论】:

  • 你知道你的方程有多少变量吗?
  • 我不太明白你的意思。如果您的代码是纯 C(没有内联汇编程序),那么我不明白您为什么会遇到问题,C 编译器将为 Cortex A9 生成正确的代码(前提是您有支持 Cortex A9 的 C 编译器。
  • @Pablo 我可以想象代码,即使在纯 C(嵌入式系统很少可能)中也会生成一些特定于硬件的寄存器。
  • @Eugene 这就是编译器的重点,所以你不必担心这些事情。一般来说,使用纯 C 代码和针对目标的 C 编译器,您将获得一个正在运行的程序。
  • @Pablo 只是好奇,你有没有编写过裸机嵌入式目标?

标签: c arm


【解决方案1】:

如 cmets 中所述,如果最初编写代码以尝试从应用程序代码中清晰地抽象出特定于平台的细节,则此任务会变得更容易。这并不像简单地替换 boot.s 那样简单,而且在您测试移植之前,您不能真正声称已经完成。

两个处理器之间的大部分架构行为将保持不变,C 编译器应该能够利用微架构优化。这种优化可能不是您通过一些手动工作所能达到的最佳效果。

您可能会遇到棘手问题的地方是代码中对内存排序或代码与异常之间的潜在交互敏感的任何点。 Cortex-A9 比 Cortex-A5 更乱,迁移可能会暴露代码中的错误。图书馆现在应该是稳定的,但仍然存在需要注意的风险。预测这类问题非常困难,如果您自己编写大部分代码,您可能需要为移植任务构建一些应急措施。一旦代码在 A9 上稳定下来,此类问题就不太可能出现在 A5(以提供较低成本的生产选项)或更新的高性能内核上。

【讨论】:

    【解决方案2】:

    如果我将数学课本的一章剪切并粘贴到我的生物课本中,这是否有意义?它们都是用英语编写的。

    不,这没有任何意义。假设您坚持使用通用的 ARM 代码指令(英语),则代码不会从一个芯片(数学书)到另一个芯片(生物学)工作。大部分区别在于供应商逻辑在 ARM 内核之外,没有任何理由假设两个供应商在相同地址处具有相同外设,它们以完全相同的位对位、门对门工作。

    因此,一般而言,baremetal 不会工作,也不会像这样工作。一个非常高级的 printf 这个或那个 C 程序,当然因为你有很多抽象层,包括目标,甚至不必是手臂到手臂。现在说您当然可以制作,或者如果非常幸运的话,可以找到一个隐藏芯片之间差异的硬件抽象层,在该层,您可以理想地编写项目的该部分并将其移植。至于 arm 与 arm 的差异应该由编译器处理,甚至不必是 arm to arm 也可以是 arm to mips。您可能拥有的任何汇编语言或任何特定于核心的访问/指令都需要根据这两个技术参考手册进行检查,以确保它们兼容。可能不在 cortex-a 级别,但对于 cortex-ms,有一些地址空间核心特定项可能会影响高级语言代码,但要使这样的事情起作用,您必须将其隐藏在抽象层中。

    一般不,ARM 是底层核心,芯片差异与 ARM 无关,所以这就像从你用英文写的神秘小说中剪切和粘贴一章到你也在用英文写的传记中并希望后一本书的章节是有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多