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

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



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


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

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

  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-

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做决定要趁早

之前接触的一个读者朋友,几个月前跟我咨询了问题,那时候因为有个决定困扰他,已经快抑郁了,不过到现在为止,还没有做决定。做决定这个事情,我希望不要拖太久,不要咨询太多无关的人,做…

2009第二届C++技术大会即将在上海隆重召开

2009第二届C技术大会即将在上海隆重召开 作为软件开发语言的翘楚,C对于现代软件的发展功不可没,特别是在系统软件开发领域,C扮演着关键的角色。中国作为全球软件产业最具潜力的市场,越来越多的企业认识到了C及相关系统软件技术在软…

大数据开发你需要知道的十个技术

前言 “当你不创造东西时,你只会根据自己的感觉而不是能力去看待问题。” – WhyTheLuckyStiff 汇总一些自己在大数据路上走过的弯路,愿大家不再掉坑… 1.分布式存储 传统化集中式存储存在已有一段时间。但大数据并非真的适合集中式存储架构。Hadoop设计…

华为这个事,是不是刷KPI?

最近闹的比较热闹的事情是&#xff0c;华为有人提交到Linux 上的代码被审核员点名批评刷KPI&#xff0c;并且&#xff0c;这个邮件还上了头条。提交的代码修改如下From: Zhen Lei <thunder.leizhenhuawei.com> To: Kees Cook <keescookchromium.org>,Anton Voronts…

前端小demo——全选和全不选

模拟购物车&#xff0c;实现全选或者全不选&#xff0c;或者其中任意一件单品单选的效果。 点击顶部复选框实现全选 列表中任意一项未选中&#xff0c;顶部复选框就是未选中的状态 <!DOCTYPE html> <html><head lang"en"><meta charset"UT…

毕业2年,我的工作小结

文章转自我的读者朋友&#xff0c;他毕业后从事的是BSP开发工作&#xff0c;主要做LCD模块&#xff0c;我们算是认识比较久&#xff0c;刚毕业那会聊的也挺多&#xff0c;时间过得很快&#xff0c;想不到他已经毕业两年了。最近几天公司&#xff0c;公司的小鲜肉多了起来。我偶…

Something about WinCE6.0 R3

Windows Embedded家族 Windows Embedded CE概览 WinCE6.0 R3新增组件 R3的发布让WinCE6.0如虎添翼 嵌入式系统的Silverlight 引入Silverlight后UI新的体系结构 触摸手势的支持将彻底改变用户体验

我现在都在这里买元器件了!

记得上大学那会做单片机项目需要买元件&#xff0c;我们就需要跑到市中心去买&#xff0c;绕过大大小小的街道&#xff0c;可以看到坐在柜台的老板&#xff0c;然后跟老板拉扯几句&#xff0c;然后进入大包小包的买卖中。做一个最小系统板至少也要花个小100块钱&#xff0c;大学…

高考失利要不要复读?

对于我&#xff0c;如果考不好&#xff0c;我一定会复读。这个事情在每个人身上可能会不同&#xff0c;所以先从我说起&#xff0c;我出生在一个非常贫穷的农民家庭&#xff0c;我有好几个表哥&#xff0c;还有几个堂哥&#xff0c;甚至于我哥&#xff0c;他们读书都非常差&…

我是这样分析Linux性能问题的

在互联网公司普遍“996”的大环境下&#xff0c;大部分做应用的开发者&#xff0c;大都将精力集中在业务代码的优化和调配上&#xff0c;忽略了对 Linux 内核的学习。而且&#xff0c;这部分知识本身就很复杂&#xff0c;所以学习成本也比较高。但是&#xff0c;只要你经历过公…

随便聊聊,Linux 中的环境变量

大家好&#xff0c;今晚说点简单的。环境变量环境变量在进行linux开发过程中经常碰到&#xff0c;那什么是环境变量呢&#xff1f;很多朋友在刚学习Linux的时候对环境变量不是特别理解&#xff0c;变量不应该是在编程语言中类似于全局变量和局部变量吗&#xff1f;怎么又来了个…

IntelliJ IDEA使用教程(很全)

这个编辑器我就不再多做介绍了。直接开始新建maven hello world 的Java web项目啦 你电脑上得有jdk1.7&#xff0c;或者1.8&#xff0c;然后就是maven3.x吧&#xff0c;再有就是tomcat7以上吧。还得有我这个编辑器。这些是准备条件 下面就直接开始看图啦&#xff1a; 这个我刚刚…

U-Boot之代码调试

“ 让调试U-Boot不再困难”本文介绍U-Boot的两种调试方法&#xff0c;一种是基于代码级别&#xff0c;另外一种是基于工具进行在线调试。01—DEBUG宏U-Boot自带DEBUG宏&#xff0c;打开该宏定义之后&#xff0c;会增加许多的内在打印信息供开发人员参考。这个宏定义的开关可以通…

快两年的时间,我都干了啥

‍‍‍‍大家好,我是写代码的篮球球痴这是一篇总结性的文章&#xff0c;主要是总结这一年多快两年的时间&#xff0c;我都在做了些什么。公司名字我就不说了&#xff0c;知道的人一眼就知道了。我们是一家智能家居的公司。提到智能家居&#xff0c;就一定会涉及网关&#xff0c…

ioremap,你应该知道的事

因为现在使用是dts来表示板级&#xff0c;也就是machine&#xff0c;所以现在我们在内核使用内核映射使用的函数是of_iomap。c代码&#xff1a;struct device_node *node NULL;unsigned int irq_info[3] { 0, 0, 0 };u32 phys_base;switch (idx) {case 0:node of_find_node_…

.NET 二维码生成(ThoughtWorks.QRCode)

引用ThoughtWorks.QRCode.dll &#xff08;源代码里有&#xff09; 1、简单二维码生成及解码代码&#xff1a; //生成二维码方法一private void CreateCode_Simple(string nr) { QRCodeEncoder qrCodeEncoder new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode QRCodeEnc…

TCP三次握手及四次挥手详解

此篇文章转载自&#xff1a;http://justim.blog.51cto.com/740099/237548TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议&#xff0c;提供可靠的连接服务&#xff0c;采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchron…

一文读懂 | CPU负载均衡实现

在《一文读懂 | 进程怎么绑定 CPU》这篇文章中介绍过&#xff0c;在 Linux 内核中会为每个 CPU 创建一个可运行进程队列&#xff0c;由于每个 CPU 都拥有一个可运行进程队列&#xff0c;那么就有可能会出现每个可运行进程队列之间的进程数不一样的问题&#xff0c;这就是所谓的…

NA-NP-IE系列实验28:HDLC 和PPP 封装

实验28:HDLC 和PPP 封装<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1. 实验目的通过本实验&#xff0c;读者可以掌握如下技能&#xff1a;&#xff08;1&#xff09; 串行链路上的封装概念&#xff08;2&#xff09; HDLC 封…

使用git提交到github,每次都要输入用户名和密码的解决方法

使用git提交文件到github,每次都要输入用户名和密码&#xff0c;操作起来很麻烦&#xff0c;以下方法可解决&#xff0c;记录以下。 原因&#xff1a;在clone 项目的时候&#xff0c;使用了 https方式&#xff0c;而不是ssh方式。 默认clone 方式是&#xff1a;https 切换到&am…