嵌入式系统开发者需要掌握什么技术?

共 1590字,需浏览 4分钟

 ·

2021-06-24 14:04

大家好,我是小嵌,在知乎上看到这个问题,其中有一个答主的答案很经典,特此分享给大家。




说实话,问题中嵌入式开发这个话题有点庞大,毕竟它涵盖的领域和范围很宽泛。作为一个在嵌入式软件开发方面工作了十多年的老程序猿,这么多年过来也在通过不停的自学和各类项目的历练中,不断积累自己的嵌入式软件开发的技能栈。


这里也借题主的问题宝地,梳理一下嵌入式软件开发方向的技能栈,以期对题主和广大嵌入式软件爱好者有所帮助。毕竟是站在个人的经历角度分享,如有缺失敬请谅解。


作为嵌入式软件开发,其实可以细分为:


  1. 嵌入式MCU软件开发工程师;

  2. 嵌入式Linux底层(BSP)软件开发工程师;

  3. 嵌入式Linux应用开发工程师;

  4. 嵌入式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-


点击下方卡片关注,一起学嵌入式。

浏览 34
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报