嵌入式编程是否更接近于电气工程或软件开发?[关闭]


34

我正在从事在微控制器上编写嵌入式C的工作。起初,我本以为在软件堆栈中嵌入编程对我来说太少了,但也许我在想错了。

通常我会放弃编写嵌入式代码的机会,因为我不认为自己是电气工程师。这是一个错误的假设吗?我是否能够为嵌入式系统编写有趣且有用的软件,还是会因为软件堆栈太低而踢自己?

我上了计算机科学学校,对编写编译器,考虑并发算法,设计数据结构以及开发框架感到非常满意。但是,我目前受雇为一名Web开发人员,这并未激起我刚才描述的有趣的事情。(我目前处理的问题是:“此复选框必须在左边4像素处”和“此日期格式错误”。)

感谢大家的投入。我知道我必须自己做决定,我只是想澄清一下成为嵌入式程序员的含义,以及是否适合我觉得有趣的事情。

Answers:


33

如果您想擅长于嵌入式系统,那么可以,有时候您需要像EE一样思考。通常,这是在编写代码以与各种外设(UART,SPI,I2C或USB等串行总线),8位和16位定时器,时钟发生器以及ADC和DAC接口的情况。用于微控制器的“数据表”通常描述了每个寄存器的每一位,因此涉及数百页。能够读取原理图很有用,因此您可以使用示波器或逻辑分析仪来探测电路板。

在其他时候,它只是在编写软件。但是在严格的约束下:通常您将没有正式的OS或其他框架,并且可能只有几个KB的RAM,也许还有64 KB的程序存储器。(这些限制是假设您正在使用较小的8位或16位微控制器进行编程;如果您在32位处理器上使用嵌入式Linux,则不会有相同的内存限制,但仍然必须处理任何自定义Linux发行版不提供驱动程序的外围硬件。)

我在EE和CS方面都有背景,所以我喜欢硬币的两面。我也进行一些Web编程(主要是PHP)和台式机应用程序(C#和Delphi),但是我一直最喜欢从事嵌入式项目。


感谢您的回答。这些限制并没有真正打扰我。我只是将自己视为软件专家,而不是电气工程师。您会说“低级编程”与“高级电气工程”相同吗?
Jeremy Heiler 2010年

对于32位和Linux的观察结果为+1-我以前在电信领域工作,而交换机硬件就像为简化版本的Amiga(Motorla 68k处理器)编码一样。度过了非常快乐的时光-有时会错过它。
加里·罗

3
@Jeremy,是的,当您尝试找出复杂外设的设置,或查看示波器上的串行位流时,有时似乎您正在执行低级编程,有时则必须像高水平一样思考。级EE。您可能会花费大量时间在IDE的调试器窗口中查看寄存器内容。在该级别上,您正在直接查看硬件。
tcrosley

20

@tcrosley的答案非常好。您无需成为电气工程师,但了解基础知识会有所帮助。

我认为您不必担心“软件堆栈太低”。作为嵌入式工程师,我不得不解决许多非常有趣的问题。您提到您喜欢的任务列表:

  • 并发算法-与使用OS线程模型一样,处理异步硬件级中断也面临许多有趣的挑战。

  • 设计数据结构-检查。专为紧凑和高效访问而设计。

  • 开发框架-检查。在裸露的骨骼系统上,您最终可以设计一个小型OS。

  • 编写编译器(也许不是),但是最终可以进行低级代码优化,类似于编译器的程序集生成步骤。

我会选择每天通过UI编码在嵌入式系统上工作。您将永远不会忘记第一次看到机器开始按照编程的方式移动。比推动像素更令人满意。


感谢您的一对一映射AShelly。对于嵌入式工作环境一无所知,很高兴知道这一点。
Jeremy Heiler 2010年

6

作为嵌入式程序员,我的工作是使自定义硬件起作用。通常,我在开发板上开发了一系列软件,或者开发了较早版本的硬件。当新的电路板出现时,我的工作是将我的软件放在电路板上并演示一切正常。

因为几乎总是存在某种问题,所以调试技能至关重要。如果外围设备不工作,是否是芯片损坏,与芯片的连接不良,错误的代码或片上外围设备的使用不正确?唯一的方法就是进行广泛的调试。这意味着您对示波器,网络分析仪,逻辑分析仪和目标调试器感到满意。调试过程几乎变得科学了。我提出了一个假设,设计了一个实验以提供支持或反对我的假设的证据,然后进行测试。

在评估实习生或新的嵌入式工程师时,此技能至关重要。所有软件都有问题,但是一旦您开始接触物理世界,这些问题的种类就会成倍增加。我工作的本质是解决概念与现实之间的一系列长期问题。


的确,调试对于单个嵌入式程序员来说是一项必不可少的技能,尤其是那种调试工作,该调试工作涉及查看与PCB上的轨道相连的存储示波器的显示,以诊断嵌入式软件存在的问题。:-)-但是,嵌入式软件工程师团队的一大优点是能够通过高级测试和质量控制技术自动捕获错误。
威廉·佩恩

5

以我的经验,使用“软件开发人员”帽子而不是“电子工程师”帽子在嵌入式系统软件开发方面取得了更好的结果。(诸如TDD和CI之类的实践在硬件工程中并不常见)

另一方面,我认为开发嵌入式系统的经验会使人变得更好。更全面的软件开发人员。


2
的确,在这里的嵌入式开发人员中,行业需要更多的CS人员,因为软件变得越来越复杂,我们在良好的软件质量实践方面确实很糟糕。
Bjarke Freund-Hansen 2012年

我认为CS人士也会喜欢它,因为编写嵌入式软件是软件开发人员可以做的最有意义的工作(从智力上,如果不是财务上的话)。
威廉·佩恩

3

大约8年前,我处于类似情况。那时,我在应用程序和服务器环境中进行了7年的软件开发。我以前与硬件打交道的唯一经验是,在十几岁时就用ZX频谱编写Z80汇编程序。

这当然是一个挑战。我发现在汇编器中处理芯片组非常有趣,并且我当然学到了很多有关硬件的知识。我的主要职责是使用软件测试硬件,因此学会应对编程并认识到您的软件错误实际上是硬件错误。实际上,有时软件和硬件人员可能需要花费大量时间才能确定错误是硬件还是软件。

我无法提供的一方面是设备驱动程序的工作。我从来没有真正理解过这一点,这是我自己和公司董事从未理解过的一件事。这只是一个公认的事实。

熟悉示波器和焊接离子将是必不可少的。记住,当硬件人员说出数字26时,他总是表示0x26是有用的。意识到硬件工程师发现与软件打交道非常令人沮丧,但随后,不涉及软件的硬件项目称为电缆。

我在那个职位上呆了4年,只是因为被偷猎了一个非常难得的机会而离开了。


感谢您分享托勒密的经验。我很感激。
杰里米·海勒

如今,许多电缆中也装有微处理器。:-)
威廉·佩恩

2

像所有事物一样,它需要一种平衡的方法。我喜欢在日常工作中使用嵌入式系统。他们使我在电气工程方面更好。物理计算和自动化非常令人兴奋。另一方面,构建Web应用程序和修补云计算真是太棒了。

如果操作正确,则软件方面将寻找使事情变得更聪明,更好的方法。硬件方面将使您时刻注意资源和超高效率。


感谢您的回答。我确实认为它能够稍微移动一些字段,但除了学习较低级别的内容外,然后再将其移回堆栈。
Jeremy Heiler 2010年

2

我不是电气工程师,但是我做了少量的嵌入式软件开发。我发现的最大问题是,我在数学方面有更基础的知识,因此我不知道如何在没有太多帮助的情况下轻松地将一系列复杂的高级数学算法分解为代码。

对于我需要进行信号处理,从输入中读取值,将数据提交到输出以及所有这类东西的所有东西,我发现它在概念上与我日常做的事情没有什么不同老式的软件开发人员。编写软件实际上就是它。当您需要超出实际软件范围时,我发现事情变得扑朔迷离,因为我不具备直接与硬件打交道的知识。这通常在尝试调试或测试代码时发生。如果您有一个非常出色的工具链,那么您可能已经集成了调试和仿真环境来减轻大部分麻烦,但是即使有所有这些可以帮助您,有时您仍需要回到基础知识并针对您的代码进行测试某种分析仪,事实是大多数嵌入式平台都没有

从这个角度来看,如果任务很简单并且特定于硬件的实际需求很少,那么我认为电气工程师对于嵌入式编程不是必不可少的。除此之外,我认为当一名EE在嵌入式环境中工作时会更加轻松,特别是当需要使用实际科学来确定问题所在时。


“ EE的Ouija-Board”-很棒,我很了解
Martin Beckett,2012年

2

我没有做过任何业务级别的嵌入式编程,但是我的学士学位主要是关于嵌入式系统的,我从中有几年的实际经验。我们在Atmel AVR上使用了C语言,并使用VHDL触摸了一些Texas Instruments芯片,并在ARM上有了一些理论知识。

在我们现有的程序中,大约有50%到60%的程序设计(C),20%的计划/设计(UML),其余的是物理电子设备(焊接,测量,布线,制造电缆等)。我也同意这样做是非常有趣和有趣的,而且我实际上希望自己也能从事嵌入式系统工作。embedded,由于嵌入式系统市场很小,我不得不求助于简单的旧版Java EE。

但是我离题了。我要说的是,上述百分比与现实世界的工作相当接近,因为我们的老师有自己的事业,并且还提到他们将尽力使其尽可能切合实际。我们甚至在项目中期的需求中随机旋转了180度,呵呵。

至于堆栈。了解嵌入式编程将为您提供巨大的机会,以创建自己可以在亚洲的真实工厂中生产的非常真实的硬件产品,然后在您的场所(无论是在家中还是在自己的公司中)组装它们。非常有趣!您还可以制作许多对家庭有用的小工具,例如运动控制的房灯,咖啡机的计时器,以自动准备您的早午餐等。确实令人兴奋的东西!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.