"); //-->
首先,明确方向是至关重要的。如果你对嵌入式开发感兴趣,建议专攻软件,而不是硬件。这并不是说硬件不重要,而是因为大多数公司都有专门的硬件团队负责相关工作,单片机的硬件部分并不会成为学习的重点。如果你试图同时学硬件和软件,往往两边都无法深入掌握。
当然,小型公司可能更偏好“全能型”工程师,他们希望一个人能完成从软件到硬件的所有工作,以节约开发成本。但是,这类公司通常规模较小,往往是创业公司,只有一到两个技术人员,这些技术人员既要设计和调试硬件,还要负责生产、维修,甚至做结构设计和产品组装。而一旦公司规模有所扩展,软硬件的分工就会更加明确。
因此,如果你决定专攻软件,硬件知识的要求就相对较低了。你只需要掌握如何阅读简单的电路原理图,懂得一些基础的电路分析知识即可,像基尔霍夫定律、戴维南定律、节点法和网孔法这些基本的电路理论就足够应对硬件工作中的需求了。
学习路径建议
学习基础C语言和MCU开发板
如果你有一定的C语言基础,可以直接购买一个STM32或ESP32开发板,开始动手学习。
这里不建议你专门学习汇编语言,现代公司99%的场景中都不会用到它。
对于C语言的学习,也不要过于刻意,一开始遇到问题再去学习解决,这样学习效率会更高。
避免Arduino
不要以Arduino作为你的主学习工具。
虽然Arduino作为入门工具不错,但它的灵活性和性能限制较大,正经公司在实际项目中不会用它。
Arduino更适合初学者或学生学习硬件编程的基础概念,而不是实际的嵌入式项目开发。
深入掌握MCU外设和寄存器操作
学习开发板中常用的外设接口,比如GPIO、ADC、DAC、Timer(PWM)、UART、SPI/IIC等。
它们在绝大多数项目中都会用到,因此你需要了解这些外设的用途、工作原理,并通过实际的代码调试加深理解。
此外,中断的使用也是关键,特别是在ADC、Timer、UART的使用场景中。
不要仅仅依赖厂商提供的库函数,深入到寄存器层级,阅读MCU厂商提供的《软件设计手册》和《数据手册》,理解每个寄存器的作用和使用场景。
你应该具备通过直接操作寄存器来配置和控制外设的能力。
学习嵌入式操作系统
接下来,你需要学习一个嵌入式操作系统,比如FreeRTOS或RT-Thread。
在学习这些操作系统时,重点掌握如何编写任务和中断衔接程序,不用花费太多精力在移植操作上,因为公司项目中通常会由专人或厂商负责移植工作。
多任务协调是嵌入式开发中的一个重要技能,熟练掌握多任务的协调工作,而不仅仅是编写独立的任务。
包装你的学习成果
学习的过程中,你可以将自己的学习过程包装成一个完整的项目。
你要设想产品的功能、目标用户、应用场景以及解决的问题,并把学习内容融入到这个虚拟的项目中。
不要过度堆砌外设,避免显得不真实。
深度技能加分项
经过上述学习后,如果你拥有985/211名校背景或硕士学位,在进入职场时可能已经具备一定的竞争力。
如果没有名校或学位的加持,那么以下这些技能可以为你加分:
Cortex-M内核:深入理解MCU内核的各个组成部分及其工作机制,包括启动流程、指令集、存储映射、SysTick定时器、异常和中断等。
IoT操作系统:进一步学习物联网操作系统的高级功能,如设备驱动模型、文件系统、低功耗管理、以太网及TCP/IP协议栈等。这些系统类似于Linux的简化版,有助于你未来学习更复杂的操作系统。
Modbus与RS-485:学习Modbus协议的应用场景、报文格式、通信时序及常用命令。这是工业控制中广泛使用的协议。
CAN通信:掌握CAN协议,这是汽车行业的必备技能,了解报文格式、通信时序及常用命令。
蓝牙或USB:学习蓝牙或USB的协议栈结构、通信时序及常用应用层端点,这是物联网开发中的常用技术。
PID控制算法:理解并调试PID控制算法,特别是在工业控制中广泛应用。
LCD及UI开发:掌握一种UI库的常用控件,特别是在有屏幕交互的嵌入式项目中有用。
Bootloader开发:理解Bootloader的原理、内存分配及在线升级机制,这是嵌入式系统启动的核心部分。
TCP/IP协议栈:深入学习TCP/IP分层模型、链路层协议及Socket编程接口。理解通信协议中的分层模型有助于构建健壮的网络系统。
C++在嵌入式开发中的应用:学习C++的面向对象特性,掌握异常处理、RTTI(运行时类型识别)和STL(标准模板库)等高级特性。随着嵌入式系统日益复杂,C++将在嵌入式领域中发挥更大的作用。
后续方向
当你掌握上述技能后,技术方向可以延伸至以下领域:
硬件设计
Linux内核与驱动开发
QT与C++应用开发
Android/iOS应用开发
架构师方向
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。