鉴于我作为通才的背景,我可以涵盖从模拟电子学到编写与RDBMS后端接口的简单应用程序的大部分领域.
我目前在一家开发硬件以解决行业特定问题的公司工作.我们有一位经验丰富的程序员,他们已经编写了商业应用程序,视频游戏以及其他一些用于PC的东西.但当我与他谈论做低级编程时,他同时表达了对加入该项目的兴趣和怀疑/不确定性.
即使谈论PC,他在语言层面的操作似乎比低层的东西(指令集,ISR)更舒服.尽管如此,他还是个聪明人,我认为一旦他完成了最初的学习困境,他就会很享受这项工作.但也许这是我对低级别话题的热情......如果他真的感兴趣,也许他已经开始在那个方向学习东西了?
您是否有过制作软件到硬件(或低级软件)过渡的经验?或者,更好的是,只选择一个软件,并将他转换为低级别的东西?
编辑:
PS我很想听听响应者他们自己的背景是什么 - EE,CS,两者?
在一天结束时,一切都是API.
需要在微控制器内编写SPI外设的代码吗?那么,获取数据表或硬件手册,并查看SPI外设.这是一个庞大而复杂的API.
问题是您必须了解硬件和一些基本的EE基础知识才能理解API的含义.数据表不是由SW开发人员编写的,而是为硬件工程师和软件工程师编写的.
所以这一切都从硬件的角度来看(面对它 - 微控制器公司是一家充满硬件/ asic工程师的硬件公司).
这意味着过渡绝不是简单明了的.
但这并不困难 - 这只是一个略有不同的领域.如果您可以实施学习计划,请从Rabbit Semiconductor的工具包开始.那里有足够的软件,所以一个软件开发人员可以毫不费力地挖掘,并且硬件很容易处理,因为一切都包含在漂亮的小库中.当他们想要做一些复杂的事情时,他们可以深入了解直接硬件访问并在较低级别进行操作,但同时他们可以做一些非常酷的事情,例如构建小型web服务器或云台网络摄像机.还有其他公司有类似的产品,但Rabbit真正专注于为软件工程师轻松制作硬件.
或者,让他们进入Android平台.对他们来说,它看起来像是一个unix系统,直到他们想要做一些有趣的事情,然后他们就会有攻击这个小问题的愿望,他们将学习硬件.
如果你真的想跳到最后,请使用arduino工具包 - 廉价,免费的编译器和库,非常容易入手,但是你必须把电线挂起来做一些有趣的事情,这可能太大了一个不情愿的软件工程师的障碍.但是在一个正确的方向上有一点帮助和一些推动,他们会非常激动地拥有一个像nightrider灯一样的LED显示屏......
-亚当
*是的,这是一个技术工程术语.
我曾与之合作过的最优秀的嵌入式程序员是EE培训和学习SW的工作.最糟糕的嵌入式开发人员是最近的CS毕业生,他们认为SW是解决问题的唯一方法.我喜欢将嵌入式编程视为SW金字塔的底层.它是一个稳定的抽象层/基础,使应用程序开发人员的生活变得轻松.
"硬"是一个非常相对的术语.如果你习惯在紧张,有时令人费解的方式思考,你需要为小型嵌入式代码(例如,你是一个驱动程序开发人员),那么肯定这不是"硬".
不要"庆典"(没有双关语意)外壳脚本编程,但如果你写Perl和shell脚本了一整天,那么它很可能是"硬".
同样,如果你是Windows的UI用户.这是一种不同的想法.
为什么嵌入式开发“很难”:
1)上下文可以切换到每个机器指令之间的中断。由于高级语言构造可能会映射到多个汇编指令,因此甚至可能在一行代码中,例如long var = 0xAAAA5555。如果在中断服务程序中访问,则在16位处理器中,var可能仅设置为一半。
2)进入系统的可见度受到限制。除非您自己编写,否则您甚至都没有输出到Hyperterm的信息。仿真器并非总是能如此出色或始终如一地工作(尽管它们比以前要好得多)。您将必须知道如何使用示波器和逻辑分析仪。
3)操作需要时间。例如,假设您的串行发送器在发送另一个字节时使用中断来发信号。您可以将16个字节写入传输缓冲区,然后清除中断并想知道为什么从不发送消息。通常,时序是嵌入式编程中一个棘手的部分。
4)您会遭受微妙的竞争条件,这种情况很少发生,并且很难调试。
5)您必须阅读手册。很多。您不能通过无所事事使其工作。有时必须正确设置20件事才能得到您想要的东西。
6)硬件并不总是可以正常工作或容易损坏,需要花费一些时间才能弄清硬件是否损坏。
7)嵌入式系统中的软件维修通常非常昂贵。您不能只更新网页。召回可以消除您在设备上获得的任何利润。
可能还有更多,但我要解决这个比赛条件...