微控制器编程需要学习哪种语言?

har*_*rry 13 c embedded microcontroller

我正在进入微控制器编程并且听到了截然不同的观点.微控制器编程在业界最常用的语言是什么?这是你在自己的工作中使用的吗?如果没有,为什么不呢?

PS:我希望答案不是汇编语言.

Gre*_*ill 38

根据我的经验,你绝对必须知道C,汇编语言也有帮助.


Yan*_*min 13

除非您正在处理非常简单的微控制器(如RS08系列),否则C是迄今为止的首选语言.了解C,了解volatile和const等功能.还要了解架构 - 什么是高效的,什么不是,CPU能做什么.这些与"桌面"环境有很大不同.学会爱stdint.h.

随着项目的扩展,您将遇到C++(或受限制的子集).

但是,您需要了解CPU以及如何将基本程序集作为调试工具阅读.没有这种技能,你就无法成为优秀的嵌入式开发人员.


Cli*_*ord 12

你听到了什么'对比'的观点?在某种程度上,它将取决于微控制器和应用程序.但是C几乎适用于所有架构(我不愿意说所有,但可能是你将遇到的所有内容); 所以在这一点上,学习C会给你最大的报道.

对于所有体系结构,汇编程序和C编译器的可用性几乎是给定的.对于32位和大多数16位架构,C++也将可用.我遇到的值得注意的例外是Microchip的PIC24/dsPIC器件,Microchip自己的基于GNU的编译器不支持C++(尽管第三方编译器可能会这样做).

虽然有用于8位微控制器的C++编译器,但C++在这些平台上并不普遍,而且编译器通常是完整语言的子集.对于通常使用8位的应用程序的类型(或更具体地说,大小),C++可能是有用的但不是在更大的应用程序上,因此C通常是足够的.

嵌入式系统中有很多关于C++神话 ; 虽然语言大于C并且具有可能损害系统性能或容量的结构,但您只需为使用C++的内容付费.但是当然如果你使用的只是C子集,那么C在任何情况下都是足够的.

关于C(和C++)的观点是它是一种系统级语言; 它将在你的微处理器上运行,没有额外的支持,只需一个非常简单的运行时启动来初始化处理器(可能还有外部SDRAM),初始化静态数据,建立堆栈,以及在C++调用静态构造函数的情况下.这就是为什么与目标特定的汇编程序一起,它用于构建操作系统和内核 - 它不需要运行操作系统或内核本身.

我建议它可能取决于微控制器的原因之一是,例如它是一个带有几Mb外部SDRAM的ARM9,至少说4Mb Flash(通常也是外部 - 内存占用大量的芯片空间)那么你可以运行一个"重量级"操作系统,如Linux,WinCE或Symbian,甚至是大型RTOS,如QNX或VxWorks.然后你选择的语言(一旦你的操作系统工作),将受到操作系统的影响,但对于实时应用程序,C和C++仍将占主导地位(或者经常在军事,航空电子和一些传输应用程序中使用Ada).

对于中型应用程序 - 几百KB的代码和数据空间 - 可以在.NET-Micro平台上运行C#; 然而,几年前,我在英国的嵌入式系统展上,就在它发布之后,我就参加了这个展示.当我问"但是它是实时的"这个问题时,被告知,"你不需要WinCE吗",很多观众都有喘气和呻吟,有些人不再浪费时间了然后(包括我).

所以我仍然对你所听到的"对比"意见感兴趣; 因为虽然可以使用其他语言; 你的问题的答案:

微控制器编程在业界最常用的语言是什么?

那么肯定的答案是C; 由于我给出的原因.对于那些可能选择对此主张进行争论的人来说,这里有统计数据(请注意2004年后文中解释的不同调查方法).然而,为了增加替代品的集合,我曾经在Forth上花了两年时间在嵌入式系统上编程,我知道人们仍在使用它,但它有点像利基.


jos*_*rry 11

我已成功使用C和C++,但在几乎所有的微控制器项目中,您都需要熟悉目标微型的汇编语言.如果只是为了调试低级硬件问题,汇编将是不可或缺的,即使它是粗略的熟悉.

我认为从桌面环境迁移到微型计算机时,对我来说最困难的事情是几乎所有东西都需要静态分配.你不会经常在micro中使用malloc/new,除非它有外部RAM.

我注意到你还用FPGA和Verilog标记了你的问题,看看Altium,他们有一个C to Hardware编译器,它可以很好地适应他们的集成环境.


Cra*_*een 9

关于汇编程序:

  • 首选C/C++而不是汇编程序.通过在C或C++中尽可能多地编写,您将获得更高的工作效率.这包括能够在PC上运行一些代码,这有助于开发更高级别的代码(应用程序层功能).
  • 在许多嵌入式平台上,让项目中的某个人对一个小型汇编程序感到满意是件好事.主要是为了获得启动代码和中断,以及可能用于中断启用/禁用的功能.这与完全了解它并不相同 - 仅仅是基本的工作知识就足够了.
  • 如果您将RTOS(例如μC/ OS-II)移植到新平台,那么您将需要更多地了解您的汇编程序.但希望您的RTOS已经很好地支持您的平台.
  • 如果您要提高CPU性能限制,您可能需要更彻底地了解汇编程序.但希望你没有太多地推动性能限制,因为这可能会拖累项目的可行性.
  • 如果您正在为DSP编写,您可能需要相当彻底地了解DSP的汇编程序.

  • 在汇编之前,用C或C++编写函数.接下来让编译器生成该函数的汇编列表.编译器为您完成了大部分工作; 只是在必要时旋转. (5认同)