如何快速构建嵌入式全栈知识体系?

嵌入式是一门交叉学科。

一个嵌入式电子产品(比如手机)从底层到上层,一般会涉及半导体芯片、电子电路、计算机、操作系统、多媒体等不同专业领域的知识。

很多从事嵌入式开发的朋友,通常来自不同的专业(电子、电气、计算机、机械、自动化、物理,甚至一些文科专业),在实际学习和开发中,由于专业背景的限制,经常会遇到各种技术壁垒:搞硬件的不懂软件,搞软件的不懂硬件,搞底层芯片的不懂上层软件,搞上层软件的不懂底层芯片。

嵌入式技术栈太深,除了极少数人,一般人很难实现“技术破圈”,将整个技术栈从上到下捋一遍,彻底打通。

相对于桌面开发,嵌入式开发还具有碎片化特点:不同架构(如ARM、MIPS、RISC-V等)、不同厂家的SoC处理器(如Cortex-M系列、cortex-A系列、AI芯片等),不同的操作系统(Linux、uC/OS、FreeRTOS、Android等),一般都需要匹配对应的编译开发环境,然后工程师才能基于这个编译环境做应用开发。

如果把软件开发比作开饭馆卖饺子,那么对于桌面软件开发而言,锅碗瓢盆、水电煤气,甚至饺子(超市里的速冻饺子)都准备好了,标准统一,就等着你下锅,可以根据顾客不同的需求,做成一道道不同的美食:猪肉芹菜的、三鲜的、蒸的、煮的、煎的。

而对于嵌入式开发,可能情况就不太一样了:没有现成的饺子成品可以用,擀饺子皮、剁陷、锅碗瓢盆都需要自己动手准备,开发环境需要自己搭建。

遇到问题,不能仅仅局限于当前的软件业务逻辑,可能还要从芯片、硬件电路、操作系统、底层驱动,甚至编译器等不同的维度去分析,去定位出现问题的原因。

随着半导体行业趋势的变化,以及国内对芯片行业的大力投入,国产芯片越来越多,未来嵌入式软件工程师的工作岗位和工作内容也会随之发生一些变化:

嵌入式开发人员不再仅仅是基于芯片厂家提供的现成的开发板、BSP软件包、产品方案去开发产品,而是有越来越多的工程师直接进入芯片原厂工作,参与芯片底层软件的开发和维护工作:芯片测试、操作系统移植、驱动开发与维护、以及基于自家芯片产品方案的推广和技术支持等工作。

在芯片设计前期,嵌入式软件工程师有时候还需要和IC工程师一起去测试芯片,编写相应的测试代码和测试案例。

工作职责和工作内容的变化,需要嵌入式软件开发人员不断扩充自己的知识体系,不断学习和解锁新的技能:C语言编程技能、软件工程、编译原理、计算机体系结构、操作系统、汇编语言、硬件电路,有时甚至还需要了解一些芯片设计、芯片制造、CPU内部结构等“圈外”知识。

每一个新的知识点,每一门新的技能,市面上都有大量的经典书籍可以参考阅读,但每一本书都很厚,都有自己偏向的领域和侧重点,和我们的实际工程需求往往有一定偏差,都需要花大量的时间和精力去阅读和消化,然后才能提炼出我们在嵌入式开发中所需要的一些核心知识点和关键技能。

有了这些核心知识点和关键技能作为理论支撑,我们就可以在嵌入式开发中更好、更快地解决各种工程问题。

工程师都很忙,没有大片的时间和精力去通读各种经典书籍,或者说很少有人能坚持读完。

嵌入式开发人员的专业背景各不相同,每个人的知识储备和点亮的技能树也参差不齐,知识体系的不完善和基础技能的储备不足,往往会影响实际工作的输出效率,在工作和学习中会遇到各种各样的问题无法解决,学习陷入困境,或者工作陷入卡壳。

那有没有更好的方法,快速掌握这些嵌入式开发所需要的核心知识点和关键技能呢?

答案是:有。

基于这个现实需求,《嵌入式C语言自我修养:从芯片、编译器到操作系统》出版了。

作者基于自己的嵌入式学习经历和工作经验总结,从最底层的一堆沙子开始,一步一步,带领大家学习CPU芯片是如何设计和制造出来的:

  • CPU内部结构是什么样的?

  • CPU是如何工作的?

  • 编译器和指令集的作用是什么?

  • 一个程序的编译、链接、安装和运行的过程是怎么样的?

  • 程序运行时的内存世界是什么样的?

  • 为什么会有内存错误?

  • 栈溢出攻击是怎么回事?

  • 如何才能真正地理解和掌握C语言?

  • 为什么很多人在阅读Linux内核源码时感到很吃力,看不懂?

  • 非计算机科班的朋友如何快速掌握操作系统的核心原理和概念?

  • 如何快速理解多任务编程思想?

  • 进程、线程和协程有什么区别?

这些疑问在书中都会一一讲解。

写作初衷

本书的写作初衷,主要是为不同专业背景的嵌入式学员弥补理论短板:以C语言为切入点,从最底层的芯片开始,到编译器、操作系统、软件工程、系统框架、进程、线程、协程,搭建一个嵌入式开发所需要的完整知识体系和认知框架。

平衡理论与工程

本书不会像经典书籍那样面面俱到,深入每一个细节,而是有的放矢,在理论和工程之间做一个平衡,一切都刚刚好:一切以满足实际工程需要为参考点,所有学习的知识点满足实际项目所需要的理论支撑即可,不会深入到学院派关注的各种细节和性能指标,以免深入其中无法自拔,耗费太多的时间。

掌握了这些实际开发中需要的核心知识点和关键技能,也就补齐了理论短板。

此时,相信大家也会对嵌入式开发有一个更加清晰的整体认识,在工作中遇到各种问题,都可以尝试用这个知识体系和认知框架去分析和解决,分析问题有了着力点,也就有了思路,也就不再迷茫。

通俗风趣

相比其他书籍,本书坚持使用大白话写作,通俗易懂,不怕学不会,就怕你不学。

使用风趣幽默的写作风格,以增强阅读体验,越读越想读,无论读多久都不会觉得枯燥。

内容新颖

在本书内容安排上,做了很多尝试性创新,比如:

  • 独家讲解GNU C编译器扩展语法,帮你破解阅读Linux内核源码时遇到的各种稀奇古怪的语法难题。

  • 首次在ARM平台下,通过反汇编,带你理解C语言背后的底层运行机制,深度讲解程序的编译、链接、安装和运行原理,深度讲解程序运行时的动态内存管理、内存泄漏、栈溢出攻击示例等。

  • 结合嵌入式开发常用的三种场景:裸机环境、RTOS、Linux,帮助大家去分析和总结这三种场景下的内存管理,让你一览整个嵌入式开发环境概貌。

  • 针对当前火热的人工智能、AIoT、异构计算等热门技术,从一堆沙子开始,一步一步带你了解整个CPU芯片设计、制造、封装流程,CPU内部结构及工作原理:流水线、cache、单发射、多发射、乱序执行,SIMD、NEON、多核、异构...

  • 针对Linux内核驱动阅读难题,在本书中也分享了C语言的OOP编程思想,教你如何使用C语言来实现OOP编程,如何利用OOP思想去分析Linux内核中复杂的驱动和子系统。

  • 针对电子类、自动化类等跨行进入嵌入式专业的朋友,零基础入门操作系统的核心概念,教你如何在裸机环境下使用多任务思想编程,如何使用状态机进行任务分解,以及RTOS任务调度的核心数据结构。让你不需要去啃大块头的《操作系统》书籍,直接切入操作系统最核心的知识点。

  • 重点分享C语言的模块化编程思想,从零开始,从一个单文件开始,一步一步教你如何去封装一个模块,如何去使用一个模块,如何模块间通信,如何建立模块依赖,软件如何分层,模块如何解耦,如何将你的软件迭代为框架,帮你树立软件工程的意识,框架编程思想,让你写的代码更加容易扩展和维护。

  • ARM架构越来越流行,在手机、平板、桌面PC和服务器领域攻城拔地,市场份额越来越大,而目前很多编译原理都是基于X86架构来分析的。本书打破惯例,首次在ARM平台上,通过反汇编手段,剔除编译过程中各种语法分析等对嵌入式工程师无关紧要的技术,给大家分享ARM平台下程序的编译、链接、安装、运行全景图,尤其是动态链接过程、多进程如何共享动态库、内核模块是如何动态加载和运行的、U-boot是如何自举并重定位的,这些嵌入式开发中经常遇到的核心知识点和难点,会带领大家逐一分析。

口碑之作

本书的大部分内容基于作者几年前录制的、专门为嵌入式工程师打造的C语言视频教程:C语言嵌入式Linux高级编程改编。

结合几千名学员的中肯评价和不断反馈,几经修改,不断优化结构和内容安排,纸质版如今才得以和大家见面。

全书正文560+页,加上目录、前言等,差不多600页,握在手上,沉甸甸的,全是干货。写书是枯燥的,耗时的,几经拖延,几经修改,最后还是跟大家见面了,用口碑和信念做编程教育,致力于分享最原汁原味的技术和干货知识,几千名学员的中肯反馈和积极评价是最让人欣慰的,也是这本书质量的保障。

愿这本书也能为你的嵌入式学习尽一份力,为你的嵌入式职场生涯增砖添瓦。

▊《嵌入式C语言自我修养——从芯片、编译器到操作系统

王利涛 著

  • AIoT时代嵌入式开发集大成之作

  • 10年工作及培训总结

  • 从芯片编译器到操作系统等嵌入式开发所需核心理论和技能一应俱全

  • 51CTO/CSDN/淘宝/QQ学员力荐

本书是一本专门为嵌入式读者打造的C语言进阶学习图书。本书的学习重点不再是C语言的基本语法,而是和嵌入式、C语言相关的一系列知识。作者以C语言为切入点,分别探讨了嵌入式开发所需要的诸多核心理论和技能,力图帮助读者从零搭建嵌入式开发所需要的完整知识体系和技能树。

(扫码查看本书详情)

如果喜欢本文
欢迎 在看丨留言丨分享至朋友圈 三连最后~~~大家评论文章,留言评论前6名每人送一本纸氏书籍,包邮的哦。时间截止:2021-06-25,20:00:00还有4本送给用心评论的小伙伴,我会从评论中挑选,并置顶你的评论,如果你
如果你的评论被回复并置顶了,请一定要联系我,并把邮寄地址发给我。
同样,留言点赞获奖的同学,在截止时间后,一定要把地址给我。过期不候啊!!
推荐阅读:
专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈
关注公众号,后台回复「1024」获取学习资料网盘链接。
欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~
嵌入式Linux微信扫描二维码,关注我的公众号▼点击阅读原文,查看本书详情~

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

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

相关文章

台湾高僧称游戏中杀人是罪业死后要下地狱

台湾著名高僧净空法师的一段谈因果报应的视频,近来被上传到网络上,引发网友特别是游戏玩家的极大反应。净空法师在这段视频中说,在电子游戏中杀人所造下 的罪业和杀真人是相同的,死后肯定会下阿鼻地狱,出来后也还要慢慢…

SpringBoot 封装返回类以及session 添加获取

1、创建返回类Result public class Result<T>{/*错误码*/private Integer code;/*提示信息 */private String msg;/*具体内容*/private T data;public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}public String getMsg() {r…

每日一题(44)—— 请列举一个软件中时间换空间或者空间换时间的例子

请列举一个软件中时间换空间或者空间换时间的例子&#xff1a; --->时优 void swap(int a,int b) {int c;ca;ab;bc; } --->空优 void swap(int a,int b) {aab;ba-b;aa-b; }

迅雷的声音:摆脱视频产业的经济化困境

两个视频版权联盟之间的交锋日前到了白热化阶段&#xff0c;居然在深圳发生了两个发布会唱对台的戏剧化场面。迅雷发表声明“承诺推动视频市场正版化”&#xff0c;迅雷CEO甚至表示要去公证处跟对手“比谁的版权多”。在我看来&#xff0c;虽然去公证处大可不必&#xff0c;但至…

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

大家好&#xff0c;我是小嵌&#xff0c;在知乎上看到这个问题&#xff0c;其中有一个答主的答案很经典&#xff0c;特此分享给大家。说实话&#xff0c;问题中嵌入式开发这个话题有点庞大&#xff0c;毕竟它涵盖的领域和范围很宽泛。作为一个在嵌入式软件开发方面工作了十多年…

做决定要趁早

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

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

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

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

前言 “当你不创造东西时&#xff0c;你只会根据自己的感觉而不是能力去看待问题。” – WhyTheLuckyStiff 汇总一些自己在大数据路上走过的弯路&#xff0c;愿大家不再掉坑… 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;他们读书都非常差&…