【问题标题】:Difference between developing C/C++ code for different target MCUs [closed]为不同目标 MCU 开发 C/C++ 代码之间的区别 [关闭]
【发布时间】:2018-05-18 20:22:04
【问题描述】:

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

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

我猜想了解嵌入式开发知识、了解内存限制等很重要,而实际的目标处理器并不重要。例如,一个为 PowerPC MCU 编写代码多年的开发人员难道不能与为基于 ARM 或其他类型的 MCU 的代码开发一样出色吗?

也许我在这里遗漏了一些明显的东西。请有人举例说明为一种类型的处理器和另一种类型的处理器编写 C/C++ 代码之间可能存在的一些主要区别。谢谢

【问题讨论】:

  • 一方面,不同的 MCU 会有不同的板载组件,例如定时器、GPIO、UART 等,并且使用这些东西会因 MCU 而异。使用新的微控制器时,需要大量研究数据表。
  • 好的,好点。特定算法的执行速度也可能不同?
  • @Engineer999 如果算法设计得当,这应该无关紧要。特定于硬件的优化应该由编译器很好地处理。
  • 其中一定比例是通用的,语言本身。但是通过指定一个目标,他们可能会无缘无故地这样做和/或他们这样做是为了解决出现的非通用语言问题、工具、处理器细微差别以及与该工作级别相关的其他非语言问题.为什么不直接问这些公司他们在寻找什么?
  • 如果您特别关注微控制器,那么大部分工作都与 C/C++ 无关,而是与硬件有关。

标签: c++ c arm microcontroller powerpc


【解决方案1】:

你写的都是关于 Linux 和内核的,但 99% 的嵌入式工作都是纯裸机的。因此,核心和外围的知识是必不可少的。

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

而这个时间需要花费你的雇主的钱。

【讨论】:

  • 所有的水壶、洗衣机等 rtc,大多数汽车、航空电子设备......都是纯裸机。或者裸机 + rtos(与传统的不一样)。
  • 电话妻子没有嵌入,因为它们是独立设备。使用这种逻辑 PC 计算机和 CRAY 超级计算机也是嵌入式设备。
【解决方案2】:

像往常一样,这取决于。

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

如果您要进行更深层次的开发,这是必须的(如果我们正在谈论 ARM 及其 thumb、thumb2 和 ARM ......这太疯狂了)。

此外,每个架构都因为遗留原因或为了让我们的生活更美好,增加了一些技巧。例如,ARM PC 指向下一条要执行的指令之后的指令,这在 PowerPC 或 RH850 等中是完全不同的。

除此之外(我的意思是,高于或接近于操作系统),编译器过去比我们更好,但无论如何,很高兴知道它是如何工作的(而且肯定会使调试更容易)

【讨论】:

    【解决方案3】:

    答案是肯定的和否定的。

    • 如果工作更多与应用相关,那么 MCU 特定知识将无济于事

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

    请详细查看职位描述以了解预期的工作类型。

    【讨论】:

    • 谢谢。如果开发是在内核级别,那么为什么了解 MCU/CPU 至关重要?
    • 大多数情况下,如果他们正在寻找嵌入式开发人员,那么没有内核......您的代码是整个事情的入口点......并且是唯一运行的东西
    • @Engineer999 在内核的大部分部分进行编程时,尤其是在编写设备驱动程序时,了解硬件及其工作是必不可少的。
    • 如果你有一个操作系统,那就是将硬件抽象一点。但是在“内核级别”,您仍然需要知道如何为特定硬件编写驱动程序和东西。
    • 如果你有一个操作系统并且那个操作系统是 Linux 内核,那么一定要使用 C。
    【解决方案4】:

    好吧,我自己没有编写任何 ARM 代码,但我认为 ARM 特定的体验将是(无特定顺序):

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

    【讨论】:

    • 我将添加特定的 ARM 操作模式 - SVC、USR、IRQ、FIQ。一些 ARM 嵌入了 TrustZone 技术。当然,熟悉特定的 MCU/CPU 也很重要,因为基于 ARM 的处理器本身就非常不同。是的,调试。如果不熟悉 ARM 寄存器,就很难调试经常发生的不同异常。
    • 如果我们讨论与应用处理器完全不同的 uC,再加上外围设备知识
    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多