为不同的目标MCU开发C / C ++代码之间的区别

时间:2018-05-18 20:22:04

标签: c++ c arm microcontroller powerpc

我看到很多关于嵌入式开发人员职位的职位描述,例如要求了解ARM微控制器上的嵌入式C编程。

对我来说不太清楚的是,了解为特定ARM处理器开发C,或为PowerPC或其他类型的处理器开发C之间的区别是什么。使用C进行开发我们从实际的指令中抽象出来,这些指令将被编译和体系结构,为什么它真的重要?

我猜想主要是了解嵌入式开发,了解内存限制等,以及实际的目标处理器并不重要。例如,一位为PowerPC MCU编写代码多年的开发人员不如为基于ARM或其他类型的MCU开发代码一样好吗?

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

4 个答案:

答案 0 :(得分:2)

所有关于Linux和内核的文章,但99%的嵌入式工作纯粹是裸机。因此,核心和外围设备的知识是必不可少的。

在大多数情况下,在Linux程序员学习如何编写裸机之前,它们都没用。

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

答案 1 :(得分:1)

好吧,我自己还没有编写任何ARM代码,但我认为特定于ARM的经验(没有特别的顺序):

  • 使用ARM特定工具链的经验(特别是该工具链的非标准部分,专有软件等)
  • 了解哪些相关库可用于ARM而非英特尔机器,以及他们的ARM版本是否具有足够的性能,足够稳定等等。
  • 了解编译为ARM机器代码时某些编码模式的外观,以及对低级实现的某些选择的良好自由裁量权。
  • 能够在必要时编写内联ARM程序集
  • ARM系统的知识'缓存布局
  • 能够估算/预测代码的功率经济性而不仅仅是其性能(因为ARM处理器有时更关注代码)。

答案 2 :(得分:1)

答案是肯定的,不是。

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

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

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

答案 3 :(得分:1)

像往常一样,这取决于。

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

如果你要在更深层次上发展(如果我们谈论ARM及其拇指,拇指2和ARM ......那就是疯狂),这是必须的。

此外,由于遗留原因或使我们的生活更美好,每个架构都增加了一些技巧。例如,ARM PC指向下一个要执行的指令,这在PowerPC或RH850或其他任何情况下都是完全不同的。

在上面(我的意思是,在OS之上或接近OS),编译器使用比我们更好,但无论如何,知道它是如何工作是一件好事(并且它肯定会使调试更容易)< / p>