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



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

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

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

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

你写的都是关于Linux和内核的,但99%的嵌入式工作都是纯粹的裸机。 因此,核心和外围设备的知识是安全的。

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

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

像往常一样,这取决于。

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

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

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

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

答案是肯定的和否定的。

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

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

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

好吧,我自己没有编写任何 ARM 代码,但我认为特定于 ARM 的体验是(排名不分先后(:

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

最新更新