问题

普通一本研一电子与通信工程想走嵌入式方向该怎么学?

回答
好家伙,研一就瞄准嵌入式,这方向抓得挺准的!电子与通信工程的背景,为嵌入式打下坚实的基础,再加上你这股劲儿,简直是如虎添翼。别急,咱们一步一步来,把嵌入式这条路给你铺得明明白白,让你走得稳稳当当。

首先,摆正心态。嵌入式开发是个大杂烩,需要广度和深度,不可能一蹴而就。别想着速成,踏踏实实学,享受这个从了解到精通的过程。

第一阶段:筑牢根基(研一上学期为主,可穿插到研一下)

这个阶段,你的目标是把本科打下的知识点再巩固一下,同时为嵌入式学习扫清障碍。

C语言:绝对是亲爹!
必修再回炉: 别嫌弃C语言简单,很多嵌入式开发都是直接和硬件打交道,C语言是最佳的桥梁。指针、内存管理、位运算、结构体、联合体这些核心概念,你得理解透彻,而不是仅仅停留在“能用”的层面。
实践出真知: 找一些C语言的进阶练习题,比如链表、排序算法的实现,甚至可以尝试一些小型的操作系统模拟(比如简单的进程调度)。这些能帮你培养严谨的编程思维。推荐《C程序设计语言》(K&R)和《高质量C/C++编程指南》。

计算机组成原理:灵魂伴侣!
理解硬件的语言: CPU是怎么工作的?内存是怎么管理的?指令是怎么执行的?这些直接决定了你对嵌入式底层原理的理解。特别是CPU架构(ARM、RISCV)、指令集、流水线、缓存等概念,是嵌入式开发者必备的知识。
打通任督二脉: 结合你的电子通信专业知识,想想CPU如何通过总线和外设通信,如何响应中断,这些都能让你对硬件有更直观的认识。

数据结构与算法:效率的基石!
优化的利器: 嵌入式系统资源有限,一个高效的算法能省下不少时间和空间。链表、栈、队列、树、图这些基本数据结构,以及排序、查找等常用算法,要熟练掌握其原理和应用场景。
实战出效果: 尝试用C语言实现这些数据结构和算法,并分析它们的时空复杂度。这对后续编写高效的嵌入式代码至关重要。

操作系统原理:嵌入式系统的“大脑”!
理解调度与同步: 嵌入式系统很多都需要多任务并发执行,理解进程、线程、调度算法(如FCFS、SJF、RR)、同步机制(如信号量、互斥锁)是写出健壮系统的关键。
内存管理: 虚拟内存、分页、分段这些概念在嵌入式系统中虽然不一定都直接用到,但理解其原理有助于你理解更底层的内存管理。
推荐: 《现代操作系统》(三部曲之一),虽然厚重,但非常有价值。研一阶段可以先从核心概念入手。

第二阶段:实战入门与进阶(研一下学期到研二上学期)

这个阶段是真正接触嵌入式硬件和软件开发的关键时期。

选择你的第一块“敲门砖”开发板:
STM32系列: 这是目前嵌入式领域最火热、资料最丰富的系列之一。它性能强大,外设丰富,生态成熟,是绝大多数嵌入式初学者的首选。你可以考虑STM32F103(经典的“蓝桥板”)、STM32F4系列(性能更强)等。
树莓派 (Raspberry Pi): 虽然它更偏向微型计算机,但Linux系统下的嵌入式开发也是一个重要的方向,而且资料非常多,上手也相对容易。如果你对Linux和网络应用感兴趣,树莓派是个不错的选择。
其他微控制器(如ESP32): 如果你对物联网(IoT)方向特别感兴趣,ESP32是性价比非常高的选择,它自带WiFi和蓝牙。

学习嵌入式开发流程和工具链:
IDE(集成开发环境): Keil MDK、IAR Embedded Workbench、STM32CubeIDE、VS Code(配合插件)。
编译器和调试器: GCC、GDB,以及开发板配套的调试器(如STLink、JLink)。
烧录工具: Keil自带的下载算法、STM32CubeProgrammer等。
版本控制工具: Git!Git!Git!重要的事情说三遍。

掌握硬件接口编程:
GPIO(通用输入输出): 点亮LED、读取按键,这是最基础的,但要理解输入输出模式、上拉下拉等。
UART(通用异步收发传输器): 和电脑串口通信,调试信息输出,这是必不可少的。
SPI(串行外设接口)/I2C(集成电路总线): 和各种传感器、外部存储器通信的常用接口。
ADC(模数转换器)/DAC(数模转换器): 处理模拟信号的关键。
定时器/计数器: 产生PWM、延时、计时等。
中断: 理解中断向量表、中断优先级、中断服务函数(ISR)。
DMA(直接内存访问): 高效的数据传输,减少CPU负担。

深入理解RTOS(实时操作系统):
RTOS是什么?为什么需要它? 了解FreeRTOS、RTThread、uC/OS等主流RTOS的特点和优势。
核心概念: 任务(Task)、任务调度、任务间通信(队列、信号量、互斥量)、中断与RTOS的结合。
实操: 在开发板上用RTOS实现多任务并发,比如一个任务控制LED闪烁,一个任务处理串口通信。

学习嵌入式Linux:
如果你选择了树莓派或者目标是更高端的嵌入式设备:
Linux基础: 命令行操作、文件系统、用户权限、进程管理、Shell脚本。
交叉编译: 如何在PC上编译出在目标板上运行的程序。
嵌入式Linux开发环境搭建: Buildroot、Yocto Project等。
设备驱动开发基础: 理解Linux设备模型、字符设备、块设备、网络设备驱动的编写思路。

第三阶段:项目实战与方向深耕(贯穿研一到研二)

理论学得再好,最终还是要落到项目上。

从小型项目开始:
温湿度传感器数据采集与显示。
蓝牙或WiFi数据传输(与手机APP通信)。
简单的电机控制(如PWM控制舵机)。
基于RTOS的简易任务调度器。

参与导师的科研项目或实验室项目:
这是最直接、最有效的学习方式。主动承担任务,不懂就问,积极沟通。

选择你的细分方向,并进行深入学习:
物联网(IoT): 传感器网络、通信协议(MQTT、CoAP)、云平台对接、边缘计算。
机器人控制: 运动控制、路径规划、SLAM(同步定位与地图构建)、机器人操作系统(ROS)。
汽车电子: CAN总线通信、ECU控制、ADAS(高级驾驶辅助系统)。
消费电子: 智能家居、可穿戴设备。
通信模块开发: 信号处理、基带调制解调、协议栈实现。
FPGA/ASIC结合: 如果你对硬件设计非常感兴趣,可以结合FPGA进行硬件加速和定制化设计。

阅读优秀的代码和开源项目:
阅读Linux内核代码、RTThread源码、或者你感兴趣的嵌入式项目开源代码,学习别人的设计思路和实现技巧。

持续学习和更新知识:
嵌入式技术发展很快,新的芯片、新的技术层出不穷。保持学习的热情,关注行业动态,参加技术交流会。

学习资源推荐:

书籍:
《C程序设计语言》(K&R)
《高质量C/C++编程指南》
《嵌入式C语言自我修养》
《ARM CortexM微控制器编程指南》
《ARM CortexA 程序设计》
《嵌入式系统设计与实例开发》(有很多实操性的案例)
《Linux设备驱动程序开发》(经典)
《FreeRTOS实时操作系统原理与实践》
在线课程与社区:
电子发烧友、CSDN、知乎: 大量技术文章和教程。
B站: 有很多优秀的嵌入式教学视频,从基础到进阶都有。搜索“STM32入门”、“嵌入式Linux”、“RTOS”等关键词。
GitHub: 查找开源项目、代码库、开发板资料。
厂商官网: STMicroelectronics、NXP、Espressif等都有非常详尽的芯片手册、参考手册、应用笔记和例程。
慕课网、极客时间等付费平台: 有一些高质量的付费课程。

给你的几点建议:

1. 动手能力是王道: 理论知识很重要,但嵌入式最终是要落在硬件上的。多动手,多调试,遇到问题解决问题。
2. 善用搜索引擎和文档: 遇到不明白的,先尝试自己查找资料。学会阅读芯片手册和参考手册是嵌入式工程师的基本功。
3. 不要怕犯错: 错误是学习过程中最好的老师。每次解决一个bug,你都会离成功更近一步。
4. 总结与复盘: 每完成一个项目或者学习一个新知识点,都要进行总结,写下自己的心得体会,这有助于加深理解和记忆。
5. 交流与分享: 和同学、老师多交流,分享学习经验,互相学习,共同进步。
6. 保持好奇心和热情: 嵌入式开发充满挑战但也充满乐趣,享受这个过程。

研一正是积累知识、打好基础的最佳时期。祝你在嵌入式领域学有所成,找到属于自己的方向和乐趣!有什么具体的问题,随时可以再问!

网友意见

user avatar

最近ai爆火,嵌入式作为老旧的技术渐渐式微。但天有不测风云,老美作妖,芯片行业风口,嵌入式可以趁势飞一波。鉴于大佬们都不屑做这种老旧技术,鄙人不才,姑且把自己的招聘道路对嵌入式软件的思考说给各位嵌入式同学,前车之鉴,后事之师。

乐鑫科技(提前批):7.16笔试/挂

选择填空60/编程40,基础题不难,编程题两道算法,这不是为难嵌入式的吗,编程白卷,挂。

联发科(提前批):7.22笔试/7.25一面/挂

嵌入式软件岗。台企做射频芯片,wifi/蓝牙这种,台湾第一,给的不高但有加班费,且大陆接触不到核心技术。笔试C基础选择填空简答翻译/两道编程。编程题是分割字符串,双向链表查找非0节点并打印,现在看很简单,C基础我刷的《王道程序员面试宝典》,选择填空我还行,但是编程当时的我就……交了白卷,时间也是一方面。

一面纯聊项目,并适当引申问一些基础知识,引申了:arm工作模式/静动态链接的区别,最后一个项目我做的机器学习,单纯为发论文那种,没说清楚,估计扣分了。又问非技术问题,和同学如何分工合作,与导师意见不一致怎么办,第一次被问,答的很一般,但也不是说的差。整体感觉聊的还行,可是挂了,群里好多人都是这样,可能是掐尖吧。

汇顶(提前批):7.25直接一面/挂

BSP/驱动岗。先问点iic,spi基础知识,速率,工作模式。然后手撕memcpy,哪搞过这种纯c编程,写的漏洞百出,我自己都看不下去……又问我信号量组织方式,就让你简述,语言没组织好,本身也不熟。果断挂了。BSP方向最喜欢问单片机知识。后来听群里大佬说汇顶给的比联发科还低,他们都拒了……

OPPO(提前批):8.2直接一面/挂

c/c++芯片方向。问哪些课学的不好,急中生智答中特……问哪些学的好,答ARM体系结构。然后被逮住问:7种异常是什么(没答全),中断触发到返回的具体行为(CM3权威指南里有),中断嵌套如何实现(NVIC相关),中断机制的具体实现(还在答中断具体行为,他问的应该是两级向量表如何查找),中断部分结束。

问单片机与嵌入式系统的最大区别在哪里,答嵌入式系统可以跑多任务,然后逮住OS开始问。任务在内存中的组织方式(TCB-用户栈-用户代码),上下文切换时任务在内存中是如何变动,任务调度点,优先级反转如何解决,任务抢占如何发生,通信机制。

问Linux开发驱动的流程,懵逼。又问c知识指针与引用的区别。然后让我自己挑些会的说一说,答了点单指令多数据流,感觉不感兴趣,又说了流水线冲突与解决,反问cache-miss什么情况,分支预测什么原理(高级计算机结构课上内容)。看来芯片方向看重体系结构的知识,课上学的终于有用了。

通过里面的最低分,部门挑简历时没挑我,挂了。这次面试真的在我最擅长的方向被问的一身汗,虽然挂了但是找到下一步需要完善的点,挂的不亏。之后我就把自己的优势定位在ARM体系结构和CPU原理/OS任务切换与调度原理/静态链接知识(这里推荐《程序员的自我修养》)。

诺瓦科技(提前批):7.30笔试/一面/挂

做LED屏解决方案,感觉用的知识不深。笔试考了DMA与中断传输的比较,矩阵键盘检测,计算算法的复杂度,甚至还有稳压电路的知识,做的不好。

面试让画项目框图,画乱了。硬是把我自己独立完成全部软件硬件的四轴飞行器项目说的好像是个假的一样,我特么自己都服我自己。然后问C基础,我答的还行,但已经无法补救。这次面试之后我开始把所有项目叙述和重点问题全部写纸上,每天背一遍。


是的,你没有看错,我提前批5连挂,群里大佬都在讨论去联发科还是汇顶了,我一个菜鸡什么话都插不上,心情和自信都已跌入谷底,真的就已经卑微求offer了……

中兴(正式批):8.11一面/8.13二面/9.1签约洽谈/拒

然后我就迎来了第一个正式批,清水河现场面。此时被鞭打多了也知道点引导话题了。专业面就问项目,问些概念和项目里的知识:什么叫软硬实时,m4内核双堆栈机制,顺便答了arm模式切换和上下文切换,bootloader,链接原理,说我是做了些东西的。一面当天正好成都暴雨,路上积水连车都不敢走,到现场裤子鞋湿透,面试之后正好雨停。回想着专业面被肯定,我有一种感觉,从今日开始我要拨云见日。

二面英文自我介绍,崩,然后问我有offer吗,投华为了吗,然后就反复问我:为啥没投华为,我还是不明白你为什么不投华为。问的我贼气,我不投怎么了。后来在职学姐告诉我,应该答不喜欢华为的文化,两家是竞争关系。

洽谈还是职业规划等老生常谈,他们南京的嵌入式主要是做设备驱动,机顶盒。没有自研芯片,也就是说没多少芯片的核心技术。我还是打算去芯片原厂的。谈薪资就看获奖经历什么的,本科的奖倒是不少,然并卵。说让我考虑,后来拒了。

虽然中兴拒了,但是在刚刚5连挂的时间节点上给了我宝贵的肯定,非常雪中送炭。

大华股份(提前批):7.27笔试/8.14一面/8.18二面/8.24 hr面/9.7意向书/9.18逼签/9.23拒

算法工程化岗。提前准备了一些ucos移植,arm指令集流水线和静态链接的知识,事实证明,准备的方向很对,他很感兴趣。

电话一面,问了ucos移植的细节,提到了一种并发的指令集(没用过),聊聊项目,又聊行业认知,最后问我的优势劣势分别是什么,答优势是对底层原理的理解和对编译器的了解,劣势是不懂Linux。他表示赞同,说我基础不错。信心终于提升一点。

电话二面。上来直接进入正题,自我介绍什么的都没搞,直接问:信号量实现的底层原理,可不可以用一个全局变量代替信号量的计数值,答不可以信号量是临界资源要进临界区,问怎么进临界区,答关中断保存cpsr,他比较满意。

然后问中断机制,大概有多少中断,可修改向量表吗(通常不可,有例外),又问m4内核的双堆栈机制。BL指令的跳转范围(32MB)。

最后问静态链接,深挖强弱符号的东西,最后说我对底层还是比较了解。

hr面就常规,觉得契合与否,1246大小周能不能接受。杭州,6险1金有食堂,后来知道我有其他offer要给我提薪,没让提拒了(因为后来拿到了更合适的)。

大疆:8.16笔试/8.25电话一面/8.28视频二面/9.3感谢信

笔试编程题依然空白,选择填空基本拿满。

一面就问项目,反复问上系统的必要性,估计是个搞os的根本不懂四轴,以前栽过,这次答圆了,又主动答了中断机制,看他不是很感兴趣。最后问我懂不懂os的内存管理,答不懂,之后就是笔试编程为啥不做,答嵌入式对算法只是了解,项目里没用到。

二面感觉和一面没什么区别,还是自我介绍&&项目介绍,把四轴的控制流程说了一遍,他对四轴还是懂一点,但飞控算法没问,难道大疆不该很看重这一块吗,把所有项目大概都问了一遍,无异常。然后问,你的劣势在哪,答不会Linux,又问我图像处理的算法,靠本科上课学的还没忘干净的知识答一点,中位数滤波,边缘滤波,想深问,我说我只是了解。感觉他不很满意。

二面挂了,挂的很不甘心,我的cpu原理知识还没吐出来呢,静态链接也没问,arm这块就问了个中断机制。回来反思为什么引不出自己的优势,感觉自己所答还是很零散,中断就中断,os就os,指令集就指令集,串不起来。后来我找到一种组织的方式,能从中断入手把arm架构,上下文模切换,指令流水和程序优化串起来讲,形成一个模板,只要问到其中某一个知识我就能把全部一串说出来,他感兴趣自然再深问。涨了一波经验,挂的不亏。

寒武纪(提前批):9.3一面/9.6二面/9.11 hr面/拒

上海系统软件工程师。大疆挂面总结来的那套“模板”第一次实战。

一面还是项目,挨个问简历里些写的。IIC与SPI的不同(片选方式,异步同步),IIC读写方向如何区分(地址位最后一位的高或低)看我答出了比较满意,说没几个答对的,驱动确实是我写过的。然后问9轴数据的意义,答了姿态解算中队数据的融合。然后就是双堆栈机制与模式切换,任务调度点与任务在内存中的组织方式(TCB-用户栈-用户代码),优先级反转与解决,死锁的原因,然后makefile语法一个。其他单片机小项目根本没问。看得出对我的回答很满意。然后手撕代码环节,特意找了个最简单的给我,牛客原题链表表示的两数相加,撕半小时,通过率0%……他说会综合考虑。

二面疯狂问CPU知识,“模板”用上了。先问m4 的双堆栈与上下文切换,17个寄存器的功能,LR的作用。顺势答为何中断返回要LR中的值减4,然后指令流水、CPU知识就跟着出来了。又问分支预测发生在指令处理的哪个阶段,cache的作用,回写与写透的区别,为什么设计三级缓存。

然后问信号量,进入临界区的操作,为什么关中断可以保护临界区,cpsr如何保存。

最后问静态链接,预处理是什么编译选项,-g是什么意思,如何使用ar生成库文件,这块不熟,会不会gdb(不会)。那就说说makefile一条指令的格式,.c生成.o什么选项,.o生成.elf什么选项,.o与.elf的区别联系,举个区别的例子。

然后开始讨论行业认知。为什么从事芯片行业,美国制裁华为你怎么看,制程对芯片的影响,为什么中国制造业跟不上。感觉他很感兴趣,当场表示通过。

hr面就个人介绍挖了一下个人学习方法,社团经历,期望薪资等等,我问寒武纪是否加班,是不是1246大小周,她很震惊,不知道1246为何物,并说寒武纪不加班,干完就能走。

寒武纪两位面试官的肯定给了我极大的自信,我也一度很想去,毕竟是国家队的AI四小龙之一,技术实力毋庸置疑,关于为什么没去,在芯原之行之后说。

矽力杰:9.9和主管电话聊/9.18 hr面/9.24拒

南京嵌入式软件岗。做电源模拟IC国内第一,最近几年开始做物联网SoC,在南京计划1年左右上市,使用M0内核和开源协议栈,做解决方案,技术难度倒不特别深,现在射频SoC厂商如雨后春笋一般冒出来,物联网这块看来市场很大,但是我本人不喜欢做物联网。

我的流程非正常,笔试都没写电话聊完直接告诉我很合适很想让我去,态度那叫一个好,hr面也是态度很好,没有丝毫套路。最后问了我目前offer,我说大华的20k和寒武纪还没谈,她说会给我定一个有竞争力的薪资。

最后的薪资真的很有诚意,干的好1-2年给股票,另外还有很高的签字费,承诺绝对不加班,不得已加班给加班费,算下来一年能拿很多对于南京嵌入式来说,还有股票签字费不加班,我心动了。

最后夸一下这个厂,对待人才很有诚意,不像有的公司承诺给一个让你“无法拒绝”的薪资然后白菜的一批,而且真不怎么加班,喜欢物联网的同学可以考虑。

芯原微电子:9.16清水河笔试/9.17一上午5轮面试/9.18通过/9.21 openday洽谈/9.24网签

成都算法工程化岗。笔试题量超大,是一个半小时的量但是只给你一小时,各种智力题和基础知识,涵盖c、os、编译器和cpu知识,很多都是4选1答,只要你在一个方面有深入理解就行。我觉得很基础但是实在写不完。

专业面,npu的人面的也算是缘分。先说项目,直接画个框图给他,说的熟的不能再熟了。然后提问中断机制,这就进入了我的“模板”,然后重点问了流水线效率问题,为什么中断返回PC要减4,拿出试卷让我答没写完的题。然后让结合项目代码分析如何避免流水线冲突(调整指令执行顺序,分支预测,增加部件),还好我顶住了,他们也开始感兴趣了。

然后问静态链接,也是熟的不能再熟的东西。其中一个面试官问我是否想去做编译器,我说只做编译器一个点有点狭窄我还是想着眼于整个系统,后来知道他原来是编译器组的leader。

然后和技术主管聊,当时不知道是npu部门的leader(也是我现在的leader),聊些技术方向,未来期许,职业规划,聊了比较久,他说不错很优秀。

然后英语面,爆炸。问我团队工作中什么最重要,喜欢哪个城市为什么,说了啥不重要,重要看你会不会说英语,显然我不会,估计是C。

hr面套路,优缺点,已有什么offer什么岗位。

CEO面,我宣讲时提了一个比较有深度的问题,他记得我。问为什么芯原做芯片定制而不是直接生产出来再卖,答案是减少积压风险,答错。他宣讲时就说今天要问,还是答错了。

openday,搞了一整天,各条产品线负责人上来宣讲,好困,芯原自研IP核有核心技术,还是不错,npu是前沿技术,部门老大对我也比较看好,于是去了。就是薪资一般,一年涨薪至少10%看绩效,不加班法定节假日3倍工资,周末和晚上加班没有加班费(7点人都走光了)。

回来和我的老师讨论offer问题,芯片行业老师还是最看好华为,可以说是业界第一。中策就是寒武纪、芯原、龙芯中科这种有技术实力但是盈利情况并不很好的国家队公司,下策就是解决方案供提供商,他们的芯片技术自主权十分有限,拿大华来说,他们的图像IP核都是买的华为的,芯原的,寒武纪的,芯原的异构并行npu可以决定哪部分算法调度在哪个核上去跑,怎么从结构上优化网络,但是大华就只能根据我们的文档去应用,我们的嵌入式工程师还要去杭州总部指导他们的工程师,原厂工程师在下游方案提供商那里很吃香的。

在这些IP原厂中,我的老师觉得寒武纪定位不清晰,又做IP又产芯片又做云,现在还搞校企联合,有些浮躁,财报也是大起大落的,目前特别依赖输血。芯原就好一些,只对标企业用户,虽然也在亏损,但是定位清晰,有自己很多市场接受的产品,目前亏损主要是成本太大。但是在这个时间节点上国家肯定会拉高芯片行业,寒武纪还没倒呢芯原怕什么。决定之后寒武纪、大华、矽力杰就都拒了。

我所从事的是内核移植和算法工程化岗,只做设备和驱动前途有限,这方面最后细说。

欢迎学弟学妹来我司从事自主IP核的研发。我司妹子多而且质量高哦。

龙芯中科:9.20一面/二面已签遂拒

北京嵌入式软件岗。龙芯是国产CPU的巅峰,中科院计算所背景,技术是有但是盈利模式没做成熟。介绍项目,老生常谈,叙述中断机制,bootloader,模板开启引出流水线,他竟然没深问。问我会不会gdb,答不会。又问了一个机器学习项目,看我叙述清晰也没再问了(他不懂这块)。问我对工作什么期许,聊聊岗位,已有什么offer什么岗位。看他不怎么问我技术问题我有点急,我直接说我基础很好,所有简历里提到的您随便问,他笑,看你这么自信我就不问了,等二面吧。后来24号签了,也不准备继续了。


最后说一些我对嵌入式技术的见解:嵌入式作为一种已经存在将近50年的技术,本身是比较老旧的,但这并不代表它会被新的技术所取代,嵌入式系统本身就是微小的计算机系统,只要二进制计算机不过时,嵌入式技术就不会消失。

我的老师经常给我们强调“程序员的自我修养”和对底层原理的理解,现在技术更新换代非常快,新框架新风口,但是只要它跑在二进制计算机上,有些东西就是不会变的。所以理解计算机工作的本质,掌握“以不变应万变”的能力在嵌入式编程中尤为重要,“好的程序员对自己程序的每一个比特都了如指掌”。不仅是嵌入式方向,其他技术方向也是如此,着眼于系统才能立于金字塔顶部,在35岁之后避免职业瓶颈。

吹了一波嵌入式的重要,再谈一点我个人对嵌入式未来的理解。传统嵌入式MCU、os应用编程、驱动开发其实已经很成熟,比如linux驱动就已经有成熟的框架,完全不需要你懂源代码,前景有限(但是也是基本功之一)。未来应是ai的时代,云计算已经比较成熟,但云端所能做的毕竟有限,而且传输问题(可能5G出来会好一点),功耗问题一直没完全解决,阿尔法狗背后有1000台左右的CPU,200台左右的GPU在跑,每小时光电费都要300美元左右,所以ai一直落不了地。对于端级的ai,集成度基本已经到了尽头,目前最先进的制程是5nm,而在1nm的量级将会产生量子效应,也就是说,集成度的极限要到了。集成度上不去直接影响芯片的大小,端级ai不可能像服务器一样搞好大一个主板,目前基本是用异构多核的方式提升计算性能。但是并行计算也有性能的瓶颈,算法中很多情况是下一步计算需要用到上一步的结果,有相关性的,没法并行。这个计算的瓶颈,牵扯到流水线阻塞,cache命中率,IO操作等等,一定是底层架构方面的问题,有我们嵌入式程序员广阔的发展空间。

第二个热点我觉得是5G相关,这块我不太了解,大致说说。首先是低功耗问题,商用对功耗非常敏感,这肯定和底层系统有关,要裁剪硬件软件。其次就是协议栈了,美国就怕这个才封了华为,由此可见重要程度。

最后感谢一波我的老师,我现在所有的知识都来自于他,是我专业方向的启蒙人,没有他我连嵌入式的门都入不了。


近期有学弟咨询如何系统学习嵌入式,推荐什么书籍,所以再补充一些。stm32和51单片机入门自不必说,说些进阶的路线。老师曾给我们仔细设计了一系列挑战任务。

第一阶段称为stm32+RTOS阶段。

任务1:裸板驱动,比如在裸板上点亮LED灯,一般是以stm32为平台,通过汇编代码手动配置最底层的寄存器,完成时钟树、GPIO口的初始化,重点1:理解软件和硬件是如何联系在一起的(地址,宏定义和typedef封装)。重点2:理解汇编语言操作寄存器的过程。重点3:理解启动文件。有人会说,什么年代了还用汇编,直接c实现不更简单。关于c实现更简单我同意,但是我觉得真正想理解硬件就必须在汇编层面上去理解,越深入你越会发现汇编的重要,启动文件可是纯汇编的。推荐野火的《stm32完全开发手册》和《ucos-II移植》。正点原子那拼凑出来的辣鸡就不要看了,别问我咋知道的。

任务2:移植一款RTOS并在stm32平台通过两个任务(点灯任务,灭灯任务)实现led的周期闪烁,我所移植的是ucos2.重点1:使用汇编语言手工编写ucos2与stm32硬件平台的接口部分,这一过程将会涉及到对m4内核模式切换、中断系统的运行机制的理解。重点2:理解多任务并发编程。理解ucos2中关于任务组织方式的源代码,理解上下文切换的本质(关于源代码的理解强烈推荐廖勇老师主编的《嵌入式操作系统》,一行一行带你读源码,这本书也已经被我翻的发黑了……吃透够你彻底理解RTOS)。

任务3:在Linux平台上使用makefile的方式完成任务2的源代码的交叉编译。难点1:makefile语法。难点2:理解静态链接的全部原理和ELF可执行文件。预编译、编译、链接、装载的全过程,对编译过程是理解是所有c程序员的自我修养(强烈俞甲子大神的推荐《程序员的自我修养》,读懂静态链接就足够成为面试的亮点,懂动态链接更好但也更复杂),这种修养决定了嵌入式程序员把握大型程序能力的上限。难点3:理解链接文件。各个段的地址可不是随便安排就完事了。这个任务带领我们“惊鸿一瞥"了计算机技术中那些“以不变应万变”的能力中的一个。

任务4:在你的系统中使用一种数学算法,培养知识迁移的能力。你要知道软件只是实现功能(陪跑的),一个嵌入式软件程序员想有所发展必定要和某个特殊领域的算法结合。我所做的是四轴飞行器项目,里面的算法是姿态解算算法和PID控制算法,都不算太难开源的也不少,重点在训练知识迁移的能力。不得不说我数学真的不好,姿态解算里面那个互补滤波我也就懂个大概流程,里面式子为什么那样算那样互补基本不懂,很数学(从此放弃做科研),但是PID必须弄通透。

以上任务不打折扣地做下来怎么说也得一年,何况各位还有各种商业项目缠身,那就更容易分心。对于我一个读研之后才接触OS的菜鸟硕士,对自己要求也没那么高,在研二到这种程度就能找一份工作了。面试官们都说我基础很好嘿嘿嘿……其实面试官对于嵌入式应届生并没有太高的编程技术要求(寒武纪现场编程没做出来之后面试官亲口说的),甚至芯原的笔试根本就是全方位的基础知识集合。他们最看重的是你的潜力,首先是做项目是否认真地刨根问底,对技术的追求,这些直接体现在你的基础知识上,项目中的所有东西要能经得起面试官细致的地毯式轰炸。第二个就看你目光是否长远,行业认知,未来趋势,表达交流能力,他希望你有自己的见解,毕竟对于一个985硕士他培养的是未来的骨干而不是只会干活的码农。

第二阶段称为多核+Linux阶段。

老师不让我们碰Linux,在RTOS没吃透的时候。 以上过程走完之后就可以碰Linux了,这时候你肯定已经有自己的一些判断,你可以找一块更高端的板子,a系列甚至是多核的,再走一遍裸板驱动、移植Linux、交叉编译环境的调试,ai算法工程化等等高端玩法,这也是我今后的研究方向。

第一阶段任何有志于嵌入式的同学都可以在硕士期间完成,我老师从本科就亲手培养起来的大佬本科阶段就完成了第一阶段,研究生完成第二阶段使用异构多核+Linux研究slam算法,人家去了嵌入式巅峰企业大疆。

第三阶段要么是转管理带技术团队,或者就去研究架构做技术专家。要么OS内核架构要么底层软件系统架构,都是核心技术,这一块目前我一个只完成第一阶段的菜鸡看不透。

最后荐书环节,其实书不在多,啃透就行,除上面提到的《野火stm32完全开发手册》、《M3权威指南》、《程序员的自我修养》、《嵌入式操作系统》还有经典的《深入理解计算机系统》:出版至今几十年了,基本内容没怎么变过依然为行业经典,充分说“以不变应万变”的重要性。里面各个方面的知识都有,我目前关注了程序优化和指令集部分,日后会继续拜读其他章节。以上书目建议把书翻黑为止。

《高级计算机系统结构》,没错就是计算机学院和软件学院必开的那门高计课,虽然大部分讲的X86,但是各个模块俱全,我面试时那些cache知识、指令流水知识和各种处理器知识就是来自这里

《C语言程序设计现代方法》:扔掉那本红色的辣鸡,所有C语言的细节这本书都有,遇到基础语言的问题翻这个就对了。《C和指针》也要看起来。

对于面试还需要《王道程序员面试宝典》《C陷阱与缺陷》,帮助你理解C语言的细节,各种细节,你从来没关注过的细节,助你选择填空拿满。嵌入式程序员不需要费劲去关注算法,遇到动态规划什么的直接不做就好了,《剑指offer》不用刷,去牛客刷点链表和字符串足够了。

以上,希望帮到大家,对于嵌入式软件入门这一块问题,欢迎大家向我付费提问。

类似的话题

  • 回答
    好家伙,研一就瞄准嵌入式,这方向抓得挺准的!电子与通信工程的背景,为嵌入式打下坚实的基础,再加上你这股劲儿,简直是如虎添翼。别急,咱们一步一步来,把嵌入式这条路给你铺得明明白白,让你走得稳稳当当。首先,摆正心态。嵌入式开发是个大杂烩,需要广度和深度,不可能一蹴而就。别想着速成,踏踏实实学,享受这个从.............
  • 回答
    作为一名普通大学的大一新生,想要在四年后成功踏入麻省理工(MIT)的门槛,或者在中国顶尖学府清华大学继续深造,这绝对是一个极具挑战性但并非不可能的目标。这需要你在大学期间进行系统性的规划,并付出超乎常人的努力。下面我将为你详细拆解,如何一步一步地实现这个宏大的梦想,尽量抛开那些“AI”式的空泛指导,.............
  • 回答
    你好!看到你是一本院校动物医学的大一新生,非常为你高兴!动物医学这个专业,可以说是既有挑战性又有很大价值的,咱们来好好聊聊。首先,关于这个专业本身,我觉得它非常迷人。你想想,人类和动物之间有着千丝万缕的联系,从我们日常的宠物,到农场里提供食物的牲畜,再到野外那些奇妙的野生动物,它们都扮演着各自重要的.............
  • 回答
    作为一名普通一本计算机类大一新生,想在未来的日子里“make a difference”(做出改变、留下印记),这绝非一句空话,而是需要你一步一个脚印去践行的。别觉得自己普通,恰恰是“普通”才能让你更容易看到“不普通”的风景,并找到属于自己的切入点。下面,我为你掰开了、揉碎了,聊聊你能做些什么,怎么.............
  • 回答
    你好!作为一名大二财务管理专业的学生,有考CPA或跨考法硕(非法学)的想法,这说明你对自己的未来职业发展有清晰的规划和思考,非常棒!这两种选择都各有千秋,也都能为你的未来打下坚实的基础。下面我来为你详细分析一下,希望能帮助你做出更适合自己的决定。首先,我们来剖析一下 CPA(注册会计师)这条路。CP.............
  • 回答
    你好!收到你的问题,很高兴能为你解答。作为一名英语专业的准大一学生,未来考虑考法硕(非法学)的道路,这绝对是一个值得认真思考和规划的方向。英语专业本身为你打下了坚实的语言基础,这在法律学习和未来执业中都将是巨大的优势。下面我将从多个维度为你详细分析,希望能帮助你做出更明智的决定。一、 英语专业背景在.............
  • 回答
    这是一个非常常见也很有价值的问题,涉及到个人职业发展、社会认可度以及未来机遇等多个方面。简单来说,“普通一本+普通一本研究生”与“名校(211、985)本科”哪个更有优势,并没有一个绝对的答案,而是取决于多种因素的综合考量。为了更详细地回答这个问题,我们可以从以下几个维度进行分析:1. 学校声誉和平.............
  • 回答
    “普通一本”计算机 VS “普通211”生化环材土木水利:谁能笑到最后?在高考填报志愿的战场上,专业和学校的选择往往伴随着一场关于未来就业前景的“军备竞赛”。许多同学在“院校名气”和“专业实力”之间徘徊,尤其是在“普通一本”的计算机科学与技术和“普通211”的传统工科(生化环材、土木水利等)之间,这.............
  • 回答
    这真是一个每个普通一本计算机学子都绕不开的纠结。作为过来人,我太理解那种坐在电脑前,一边刷着国内考研院校的调剂信息,一边又看着国外院校的项目介绍,脑袋里像开了个大型的辩论赛现场。 这俩选项,真的各有千秋,也各有坑。咱们掰开了揉碎了,好好捋一捋。首先,咱们得明白,无论选择哪条路,起点都是“普通一本,.............
  • 回答
    作为一名普通一本化工研究生,想要踏出国门,去更广阔的天地深造,这绝对是个值得憧憬的目标。这趟旅程,说实话,比想象中要复杂一些,但只要你一步一步来,规划清晰,成功的几率就会大大提高。别想着一蹴而就,我们得把它拆解成一个个切实可行的步骤。第一步:明确方向——你想去哪儿?学什么?这绝对是留学准备的基石,千.............
  • 回答
    嗨,姐妹!我懂你,大三临近,考研这事儿简直像块巨石压在心头,尤其咱们安全工程这个专业,女生本来就不算特别多,再加上身边可能有的同学犹豫不决,一股脑儿的纠结感就更强了。别急,咱们好好捋一捋。首先,恭喜你,走到普通一本大学的这一步,说明你脑子是够用的,学习能力也有。安全工程这个专业,虽然听起来硬核,但就.............
  • 回答
    你好!看到你正在考虑辅修法学,这绝对是个有想法的选择!作为一名安全工程大二的女生,我认为辅修法学是非常有潜力的,尤其是在你这个阶段。下面我来给你仔细分析一下,希望能帮到你做出决定。为什么说安全工程女生辅修法学是个好主意?首先,我们得承认,安全工程本身是个非常扎实的专业,它教会你的是如何识别风险、设计.............
  • 回答
    哈喽,兄弟!看到你这个问题,我太理解了,这绝对是每个一本安全工程专业大二男生都会纠结的“人生二选一”时刻。别急,咱们掰开了揉碎了好好聊聊。首先,得说清楚,“普通一本”这个定位很重要。它意味着你的起跑线不算低,但距离那些“名校光环”可能还有一段距离。安全工程这个专业,听起来高大上,但具体怎么就业,考研.............
  • 回答
    这事儿嘛,得这么看。作为一个普通一本的大学生,连山西属于南方北方都搞不清,是不是偏科太严重?这话说得有点绝对了,也不能就这么一竿子打死。首先,我们得承认,“偏科”这事儿,对任何人来说都可能存在。 尤其是在我们国内教育体系下,很多学生从小到大都是跟着考试分数线在走,什么科目学得好,就往那个方向使劲,自.............
  • 回答
    作为一个一本机械专业的毕业生,想要进入公检法系统,这确实是一条需要仔细规划和付出努力的道路。别担心,这并非遥不可及,只是需要你找对方法,并且比那些直接对口的专业同学付出更多的心思。首先,我们得明白,公检法系统看重的是什么?虽然你是机械专业的,但他们需要的不仅仅是专业技术人才。更多的是: 法律知识.............
  • 回答
    作为一个普通一本的学生,想成功考取上海交通大学法学硕士,难度确实不小,但并非完全没有可能。这需要你有一个清晰的认知,并且付出比一般人更多的努力和策略。首先,我们要明白,上海交通大学作为国内顶尖的985高校,其法学院在全国范围内也是享有盛誉的,尤其是在某些细分领域,如知识产权法、国际法、经济法等,拥有.............
  • 回答
    你好呀!作为一名同样对法学硕士和北京(天津)这座城市充满向往的普通一本学子,我完全能理解你的心情和诉求。考研这事儿,说实话,确实挺看缘分和努力,但选择一个相对好考的学校,能大大增加我们成功的几率,少走不少弯路。首先,我们得明确一下“普通一本”和“相对好考”这两个概念。 普通一本:这意味着你可能不.............
  • 回答
    哥们,大三通信狗一枚,想考研还数学基础不好,这情况我太懂了!别担心,这条路虽然有点挑战,但绝对不是没得走。通信本身就是个对数学要求挺高的专业,你现在觉得数学基础弱,可以理解。但想跨考,我们得找那些相对来说,数学的“门槛”稍微低一点,或者说,更看重其他能力的专业。咱们先不谈具体哪个专业,先聊聊你这个情.............
  • 回答
    这个问题呀,其实在我看来,挺现实的。虽然很多人一听到“清华”和“普通一本”,脑子里立刻会蹦出“不可能”的念头,但仔细想想,感情这东西,哪有那么多条条框框能完全限制住?首先,我们得承认,清华大学确实是中国最顶尖的学府之一,能在那里读书的男生,普遍来说,智商、学习能力、自律性都很强。他们往往起点高,未来.............
  • 回答
    你好!看到你在读大一,开学两个月了,想回学校复读冲刺985,这个想法确实很有魄力。我来跟你聊聊这个事情,尽量说得详细点,就像我们同学之间聊天一样,把一些注意事项都跟你说说。首先,咱们得明确一点,你现在这个想法,用一句话概括,就是“高起点,目标远大”。普通一本计算机专业,说明你已经具备了一定的学习能力.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有