3分钟搞懂嵌入式应用和驱动开发区别
3分钟搞懂嵌入式应用和驱动开发区别
目前嵌入式主流的几个方向,就是单片机开发、驱动开发、应用开发等等。
我做了这个行业也有10来年了,聊聊自己的看法和经历。
首先,来说说什么是嵌入式开发吧,简单来说,就是为各种电子设备开发控制程序。
从你家里的智能家电,到工厂里的自动化设备,再到汽车上的各种控制系统,还有航空领域等等,都离不开嵌入式开发。
而在这个大领域里,又分为驱动开发和应用开发两个方向。
先来聊聊驱动开发。这个工作主要是跟硬件打交道,需要你对底层的东西非常熟悉。比如说USB、PCIE、DDR、Flash等等,这些名词对做驱动开发的人来说应该是烂熟于心的。
驱动开发就像是在搭建一座桥梁,连接硬件和上层应用。没有好的驱动,再厉害的硬件也发挥不出应有的性能。
驱动开发的难度挺大,因为需要深入理解硬件的工作原理。有时候可能为了解决一个小问题,需要翻阅大量的数据手册,还有拿各种仪器,比如示波器啥的去测试信号。这个过程是比较苦逼的,但当你最终解决问题的时候,那种成就感也是难以描述的。
不过,做驱动开发也有它的"坑"。现在很多驱动都是芯片厂商直接提供的,我们能发挥的空间其实不太大。而且,一个公司里面专门做驱动的人往往不多,可能就那么几个。所以,如果你选择这条路,可能需要有点"独当一面"的准备,这需要有较深的经验积累。
再来说说应用开发。
这个方向,怎么说呢,就像是在搭积木,你需要把各种模块拼起来,构建出一个完整的系统。C/C++、多任务调度、通信协议,这些都是你的"积木块"。应用开发更多地关注于实现具体的功能和业务逻辑。
比如说,你可能需要开发一个智能家电的控制系统。你需要考虑如何读取各种传感器的数据,如何控制各个部件的工作,如何实现用户界面,如何进行网络通信等等。
应用开发的好处是,你能接触到更多的业务逻辑。这意味着你不仅仅需要站在技术的角度,还要对整个产品有更全面的理解,比如配合UI工程师进行原型流程的设计和优化。
那么,到底该选哪个呢?如果你是刚入行的新人,学历各方面也没什么优势,其实我是建议从单片机开发入手,后期如果有兴趣,再慢慢转到驱动。
单片机开发能让你对硬件有更深入的理解。你会知道一个指令是如何被CPU执行的,一个中断是如何被处理的,一个外设是如何被初始化和控制的。这些知识在你以后做驱动开发会有很大的帮助。
跟硬件打交道的经验,相对应用开发来说,目前也不存在年龄危机,毕竟硬件出现问题,都是要退货的,分分钟赔到老板破产,哈哈。
但是,如果你已经在这个行业工作几年了,那就得好好考虑一下了。每次转向,都看看能不能往上游走。技能要提升,视野也要开阔。如果这两样都没有,那就得慎重考虑了。
不管你选择哪条路,有一点是共通的:永远不要停止学习。嵌入式行业发展很快,新的技术、新的平台不断涌现。
说到学习,我觉得最重要的是要培养自学能力。在工作中,你经常会遇到一些之前没接触过的新技术或新平台。这时候,你就需要快速学习和适应。我的经验是,先大致了解这个技术的基本概念和原理,然后尝试写一些小的demo程序,最后再深入研究细节。这样可以让你在较短的时间内掌握新技术。
再说说调试技巧吧,这在嵌入式开发中非常重要。无论是单片机开发、驱动开发还是应用开发,你都会遇到各种各样的bug。
有时候可能是代码逻辑问题,有时候可能是硬件问题,有时候甚至可能是编译器的问题。遇到这些问题不要慌,要学会使用各种调试工具,比如示波器、逻辑分析仪、JTAG调试器等。同时,要培养良好的代码风格和注释习惯,这样可以让你更容易找到问题所在。
还有一点,就是要注意代码的可移植性。MCU的种类很多,更新迭代也快,你可能今天在开发STM32的项目,明天就要转到GD32、或者华大之类的平台上去了。
如果你的代码可移植性好,那么你就可以很容易地在不同的平台之间切换。
这对个人的代码水平就有一定的要求了,要尽量使用标准的C语言特性,避免使用与特定硬件相关的代码。
我在2018年的时候录制了一套程序架构的教程,算是比较系统地演示了程序可扩展性和可移植性的写法,还有程序架构的设计,目前想提升这块的可以找我安排。
最近看到很多老铁学习方向不对,特意写了一篇单片机学习路径:
[单片机不踩坑的学习路线
“单片机不踩坑的学习路线”)