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

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



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


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

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

  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设计…

每日一题(45)—— 字符数组找错

void test2() {char str1[10], str2[10];int i;for(i0; i<10; i)str1[i] a;strcpy( str2, str1 ); }这段代码有什么问题&#xff1f; 解答&#xff1a;如果面试者指出字符数组str1不能在数组内结束可以给3分&#xff1b;如果面试者指出strcpy(str2, str1)调用使得从str1复制…

华为这个事,是不是刷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…

PHP函数库06:PHP统计字符串里单词出现次数

<?functionfull_count_words($str) { //返回完整数组&#xff0c;包含字符串里每个单词 $wordsstr_word_count($str,1); $resultarray(); foreach($wordsas$w) { $lwstrtolower($w); //判断单词是否是第一次出现&#xff0c;是则设置为1&#…

每日一题(46)—— volatile

1.一个变量可以既是const 还是volatile吗&#xff1f;解释为什么&#xff1f; 可以&#xff0c;例如状态寄存器。它首先应该是volatile 因为它可以出乎意料的修改&#xff0c;而且应该是const&#xff0c;这个寄存器程序不应该去修改。 2.一个指针可以说volatile的吗&#xf…

毕业2年,我的工作小结

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

[Luogu 1351] NOIP2014 联合权值

[Luogu 1351] NOIP2014 联合权值 存图&#xff0c;对于每一个点 \(u\)&#xff0c;遍历它的所有邻接点。以 \(u\) 为中转点的点对中&#xff0c;\((x,y)\) 的联合权值 \(w_x \cdot w_y\) 最大&#xff0c;当且仅当 \(x\) 与 \(y\) 的点权在 \(u\) 的所有邻接点中是前两大的。 成…

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;大学…

每日一题(47)—— 置1与清0

嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a&#xff0c;写两段代码&#xff0c;第一个设置a的bit 3&#xff0c;第二个清除a 的bit 3。在以上两个操作中&#xff0c;要保持其它位不变。 置1用|&#xff0c;清0用& #define BIT3 (0x01<<3) sta…

读书笔记:《时间投资法》之一

<时间投资法>第一章:为什么搞笑管理时间很难 管理难的理由: 1 .没有最佳法则 我们无法找到适合所有人的生活方式,因此也就找到适合自己的管理时间的法则并不容易.别人的并不一定适合自己. 2. 效果测评有一定难度 对策: 对策一:每天尝试新的方法. 不要把失败的九次看成浪…

高考失利要不要复读?

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

每日一题(48)—— 中断

中断是嵌入式系统中重要的组成部分&#xff0c;这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是&#xff0c;产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR)&#xff0c;请评论一下这段代码的。 …

apiCloud中的API对象

1.属性 appId apiready function () {var appId api.appId; //比如&#xff1a; A6980386445546var appName api.appName; //比如&#xff1a; AppLoadervar appVersion api.appVersion; // 比如&#xff1a; 1.0.0var systemType api.systemType; // 比如&#xff1a; i…

静态测试

静态测试 为什么要进行静态分析呢&#xff1f;一个软件产品可能实现了所要求的功能&#xff0c;但如果它的内部结构组织的很复杂&#xff0c;很混乱&#xff0c;代码的编写也没有规范的话&#xff0c;这时软件中往往会隐藏一些不易被察觉的错误&#xff0c;这是其一。其次&…

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

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

每日一题(49)—— 有符号数与无符号数

void foo(void) {unsigned int a 6;int b -20;(a b> 6)?(">6"):("<6"); } 上面代码输出是什么&#xff0c;为什么&#xff1f; 答案是“>6”原因是当操作数中有符号类型和无符号类型进行运算时所有的操作数都自动转换成无符号数。