时间:2022年5月26号!这几年嵌入式开发的发展前景可以说是非常的香!从工资和找工作的难易程度上说都是!
按老师傅的说法就是:“加班不严重,注重积累,越往底层越有趣,没有35岁被炒的说法,但是要沉得住,要真的对底层技术感兴趣,我工作三年半,现在找到的新工作27k算上公积金。”
#include<stdio.h> int main() { /*在双引号中间输入Hello World*/ printf("Hello World"); return 0; }
原因:
①相对来说门槛比较高。
②人才需求量还是挺大的,像物联网网应用的普及、5G的普及等,都会增加嵌入式开发岗位的需求。嵌入式就业范围很广,有嵌入式linux c/c++开发,驱动开发,单片机应用开发,FPGA,DSP,各种工控相关开发等。
如果面向就业去学习,建议学应用层相关的嵌入式知识,比如嵌入式linux软件开发相关的。
因为应用层的工作更多,薪资相对较高,主要面向业务开发。而单片机开发,驱动开发,会涉及到一些硬件交互,与芯片绑定度更高,相对来说就业面窄一些,不过能够学习底层知识,学好了不可替代性强。
我整理了一些嵌入式、物联网开发的面经+笔试面试题和一些项目教程,想要的可以四信我。
基础
1. linux基本操作:
需要掌握的知识如下:
环境的搭建;
Linux目录结构;
文件类型;
基本目录操作,文件操作,vim,ifconfig,ping,cd,cp,mv,mkdir等,最关键是gcc命令要会用;
一些简单的shell脚本;
Makefile的编写。
2. c语言:
不会写代码,就建议不要学Linux,否则职业后期全是瓶颈。那些和你说学Linux不需要懂编程的都是再耍LM。
学习C语言一定要学习Linux下C编程,
3. 数据结构:
数据结构很重要,但是在这个上面花太多时间,也是没必要的。个人建议只要掌握几个基本的排序和查找算法即可,没必要把所有算法都研究一遍。
能掌握常见的算法比如:冒泡排序、直接插入排序、快速排序、二叉树等。
链表操作,创建、增删改查。
4. 基础阶段项目
基础阶段,个人强烈建议一定要做一个综合性项目,从0开始写。
用链表实现一个简单的《电话本管理软件》,包括增、删、改、查、排序等操作,把所有的知识点融会贯通起来。
进阶-Linux编程
1. 文件IO
掌握posix的一套api,open、read、write、lseek,close等。
熟练写出文件拷贝的功能模块输出。
理解缓冲的概念。
2. 进程线程
掌握常用的函数fork、exec族函数、pthread 等api;
进程创建、回收,一个.c源文件变成可执行程序的过程;
crontab、at命令;
进程间通信:信号量、消息队列、共享内存、管道、信号;
线程创建,同步互斥,互斥锁;
守护进程;
库的概念,什么是动态库和静态库,如何自己制作动态库和静态库。
3. 网络编程
TCP/IP协议分层以及每一层的功能;不要看OSI,只要知道即可;
socket api的使用,tcp、udp;
套接字属性的设置;
C/S架构;
多进程、多线程服务器模型;
抓包工具使用;
常见的网络协议分析:ping、 tftp、 ftp 等;
进阶阶段知识点很重要,即使以后你不做linux c开发,有了这些基础,你再去学java、c++你的视野一定会不一样。
4. 进阶项目
该阶段可以选择综合项目《多线程聊天室》,实现公聊、私聊、注册登录,互相发送文件等功能。
5. 高阶
该阶段学习需要开发板配合,建议新手先把之前内容打扎实,再进入这个阶段学习。
开发板的选择,最重要的是资料!
1. ARM
arm架构、arm的模式、arm指令,寻址,异常,中断,异常向量表,
伪指令、C语言和汇编代码的互相调用、内联汇编;
常见的外设的裸机驱动开发,led、key、adc、pwm、rtc、看门狗、i2c、spi等
这个阶段的内容,对于了解整个计算机软件的工作原理非常重要,Linux内核的很多机制都要依赖汇编指令,尤其ARM工作模式、寻址、异常,中断,异常向量表这些概念。
2. 系统移植
uboot移植、rootfs制作、内核剪裁移植,
usb、网卡驱动移植,
uboot、linux启动流程,
自己添加uboot命令
这一阶段的内容对于嵌入式工程师来说,在做实际项目的时候,会经常用到,各个厂家的移植步骤会有所差异,但原理基本相同,熟练掌握这些操作,非常必要。
3. Linux驱动
字符设备架构、inode、cdev、file_operations、file之间关系;
platform总线、设备树;
同步互斥机制,自旋锁、信号量、互斥体,原子操作;
中断、中断底半部;
等待队列,poll的实现;
常见设备的驱动的编写,key,led,gpio,adc、pwm、i2c、mpu6050;
网络设备:网卡驱动分析、netfilter使用;
usb架构。
驱动的学习,主要在于多捋架构,多了解计算机的实现原理,每天抱着内核看,像泡女人一样泡她,迟早你会成为大师。
终极
我想如果能学到这个份上,后面如何发展,已经不需要多费唇舌了,可以继续学习安卓、QT,也可以深挖物联网、算法,或者钻研linux内核优化内核等,每个领域独当一面,收入都不会低。