嵌入式系统开发者需要掌握什么技术?
大家好,我是小嵌,在知乎上看到这个问题,其中有一个答主的答案很经典,特此分享给大家。
说实话,问题中嵌入式开发这个话题有点庞大,毕竟它涵盖的领域和范围很宽泛。作为一个在嵌入式软件开发方面工作了十多年的老程序猿,这么多年过来也在通过不停的自学和各类项目的历练中,不断积累自己的嵌入式软件开发的技能栈。
这里也借题主的问题宝地,梳理一下嵌入式软件开发方向的技能栈,以期对题主和广大嵌入式软件爱好者有所帮助。毕竟是站在个人的经历角度分享,如有缺失敬请谅解。
作为嵌入式软件开发,其实可以细分为:
嵌入式MCU软件开发工程师;
嵌入式Linux底层(BSP)软件开发工程师;
嵌入式Linux应用开发工程师;
嵌入式FPGA算法开发工程师
我这么多年,从MCU开发及Linux应用开发起步,在合伙创业过程中自学并通过项目实践构建了Linux底层驱动技能栈,FPGA算法工程师仅仅因为与公司的相应同事有过交际集,这里就不过多阐述FPGA算法工程师的技能栈,防止给大家带跑偏了。
1. 嵌入式MCU软件开发工程师
【基本武器】
C语言编码能力(数据结构,常用算法,指针和数组,结构体和位域等)
MCU的理论知识(时钟树,内存,中断,GPIO,功能外设(uart,iic,dma等)等)
MCU的编码方式(寄存器/库函数),编译下载过程(根据题主选择的MCU来学习)
基本的电路连线图能看懂(MCU的管脚如何连接到外界器件等)
实时操作系统编码能力(ucos,freertos,liteos等等)
业务场景知识(根据题主嵌入式产品场景而定)
【升级武器】
软件架构设计能力
示波器,逻辑分析仪使用(调试通信器件使用)
读取反汇编能力(定位Bug时候可能用到)
掌握通信协议(串口232通信,485通信,iic协议,spi协议,tcp/ip,can协议等等)
2. 嵌入式Linux应用开发工程师
【基本武器】
Linux C语言编码能力(数据结构,常用算法,指针和数组,结构体和位域等)
Linux常用功能API(多线程,多进程,锁类,进程/线程通信机制相关等)
Linux Shell使用(基本的Linux操作能力)
Makefile/GDB调试
掌握通信协议(串口232通信,485通信,iic协议,spi协议,tcp/ip,can协议等等)
业务场景知识(根据题主嵌入式产品场景而定)(比如视频,那么rtsp,h264编码,视频基础)
【升级武器】
软件架构设计能力
读取反汇编能力(定位Bug时候可能用到)
Linxu操作系统理解(用户态,内核态,中断机制,内存机制等)
3. 嵌入式Linux底层(BSP)开发工程师
【基本武器】
Linux C语言编码能力(数据结构,常用算法,指针和数组,结构体和位域等)
Linux裁剪,移植,编译
Linxu操作系统理解(用户态,内核态,中断机制,内存机制等)
Linux Shell使用(Linux操作能力)
bootloader(uboot等)修改
基本调试用通信方法(uart,tcp/ip)
【升级武器】
Linux驱动开发能力
Linux内核机制
等等
以上根据个人的工作经历中使用的技能栈总结,难免存在遗漏。毕竟每个嵌入式工程师从事的行业不同,技能栈也会有所不同。
以上建议,也仅供题主和广大嵌入式软件爱好者参考。
作者:snowdream
链接:https://www.zhihu.com/question/449050796/answer/1782550929
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-END-
点击下方卡片关注,一起学嵌入式。