我是一名电子与通信工程专业的学生,在上大学之前,我对编程和计算机应用程序很感兴趣。我曾经专注于设计Windows应用程序并学习其技术,但是现在,我觉得这对我的领域毫无用处……我不必学习有关计算机科学和开发软件的所有知识!(我对吗?)
我知道VB .Net,C#和C ++。我的假期有很多时间,所以我想以编程的方式深入研究“电子领域”。那么您会建议学习或专注于什么?
我想要在微控制器和其他集成电路编程中使用的那些语言。C ++是否足够,还是我也应该精通C?请告诉我您的想法。
我是一名电子与通信工程专业的学生,在上大学之前,我对编程和计算机应用程序很感兴趣。我曾经专注于设计Windows应用程序并学习其技术,但是现在,我觉得这对我的领域毫无用处……我不必学习有关计算机科学和开发软件的所有知识!(我对吗?)
我知道VB .Net,C#和C ++。我的假期有很多时间,所以我想以编程的方式深入研究“电子领域”。那么您会建议学习或专注于什么?
我想要在微控制器和其他集成电路编程中使用的那些语言。C ++是否足够,还是我也应该精通C?请告诉我您的想法。
Answers:
是的,学习尽可能多地使用C几乎肯定是一个好方法(C ++将为您提供一个有用的起点,尽管如左图所示,仍然有很多可以借鉴的地方,尤其是小型嵌入式系统的编码之间的差异相比于为Windows之类的工具编写代码)。
某些特定大小以下的大多数微控制器(例如PIC,AVR,MSP430等)使用C(或汇编器),因为存在许多高质量(免费和$$版本-例如,许多商业编译器基于免费的GCC编译器)可用的C编译器。
您确实获得了其他语言,例如出色的PIC JAL(原始作者Wouter Van Ooijen,是该组织的成员),PICBASIC,Ada变体,但是由于它的流行和可用的编译器数量,我想说C是首选语言对于大多数。虽然这当然并不意味着它是最好的语言,但是使用最受欢迎的语言具有明显的优势(文档,支持,可移植性,协作等)。
对于像许多ARM变体一样更复杂,更大的32位micros,还有提供C ++和其他编译器。
我会直接进入并抓住一些开发板并进行编码。您可以选择低端的8位微控制器,如PIC16F(Microchip Direct上的许多入门工具包)
,中等范围的16位微控制器(如PIC24),以及某种C / C ++ /嵌入式Linux ARM-STM32F4 ARM Cortex M4 Discovery是一个非常便宜的开发板,可能值得一试。
在可编程逻辑和硬件描述语言(HDL-其中最大的两个是Verilog和VHDL)方面,可能值得拥有Diglent或类似公司的FPGA或CPLD开发板。
如果您不想等待开发板,可以下载MPLAB或MPLABX并使用出色的模拟器尝试PIC开发。其他工具也是如此,例如,您可以免费下载Xilinx ISE Webpack并试用HDL和可编程逻辑设计。
学习C语言,并获得一个便宜的微控制器开发板,例如MSP430或ARM Cortex,并至少编写和加载一些C程序。
我拥有计算机科学学位和软件开发背景,主要是游戏的C ++编程,现在是iOS游戏和应用程序,但是我的最后一份工作是准专业EE演出,首先是为ARM Cortex M3系统进行大量固件编程。 ,最后我学习了如何进行一些基本的电路设计和电路板布局,并设计了几个简单的电路板。因此,我基本上不得不面对使用最佳编程语言来桥接硬件/软件设计的问题,而这是负责这两个方面的人。
C绝对是您需要了解的语言。对于使用C ++编程的人来说,这很容易,而他们实际上不必将自己局限于C的功能集,说“这是同一件事”,但事实并非如此。尤其是C ++演变和收集功能的方式,以及主流C ++程序员使用这些功能的方式,与C ++应用程序相比,在相当大的C应用程序上工作确实是非常不同的事情。您的固件SDK将是一堆C库,适用于MCU的任何其他东西都将是C库,在MCU上有意义的任何操作系统都将用C编写,依此类推。
就是说,由于许多MCU工具链最终都使用GCC作为其编译器,因此,如果您使用的是不错的MCU系列,几乎可以肯定会有C ++编译器可用。但是,您必须非常小心使用的功能,尤其是标准库中的功能,因为最终生成的二进制文件太大而无法容纳在设备上非常容易。我认为在嵌入式设备上使用C ++是一个很好的案例,C ++具有很多不错的功能,这些功能杂乱无章,没有大小或速度上的损失,您只需要知道自己在做什么,并编写相应的代码即可就巧妙地使用功能而言,在频谱的C型端比在STL端更远。
不要太在乎那些说您可以在具有正确的嵌入式解释器的MCU上使用Lua或Python的人,等等。是的,我确实做到了,而且很有趣,但是目前,更多的是玩具项目和出现在《 Hack a Day》上的东西。我想我们会看到更多类似的东西,因为摩尔定律被无情地应用到了最小的处理器上,这是在曾经有很多汇编的游戏中发生的,然后它们在C和C ++上的使用时间更长比起其他任何人,现在一切都变得如此之快,开发人员的生产力是如此重要,以至于许多开发工作都是使用嵌入式高级语言或直接使用高级语言完成的。即便如此,距离看到公司雇用具有Python和Lua背景的固件程序员还需要几年的时间。
也不要在组装上花费太多时间。熟悉这些概念还不错,但是,如果有任何汇编编程,您不太可能会发现自己做得很多。就像游戏和嵌入式游戏一样,这是一种“常识”,这通常是由在这些领域没有实际工作的人重复的。但实际上,您根本不可能编写任何程序集,而且如果这样做,可能仅需几行代码即可进行优化,或者只需使用没有API的硬件即可(但是您会在编写包含几行汇编的代码之后)。我从事过多个游戏,并且开发过板/固件设计项目,而我为商业项目编写的组装线总数很低。它'
asm()
很好地嵌入到C代码中的内联汇编语句()中。这在各个方面都是一个成功的组合。高水平但紧凑,偶尔会碰到装配,例如,时机需要恰到好处。该avr-gcc
工具链已经这样做了很多与C宏,所以你永远不会另行通知。
我同意其他所有人的观点,即您需要在C语言方面非常胜任。
我还建议也学习至少一种汇编语言。这样做将使您成为更好的C程序员。您需要知道引擎盖下发生了什么,这在嵌入式世界中比在PC世界中要真实得多。
了解您的C生成的汇编程序将使您在速度和紧凑性方面编写更多的最佳C。更快的代码意味着:
代码更紧凑意味着您可以使用内存更少的便宜MCU。或有更多功能的余地。
您可能考虑学习的另一种语言是Verilog。这是一种硬件描述语言,它与C确实有很大的不同,不仅在外观上,而且在功能上。Verilog将为利用赛普拉斯PSoC3和5等功能非常强大的芯片开辟道路。这是一个具有模拟和数字可重编程硬件的微控制器,它使您可以做一些令人惊奇的事情,而这是其他任何MCU都很难做到的。您还可以进行FPGA设计。
作为在国防界工作了8年的MSEE,我可以告诉您,了解如何在LabVIEW(一种图形化的,严格类型化的数据流语言)中很好地编程,意味着您将永远工作。
LabVIEW最初是为硬件工程师设计的一种编程语言,您可以看到这一点,因为代码看起来非常像电路图。但是,在过去的25年中,LabVIEW已发展为功能丰富的功能完善的语言,并支持对象定向和多线程。实际上,我认为没有其他编程语言(基于文本的语言或其他语言)比在LabVIEW中更容易编程多线程应用程序。这在很大程度上是由于它的数据流范例。随着CPU内核数量的不断增加,LabVIEW作为通用语言将变得越来越重要。
了解LabVIEW的另一个好处是,使用LabVIEW FPGA模块对FPGA进行编程仅需一点时间,该模块可以将LabVIEW代码并在幕后将其转换为VHDL,然后再传递给Xilinx编译器。您还可以使用LabVIEW技能,通过使用VxWorks或Phar Lap 的LabVIEW实时模块,过渡到编程实时代码。
注意:我是经过认证的LabVIEW开发人员。