代码之家  ›  专栏  ›  技术社区  ›  Engineer999

为不同的目标MCU开发C/C++代码之间的差异[已关闭]

  •  1
  • Engineer999  · 技术社区  · 6 年前

    我在相当多的嵌入式开发人员职位的工作描述中看到,例如,要求具备ARM微控制器上嵌入式C编程的知识。

    我不太清楚的是,了解为特定的ARM处理器开发C,或者为PowerPC或其他类型的处理器开发C,两者之间有什么区别。用C语言开发,我们是从实际的指令中抽象出来的,这些指令将被编译和架构,那么为什么它真的很重要呢?

    我想主要是要了解嵌入式开发、内存限制等,而实际的目标处理器不会太重要。例如,一个多年来一直为PowerPC MCU编写代码的开发人员,难道不会像为基于ARM或其他类型的MCU开发代码一样优秀吗?

    也许我错过了一些明显的东西。请给出一个例子,说明为一种类型的处理器编写C/C++代码和为另一种类型的处理器编写C/C++代码之间的主要区别。谢谢

    4 回复  |  直到 6 年前
        1
  •  2
  •   SHR    6 年前

    你写的都是Linux和内核,但99%的嵌入式工作都是纯裸机。因此,对核心和外围设备的了解至关重要。

    在大多数情况下,在Linux程序员学习如何编程裸机之前,它们是毫无用处的。

    而这一次需要花费你的雇主的钱。

        2
  •  1
  •   Jose    6 年前

    和往常一样,这要视情况而定。

    如果您打算在深层C级开发,最好了解体系结构,以便根据速度或/和内存(数据总线大小、每个时钟的指令等)优化代码。

    如果你想在更深层次上发展,这是必须的(如果我们谈论的是手臂和它的拇指,拇指和手臂……这是疯狂的)。

    此外,每一种建筑都因为遗留的原因或为了让我们的生活更好,增加了一些技巧。例如,ARM PC指向下一条要执行的指令之后的指令,这在PowerPC或RH850或其他任何程序中都有很大不同。

    除此之外(我的意思是,在操作系统之上或接近操作系统时),编译器通常比我们更好,但无论如何,了解它的工作原理是一件好事(而且肯定会使调试更容易)

        3
  •  1
  •   Vinay P    6 年前

    答案是肯定和否定。

    • 如果一份工作更多的是与应用相关的,那么MCU特定的知识将没有什么帮助

    • 如果软件开发是在内核/BSP/驱动程序或硬件相关方面,那么MCU/CPU硬件的知识是至关重要的。

    请详细查看工作描述,以了解期望的工作类型。

        4
  •  1
  •   einpoklum    6 年前

    嗯,我自己还没有写过任何ARM代码,但我认为特定于ARM的体验是(没有特定顺序):

    • 具有ARM专用工具链的经验(尤其是该工具链的非标准部分、专有软件等)
    • 了解哪些相关库在ARM而不是英特尔机器上可用,以及它们的ARM版本是否性能足够、足够稳定等。
    • 了解编译为ARM机器代码时某些编码模式的外观,因此,对于低级实现的某些选择有很好的判断力。
    • 能够在必要时编写内联臂组件
    • 了解ARM系统的缓存布局
    • 能够估计/预测代码的功耗经济性,而不仅仅是其性能(因为ARM处理器有时更关心这一点)。