详解从0开始的嵌入式学习路线,学什么、怎么学?

嵌入式是个大筐,什么都可以往里面装,电子、机械、计算机、自动化、测控、通信、物联网……很多很多专业都和嵌入式沾边,硬件、驱动、操作系统、网络、应用、算法……很多同学越学越迷糊,越学越感觉什么也不会。

首先要记住一句话,嵌入式学习奥义:先观其广,再究其深

然后今天给大家捋一捋,一个嵌入式工程师从0开始,到底该学什么,怎么学。

参考资料:

嵌入式基础、C语言技巧、各类协议、ARM等各种知识分类整理均在大叔的嵌入式小站:

详解从0开始的嵌入式学习路线,学什么、怎么学?

1. 基础课打底

高数、英语、计算机基础,C语言程序设计……,这些基础课都是很重要的课,不要因为它们是基础课就忽视其重要性。

基础好了之后学进阶的知识才会厚积薄发,才会游刃有余。这些基础课就像是的内功,内功不行,根本就发挥不出精妙的招式,同样内功深厚,学什么都快。

我重点提几项特别需要重视的基础课:

1. 英语  大多数技术文档、官方资料都是英文的,甚至只有英文版,英语学好了,受益终身。口语不是特别重要,我建议直接搜一本Datasheet,开始啃,不管理不理解,先啃单词。推荐S2C2440的Datasheet

2. 高数  算法以及控制等都对数学上有要求,如果以后想做跟算法和控制相关的,必须好好学,如果不是也至少得及格。

3. 数电 模电 很多同学会想,我不搞硬件,我只搞软件。但是其实嵌入式这行没有办法完完全全避开硬件,即使你做软件、驱动、上层应用,也得了解基本的电路知识,不然硬件同事给你的电路图你都看不懂,根本无法沟通,对于想成为嵌入式硬件工程师的那就得好好学,多实践,自己搭建、仿真、做出实际电路练手。

2. C语言能力非常重要

C语言能力是一个嵌入式工程师最最基础的能力之一,可以说是整个嵌入式的地基(就算成为嵌入式硬件工程师,也必须有一定的C语言能力)。

地基打好了,才有上层建筑。学到什么程度?

最低条件:要对指针特别清楚、数据结构和算法:软件方向要好好学,其他方向必须过一遍。

推荐书籍

  1. The C programming language 《C程序设计语言》
  2. Pointers on C 《C和指针》
  3. C traps and pitfalls 《C陷阱与缺陷》
  4. Expert C Lanuage 《专家C编程》

没必要全看,重在实践。

嵌入式硬件的路线其实非常明白,学各种电子知识、各类电路设计、PCB、电磁兼容……我就不赘述了,下面主要讲嵌入式软件该学什么。

3. 单片机

学完C语言,就可以学单片机了。

先学51,你把基础课学好,就会发现51很简单。

1. 要有个开发板,学串口、中断、定时器、GPIO

2.买一些小模块,LCD显示屏、红外、舵机、超声波

3.自己搭建一下单片机最小系统

做个贪吃蛇、调温、测距什么的小东西,要多实践,多练手,51单片机开发板、教程都是大同小异,就不推荐了。

再学STM32

32裸机中的一部分和51是差不多的,比如串口、中断、定时器、GPIO,原理几乎一样,

32多了一些IIC、SPI、DMA等知识.推荐买个网上的开发板、野火、正点原子等,其实哪家都差不多,并且附带的资料也很全,也差不多。

再学实时操作系统,像ucos,freeRTOS等。

实时操作系统相比linux而言还是一个比较小、比较简单的操作系统,适合作为你入门操作系统的起点。

你可以通过它学习一下操作系统的知识,思考使用操作系统相对于裸机的优点,是不是更方便更有效率了。它里面的任务调度,信号邮箱的通信,中断、优先级的设计等等,基本是所有操作系统共有的特点。

了解它们实现的原理,对你后续linux的学习是很有好处的,跳过其实也行,不建议跳过。

4. ARM+Linux

了解ARM架构、ARM指令集,适当背一背知识点。推荐:《ARM体系结构与编程》杜春雷着

此时应当重点提高,拿到一款芯片和Datasheet,脱离例程,从0开始驱动一些基本模块的能力。

Linux系统

了解Linux常用命令,会一些基本的操作就行了,不需要太深入的学习每一个命令,用到的时候会去搜索就行了,推荐《鸟哥的Linux私房菜》

Makefile

了解它的基本规则,会用Makefile就可以。不需要深入研究那些make函数,因为在工作中有现成的,看得懂就行,很偶尔才需要自己去编写一套Makefile。这个搜搜资料就能学会。

ARM裸机驱动

自己编写一下启动代码、Makefile、硬件初始化。不想成为嵌入式驱动开发也必须好好学LED、按键、中断、UART等特别常见的基础驱动。

Linux内核与驱动

u-boot的移植,linux内核的移植,根文件系统的制作、linux下的基本驱动。推荐B站上韦东山老师的视频课程(非广告),韦老师讲课很到位,很详细。

u-boot的主要功能就是:启动内核。它涉及:读取内核到内存、设置启动参数、启动内核。工作中要么不改,要么小改,除非特殊方向。

u-boot的移植,linux内核的移植,根文件系统的制作,会就行,工作以后根据工作需求,再深入

linux下的基本驱动:比如先自己写一个led灯的驱动,试试驱动的安装和卸载这些流程,然后写一写复杂点的串口的驱动,移植一些复杂点的,比如网卡驱动、LCD屏的驱动等。

按照早期驱动模型平台设备驱动设备树的使用,把简单驱动过一下

会字符设备驱动其实就已经具备找工作的能力了。

在学习驱动过程中,你会越来越多的接触到内核。这时候免不了学点内核调试技术了,比如中断子系统、内核休眠与内核定时器,异步通知,内核同步机制等。

这是一个边实践,边学习的过程,初期目标也是会,不要太深入。

Linux应用

是否深入,跟你以后的工作有关,工作再深入不迟,但一些基本的应用开发编写能力是必要的:

  1. 基本设备的访问,比如LCD、输入设备
  2. 进程、线程、进程通信、线程同步与互斥
  3. 休眠-唤醒、POLL机制、信号
  4. 网络编程

5. C++和QT

这部分对于决心做驱动的同学是没必要的,对于决心做软件、嵌入式应用开发,还是需要学一学的。

这部分也没什么好深入讲的,C学得好学C++就很快,主要理解封装、继承、多态等面向对象特性,QT可以理解为C++的图形库。

学习C++和QT的话,推荐B站上黑马程序员的课程(非广告),讲得非常好。

6. 结尾

嵌入式实在是太杂了,人的精力是有限的,一定要记住我开头说的那句话,先观其广,再究其深。

你的深度是在实际工作中,根据工作具体方向不断深入的。

如果是学生,在校期间踏实学习,多动手实践,多参加蓝桥杯、电赛等比赛,结识同伴、锻炼技术、增加简历,一举多得。

如果是转行至嵌入式,要保持热爱,耐得住学习的寂寞。

嵌入式这行,越干越觉得自己会的东西好少,越干越深入,这也是为什么这行并不存在35岁危机的原因,只要你脚踏实地,随着时间的积累,自身价值愈发提升。

最后助大家学有所成,升职加薪。

内容概要:本文档介绍了Intel oneAPI工具集及其行业倡议,旨在提供跨架构编程解决方案,支持加速计算并打破专有锁定。oneAPI允许开发者选择最佳硬件加速技术,实现跨CPU、GPU、FPGA及其他加速器的性能优化。它兼容多种编程语言和模型(如C++、Python、SYCL、OpenMP等),并通过开放标准确保未来兼容性和代码重用。文档详细描述了oneAPI工具包的功能,包括渲染、高性能计算(HPC)、物联(IoT)、AI分析等领域的应用。此外,还介绍了DPC++(数据并行C++)编程语言及其在不同硬件架构上的执行方式,以及Intel提供的各种优化库和分析工具,如Intel MKL、IPP、VTune Profiler等。最后,通过实际案例展示了oneAPI在医疗成像和超声产品中的成功应用。 适合人群:软件开发人员、硬件工程师、系统架构师、OEM/ODM厂商、ISV合作伙伴,特别是那些需要在多种硬件平台上进行高效编程和性能优化的专业人士。 使用场景及目标:①为跨架构编程提供统一的编程模型,简化多硬件平台的应用开发;②利用开放标准和工具集,提高代码可移植性和重用性;③通过优化编译器和技术库,提升应用程序的性能表现;④借助分析和调试工具,快速识别并解决性能瓶颈。 其他说明:Intel oneAPI工具集不仅支持现有编程语言和模型,还提供了强大的中间件和框架支持,适用于多样化的应用负载需求。开发者可以通过Intel DevCloud获取实际操作经验,同时利用DPC++兼容性工具将现有CUDA代码迁移到SYCL环境。此外,文档还提供了详细的性能优化指南和未来产品路线图,帮助用户更好地规划技术演进路径。
“班级站设计源代码”项目是页设计初学者及有一定基础的设计师的理想学习资源。它提供了完整的源代码,涵盖构建可运行班级站所需的所有文件。页设计包含前端开发、后端开发和用户体验设计等多个方面,而这个项目能帮助你深入理解这些技术的实际应用。 首先,HTML是页的基础,它通过标签定义页的结构,如标题、段落、图片和链接等。在这个项目中,你可以清晰地看到如何利用HTML搭建页的框架。其次,CSS用于控制页的样式和布局,赋予页视觉美感。通过设置颜色、字体、布局以及响应式设计,CSS确保站能在不同设备上良好显示。项目中的源代码展示了如何运用CSS实现多样化的样式效果。 JavaScript则是实现页动态功能的关键,它能够处理用户交互、数据操作和动画效果。在这个班级站中,JavaScript代码可能用于实现按钮点击事件、表单验证或页面动态更新等功能。此外,响应式设计是现代页设计的重要组成部分。借助媒体查询和流式布局,该班级站能够自动适应手机、平板和桌面电脑等不同设备的屏幕尺寸。 为了提高开发效率,现代页设计常常会引入前端框架和库,如Bootstrap或Vue.js。这些工具提供了一套预设的样式和组件,简化了页的构建过程。虽然具体是否使用了这些框架需要查看源代码,但了解它们的工作原理对于提升页设计能力至关重要。 如果班级站包含用户登录、留言等功能,那么后端技术(如PHP、Node.js或Python)和数据库(如MySQL或MongoDB)也会被涉及。这部分代码主要负责处理数据的提交、验证和存储,以及与服务器的通信。 用户体验(UX)和界面设计也是页设计的重要方面。一个优秀的站不仅要有美观的外观,还要具备良好的易用性。通过观察和分析这个班级站的布局和交互设计,你可以学习如何提升用户体验,例如如何设计清晰的导航、易读的信息和直观的操作流程。 通过深入研究“
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪耀大叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值