引言

嵌入式开发有着悠久的历史,随着物联网和端级AI 1的兴起,我们迎来了嵌入式开发新的风潮。相应的岗位空缺不断涌现,技术人才也变得越发珍贵。然而,嵌入式开发对工程师较为全面的要求又让很多同学望而却步。从何学起,以什么样的学习路线稳步推进就成了摆在嵌入式开发学习面前的首要问题。本文以作者的学习经验和体会,为大家阐述一种学习路径,供各位同学参考。

一、嵌入式工程师必备技能总览

在介绍学习路径之前,我们先来了解一下要成为一个优秀的嵌入式开发工程师,需要具备哪些技能。我们从硬件和软件两部分来介绍。

v 硬件部分:

1. 了解主要器件(电阻、电容、电感、各类二极管、三极管、场效应管、逻辑门电路等)。

2. 熟悉万用表的用法,熟悉以上器件的测试方法和测试原理。

3. 了解器件封装的常见类型和特点(直插、表贴、QFNP、BGA、SOT等)。

4. 掌握使用示波器、逻辑分析仪进行测量的方法。

5. 熟知常见器件间通信方式和总线。

6. 能熟练阅读器件手册(datasheet)并根据项目需求对器件进行选型、电路原理图绘制、电路板布局布线,配合结构工艺完成电路板设计。

7. 能根据故障现象对电路板进行测量排查,找出错误并修正。

8. 掌握基本的手焊、拆焊、飞线技能。

v 软件部分:

1. 熟练掌握C语言,熟悉位操作,位段和对齐方式等概念。

2. 掌握基本的汇编语言。

3. 熟悉编译连接的过程和编译指令。

4. 理解程序运行中堆与栈的分配和使用。

5. 熟悉linux系统操作和gcc编译工具、Makefile编写。

6. 熟悉主流嵌入式CPU的架构(如ARM)

7. 熟悉内核态和用户态,了解不同程序运行的状态和编程注意事项。

8. 熟悉系统引导流程,能移植uboot和操作系统,构建根文件系统和设备树。

9. 掌握各类驱动程序模块的编写方法和编译方法。

10. 熟悉网络编程原理和数据库编程。

11. 了解UART,IIS,IIC,CAN,SPI等接口协议并能调试相关设备。

12. 了解至少一种物联网应用层协议如MQTT等。

13. 了解常见的低功耗无线通信模块的使用如wifi,蓝牙,ZigBee。

二、学习路径和重点

确实,我们嵌入式工程师需要掌握的知识很多,上述的每个知识点都可以展开作为一个单独学科或者专题进行讨论。上面繁多的技能要求可能让很多同学望而生畏,不过我们嵌入式工程师的任务主要是工程实现,而不是理论研究,因此对于上面的知识点,我们不需要特别深入的了解,只需要在概念、原理和实践方向进行理解和转化,让我们在工程实践中能受这些理论的指导,利用这些理论完成设计和调试即可。

有一些同学有这样的疑问:我以后的工作目标是嵌入式软件工程师,那我还需要硬件部分的知识吗?这个问题的答案是肯定的,主要有以下2个原因:

1. 嵌入式工程师没有严格的软硬件区分。

嵌入式工程师在实际工作中要不断和硬件打交道,硬件工程师提供了原理图和PCB布局布线图,我们嵌入式工程师要根据数据手册,器件编程指南以及硬件工程师提供的原理图进行软件设计,需要对设计进行上板验证,需要调试除错,这都需要我们有扎实的硬件设计功底,否则就需要不断的去找硬件工程师来咨询,必然会拖慢整个项目的进度。

2. 要想成为优秀的嵌入式软件工程师,一定要熟知硬件知识。

优秀的嵌入式工程师会参与项目的需求分析,器件选型等硬件设计工作,这不仅需要我们有丰富的行业经验,更需要我们有扎实的硬件基础。

另外,驱动编写等工作要求我们必须清晰的了解硬件的特性,如总线速度、时延、单双工模式、是否有缓冲、是否支持DMA等等,了解硬件的特性才能充分挖掘硬件潜力,提升速度和稳定性。

又如,在和硬件工程师一起调试设备问题时,嵌入式软件工程师需要根据硬件特点编写对应的测试程序,如并行总线的数据相位测试、串行差分信号的眼图测试,都需要嵌入式软件工程师编写对应的测试程序。如果嵌入式软件工程师没有相应的硬件知识,沟通成本会陡然增加,项目延期风险也就大大增加了。

综上,要做优秀的嵌入式工程师,而不是浑浑噩噩混日子的小工,就要严格要求自己,把硬件知识也补上来。

三、学习路径

万丈高楼平地起,不管多优秀的工程师都是从小白开始的。一条清晰合理的学习路线能帮助小白们高效率的完成基础知识的储备工作,注意这里是知识的储备过程,而经验是从实践中得到的。学习路径是多种多样的,不同能力和不同基础的人有不太相同的路径,这里分享我自己的学习路径,供大家参考。

1.了解计算机原理,操作系统基础知识。了解硬盘,内存和CPU的关系,程序是如何加载到内存运行的,了解操作系统进程切换和时间片的概念。

2.学习C语言,掌握编译器基本知识,能编写简单的程序。学习硬件相关知识。

3.购买洞洞板或者面包板,配合stm32等单片机核心板及相应教材,实践IO操作,中断,定时器,ADC,UART通信,IIC通信,SPI通信,CAN通信,看门狗等基本功能。在此过程中不断巩固提升C语言编程水平。

4.掌握了某一种单片机的基本编程和控制后,可以进军嵌入式操作系统的学习。在此期间可以继续使用STM32核心板,加购LCD串口液晶显示屏,不需要买带字库的显示屏,简单实用的串口显示屏就可以。然后可以从Free RTOS开始学习,这个操作系统代码少,概念清晰,易于学习操作系统的原理,也易于移植,基本上可以参考官网以及网络上的资料顺利的将操作系统移植到STM32核心板。通过FreeRTOS,可以学习嵌入式操作系统的基本原理,并可以编写LCD驱动程序来感受硬件驱动程序的概念。

5.学习嵌入式Linux操作系统,购买ARM9或以上版本的主控的开发板,要求开发板上至少有串口和网口。学习板级支持包的开发,交叉编译,GDB调试,UBOOT移植,内核移植,根文件系统制作,设备树,驱动程序编写,网络编程相关知识。

6.学习物联网相关模块的使用,可以购买ESP32核心板进行wifi,蓝牙的模块控制学习,购买其他模块实现其他小项目的练习。

通过上面的一番闭关修炼,你已经掌握了嵌入式开发的主要知识架构,接下来就要多做小项目,多练习排错,才能不断积累经验,走向大牛的人生巅峰。

四、学习方法

1.先整再零:

对于一个实例项目,先从整体出发,保证调通,能正常运行,出现预期结果。遇到模糊的问题先跳过,整体有了一定认识后再对个别细节进行深入了解,但不能跳过深入了解细节的环节。

2.边学边练:

开发是一类实践性很强的技能,嵌入式开发要与硬件打交道,就需要更多的动手操作和观察。

学习某一方向的嵌入式开发知识时,需要给自己的学习进行必要的“投资”,购买面包板、洞洞板、万用表、调温烙铁套装、各种器件、芯片,以至开发板。以上材料不需要一次性都买齐,可以按照当前学习的内容分阶段购买,经济条件有限的同学也不用担心,以上材料的开销除开发板之外都不贵,可网络购买。对于开发板,可以买学长学姐的二手板卡,能过测试就证明板卡是OK的。

有了学习材料,就要学以致用,例如今天学习了三极管做开关,就可以自己动手画画电路图,然后在洞洞板上实践一下,通过实际操作,加深印象的同时,也能验证自己的设计方案。

3.勤于思考和提问,网络如此发达,提问的能力和技巧我就不再赘述了。

五、技能提升建议

如果你进入的是一家规模较小的公司,那么你可能有机会接触各类技术。这是绝佳的锻炼机会,要注意不要特别深入某一方向而不关注其他技术,要知道大牛需要的是全方位的技能。

大公司的话,往往分工比较细致而明确,那就需要在完成自己工作的同时多关注项目组中其他同事遇到的问题,能协助解决最好,不能解决的要关注解决的情况和方法,多蹭经验。帮助别人的同时就是在帮助自己提高,多花时间处理实际问题是难得的经验。

不管在哪种场合工作,一定注意经验的积累,好记不如带墨,要用文字将经验记录下来,将遇到的问题详细描述清楚,没事的时候翻看一下,工作时间长了,你会发现这是一笔难得的财富。

限于篇幅,这里就不再多讲技术的细节了,希望各位读者在技术成长的过程当中都能有自己清晰的学习路径,安排好自己的学习计划,稳扎稳打,步步为营,走向成功之路!

嵌入式开发的学习路径相关推荐

  1. 嵌入式开发需要学mysql吗_学习嵌入式开发需要学习哪些课程?如何学习?

    针对很多的大学生嵌入式开发初学者来说,对嵌入式开发的学习还很迷茫.今天信盈达嵌入式培训老师给出参考建议:首先:嵌入式开发需要学习哪些课程?因为嵌入式开发的方向不同,所学习的内容会有所区别,但是无论是哪 ...

  2. 零基础学习嵌入式开发难吗?嵌入式开发需要学习什么

    对于零基础刚开始学习嵌入式的同学很多都会有这样的一个想法,嵌入式开发需要学习什么?如果是电子或计算机专业的人,相对来说,会比较容易入门;而非电子或计算机专业的人,应该先从基本的电路和C语言编程开始学. ...

  3. ARM嵌入式开发板学习路线指引

    如何入门嵌入式?嵌入式开发学习方法步骤  如何入门嵌入式?嵌入式开发学习路线指引  嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有linux,android.  平台:Cortex-A9 ...

  4. 一位久经沙场的嵌入式er站在初学者角度谈谈嵌入式开发与学习的一些问题

    一位久经沙场的嵌入式er站在初学者角度谈谈嵌入式开发与学习的一些问题 在刚刚涉足嵌入式开发的时候,总想找到这样一本书,它可以解决我一些这样那样的疑惑.但是遗憾的是,到现在也没有这样一本书面世,而且我想 ...

  5. 【嵌入式Linux】学习路径

    太久没有做过相关的开发和学习了,技术这东西,一段时间不用就容易忘记,再加上本来就不熟悉,忘得更快.大学时候在tb买了某原子的一块开发板,就开始的时候学习了一段时间,后面因为毕业工作等原因,就放那吃灰了 ...

  6. 嵌入式开发调试学习与思考

    截至今天,自己负责的一个项目算是告一段落,前前后后5个多月时间. 该项目是对公司设计的基于powerpc的处理器进行FPGA仿真阶段的软件验证,以及bootloader和kernel移植,以便芯片进行 ...

  7. 嵌入式开发必须学习qt吗?

    作为一名嵌入式开发行者QT是必须要学的,也许现在不学以后也要学习的.一方面,在嵌入式初学阶段,也就是裸机开发,可能需要自己写上位机,QT就是一个做上位机的一个好用的工具,一般只要会c++学习QT一天就 ...

  8. 嵌入式开发需要学习哪些东西

    刚刚读到这篇文章,对于刚入门嵌入式来说挺有用的,献给向我一样正在迷茫,苦于没有头绪,没人指引的学习朋友们. 主要讨论下嵌入式技术学习方法,主要是针对嵌入式软件. 嵌入式技术是一门边缘科学(又称交叉科学 ...

  9. 嵌入式入门学习笔记6:[转]嵌入式开发需要学习哪些东西

    本文转自迅为开发板iTOP-4412开发板实战手册:http://www.topeetboard.com 刚刚读到这篇文章,对于刚入门嵌入式来说挺有用的,献给向我一样正在迷茫,苦于没有头绪,没人指引的 ...

  10. #杂谈 个人嵌入式开发的学习

    本人目前从事的是嵌入式软件开发的相关工作.这是一个关于个人做项目时用过的开发工具的杂谈,仅是为了记录学习经历,同时也为和我有同样瞎搞东西的爱好者提供一个学习思路. 前言 我的技术栈: 下面介绍一下我用 ...

最新文章

  1. 网页中Google Map的使用
  2. WinCE控制面板添加应用程序
  3. DBGridEh导出Excel等格式文件
  4. ccs 移植创建新工程_CCS-6-新建TMS320F28335工程(可移植)).pdf
  5. qchart能绘制三维_通图GIS | 用多种体展示方案适配复杂三维场景分析、表达
  6. 模拟退火算法之旅行商(TSP)问题matlab实现
  7. 衡量高分辨率图片生成效果的指标PSNR/SSIM
  8. meshlab模型简化
  9. Mac上 安装Drozer 并使用
  10. Unity 3D 热更新之基于 Asset Bundle Browser 的 AssetBundle包
  11. 关闭oracle job定时任务,oracle job 定时任务,定时执行
  12. 再也不写个人日记了,再也...
  13. C/C++的左值和右值
  14. MT6752/32平台 KK和L版本支持的虚拟sensor类型有哪些
  15. Rockchip RK3588 kernel dts解析之PCIe
  16. OBS框架流程和源码分析七一视频流捕获机制
  17. event.target与event.currentTarget的差异
  18. 【Python】Conway生命游戏学习
  19. AES加密解密(含python解析工具)
  20. 植物大战僵尸关卡金币存档修改过程

热门文章

  1. android studio连接模拟器 mumu模拟器,雷电模拟器,夜神模拟器
  2. matlab人口增长线性回归拟合_科学网—matlab线性拟合 - 张瑞龙的博文
  3. HBuilderX格式化css
  4. Freeswitch的Proxy(代理转发)模式和Bypass(旁路)模式的正确配置
  5. 怎么把word压缩到最小?
  6. 双组百分比堆积柱形图的制作
  7. 火箭是这样连胜的(转载)
  8. 【Matlab 六自由度机器人】运动学逆解(附MATLAB机器人逆解代码)
  9. 财务内部收益率用计算机怎么算,财务内部收益率计算公式
  10. 电视hdmi接口在哪_HDMI是什么意思?花5分钟看完这篇文章:原来如此!我现在明白了...