自学嵌入式一点小小的建议

作为一个曾经自学嵌入式,参与过秋招/春招,投递了上百份嵌入式简历的人,发表一下自己的观点吧。当然,现在嵌入式越来越卷,难度应该更大了!

个人'基础'技能方面

① 熟悉C语言;② 熟悉常用数据结构(数组、链表、堆、栈、队列)。括号中的均为线性结构,对于非线性结构(二叉树、图)等要求不高,知道即可。③ 熟悉ARM单片机,如常见的STM32F1系列的(基础型单片机)。要理解单片机的内部结构、最小系统,理解GPIO、定时器、中断基本原理,熟悉串口、SPI、IIC通信,熟悉ADC等数模转换接收、DMA传输等。-----------------------------按几年前行情,会这些基本上找个5-7K的工作够用了!但是,现在卷啊!

个人'加分'技能方面

① 在熟悉C语言的基础上,熟悉C++语言;② 在掌握ARM基本原理,熟悉上述1中ARM的各类内容的基础上,熟悉RTOS实时操作系统,一些物联网协议MQTT、ZigBee、蓝牙、wifi等其中一种或几种;③ 熟悉Linux操作系统的基本使用(Linux指令、vim编辑等);④ 熟悉Linux应用开发、QT上位机设计等;⑤ 熟悉Linux内核,能够进行系统移植剪裁、熟悉部分设备的驱动方式;⑥ 熟悉Python,能够训练模型,在嵌入式设备部署AI、深度学习等;-----------------------------对于本科生:会①、②基本上去小公司找个8-10K的工作够用!如果能掌握③和④,拿到10K以上也不难!对于硕士生:会①、②中规中距,找个9-10K的工作差不多!如果能掌握③和④,拿到13K以上也不难! 如果掌握⑤和⑥,拿到18K以上绝对是可以的!

个人项目方面

从我个人角度,如果你是本科生,你最起码应该准备2个项目,而且这种项目最好不要是基础类型的项目,比如蓝牙避障小车。应该更加聚焦于项目的综合性,有一定的广度或者深度。如果你是硕士研究生,那最起码准备3个项目!比如可以有一个STM32+RTOS项目,然后再有2个嵌入式Linux项目。最好,你的项目是和企业横向有关,这也是比较吸引面试官的点!

实习经历

无论是本科还是硕士,建议大家一定要多投简历,大二、大三;研一、研二都是出去实习的好机会!不要等到秋招了,才开始准备自己的简历,才开始匆匆忙忙找项目。可以先做2个项目,写一个实习简历,多去投一些实习岗位,循序渐进,一步步来!

全网最受欢迎的嵌入式面经

面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,2800+订阅,非常适合在找工作面经薄弱的同学,3000+订阅还会涨价,提前订阅提前享受,持续更新中。

👉 同款面经传送门全网最受欢迎的嵌入式面经

32篇精华覆盖操作系统/内存原理/外设实战等2025新考点

12万字手敲代码+注释,配面试实战原理以及基础面经汇总

⚡️ 订阅破30003500份即刻涨价!抢先锁定👉 点击抢订

全部评论

相关推荐

1. 自我介绍2. http用的是tcp吗3. 为啥http用quic(不知道)4. tcp跟udp的区别5. arp6. 项目文件系统怎么写的7. risc-v做了啥,qemu干嘛的,底层原理了解吗8. 哪里接触到mit这个实验9. 为什么要把文件系统写到用户态a. 开发调试方便  b. 移植性(操作系统和平台)1. androidstudio有接触到前端开发吗没有,用的是java原生组件2. 协议栈编程是怎么回事3. xv6是啥操作系统4. linux怎么实现windows的快捷方式功能没回答上来一、软链接(符号链接,Symbolic Link)1. 定义软链接是一个特殊类型的文件,指向另一个文件或目录的路径,类似于 Windows 的快捷方式。本质上它只是一个“指路牌”,记录目标的位置。2. 特点可以跨分区、跨文件系统。可以链接文件,也可以链接目录。如果目标被删除,软链接会“失效”,变成“悬挂链接”(dangling link)。3. 创建命令ln -s 目标路径 链接名称ln -s /etc/nginx/nginx.conf ~/nginx.conf.link4. 显示方式ls -l 下会看到文件类型是 l,如:二、硬链接(Hard Link)1. 定义硬链接是直接为同一个数据块(inode)创建多个目录项。删除任意一个“名字”,其他名字依然可以访问同一个文件内容。2. 特点只能链接文件,不能链接目录。不能跨分区(不同文件系统)。所有硬链接等价,没有主次之分。只有所有硬链接都删除后,数据才会被释放。硬链接指向的是文件内容(inode),不是文件名。3. 创建命令ln 目标文件 链接名称ln /etc/hosts ~/hosts_hardlink4. 显示方式ls -l 下看到链接数(第二列数字)会增加,比如 2,表示有两个名字指向同一内容。没有箭头 -> 显示,普通文件形式。5. 进程是怎么通信的父子管道,信号,信号量,socket6. 什么时候用到socket7. 网断了怎么办,wifi变为移动数据,谁来做这些事没回到上来,面试官引导了好久我都不知道说啥,胡言乱语了一些dhcp的东西,后来问了chat心跳机制:定期发送心跳包,快速检测连接是否存活。断线消息补偿:如业务敏感,需设计消息补发和去重机制。(这一点他有提到)服务端支持多终端自动恢复:如 session 续用、断线补发等。
查看16道真题和解析
点赞 评论 收藏
分享
拖更太久了,主要是从4月份开始工作到陆陆续续开始上手工作,全身心投入工作中了,最近闲下来又可以写一写文章,并且以我工作和学习的经历希望让大家增强对Linux驱动的理解。特别是我后台经常会有同学私聊我,问我一些Linux线路呀或者学完xv6应该学什么呀,我要走Linux驱动方向需不需要看Linux网络编程呀等等问题,我们今天一一解答。1. 学完xv6之后,我想走嵌入式Linux方向还需要怎么提升呢?针对这个问题,我想说嵌入式Linux需要哪些技术点。首先针对驱动,驱动其实分为很多方向,简单的有iic驱动,spi驱动,复杂的有camera驱动,显示屏驱动,音频驱动,nvme驱动还有最近流行的npu驱动,GPU驱动等等。这些驱动的共性都是要掌握设备树,sysfs文件系统,虚拟内存管理,设备总线驱动框架等等。不同的驱动还要细化,比如你想走camera,可能你要对v4l2,mipi协议这些要进一步了解,如果你想走ai芯片驱动,那最好对smmu,dma-buf,异步队列排序,多线程优化,drm框架,ping-pong存储,高性能计算有一定了解。如果是非驱动岗位,偏向CPU启动安全等方向,可能还需要掌握ARM的架构,包括最新的v8,v9架构等等。所以针对你掌握的不同驱动,你需要加强不同方向的知识。2. Linux驱动学完后期应该学什么,我看完韦东山驱动大全还需要看Linux系统编程,Linux网络编程吗。首先,驱动跟应用是不分家的,在真实操作驱动的过程中,会时刻跟应用打交道,但此刻的应用还是停留在Linux内核层面的应用。实际工作中的应用方向则会偏向安卓,比如一些中间件的实现,安卓api的调用等等,常见于手机厂系统开发岗位。而Linux系统编程更多强调于我们上层怎么用malloc,mmap分配内存,如何多进程多线程跑多个服务,怎么多线程和访问同一个变量,如何写出免锁队列。因为只要复杂的一些驱动,你可能就不单是负责最基础的driver那一层了,跟寄存器打交道的是bsp方向,驱动方向考虑更多的还是底层代码的高效性,稳定性等等。比如nvme驱动,如何对具有优先级的bio进行快速响应,并分配给SSD,可能就需要哈希存储或者平衡二叉树来做优化。包括我们说的npu驱动,如何提升cpu与npu的通信,CPU的算子如何快速部署到npu上,并最短时间把结果反馈给CPU,大量算子不同优先级如何分配线程运行,还要兼顾低功耗来进行休眠等等,其实都离不开我们Linux系统编程的很多知识。而针对Linux网络编程,这个要不要掌握真就因人而异了,这个最初是走c++的一帮人,因为要搞个webserver项目走互联网,所以在那之前会先学Linux网络编程,对于嵌入式Linux方向,大部分方向是不用去深入掌握的,除非你去路由器公司做网络驱动,那就另当别论了。3. 方向这么多,我应该选择什么方向作为我的主攻方向呢。不管你做了xv6,还是看了驱动大全,你可能都会疑惑自己会什么,只能脑子有点驱动概念有点操作系统概念,但是没有深入理解某个方向,有点浅尝辄止。所以我的建议是至少得熟悉某个子方向,你可以是熟悉camera驱动,调一调摄像头,改一改底层代码提升帧率。也可以走ai嵌入式方向,部署一下YOLOv5,然后拉通CPU到npu的函数跳转。不管走什么方向,不能只停留在上层调api,要深入到底层代码逻辑,这才能在秋招中脱颖而出。而且真正工作上,驱动与驱动,驱动与应用是不分家的。最简单的一个例子,我们想要获得高帧率的图像显示,中间经历的驱动包括了camera获取图像,npu或GPU对每帧图像实现图像锐化等ai算法,显示屏驱动稳定显示。但凡某个驱动出了叉子,在显示屏驱动那一块就会出现显示卡顿的情况或者丢帧。所以常常就是你不能只对你的方向有所理解,其他方向也要有所建树。最后同样的,如果想继续看后续请点击关注,最后你的鲜花和点赞将是我更新的极大动力。
通信/硬件秋招总结
点赞 评论 收藏
分享
评论
7
45
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务