虚字潜心
教程(一):如何入门嵌入式。
入门嵌入式首先要了解嵌入式,至于是什么是嵌入式大概可以理解为使用专用计算机系统做一些应用的人,所以覆盖面非常广,小到家电、消费电子、玩具。大大到航空航天,军事装备。嵌入式的身影其实随处可见。但是产值很高的部分大部分人并无机会参加,多数人都是在干一些民用领域的比如汽车电子,仪器设备。
嵌入式的工作主要可以根据处理的生产资料分为大体上分为硬件工程师和软件工程师。实际上不存在纯软或者纯硬,多少都会接触点,至少工作中需要你都会一些。软件部分倒是相对简单,嵌入式的门槛在于硬件,也就是电磁学、半导体物理等等,而这些知识的学习又离不开高等数学和线性代数,同时还要追加一门在高等数学基础之上的积分变换,复变函数作为数学基础。这些才是嵌入式真正的行业门槛。软件更多的是作为一种生态支持而存在。当然现在嵌入式软件的发展其实也已经可以单独独立出来与计算机或者软件工程做结合。
不过就现实而言,确实有部分大学在计算机科学和软件工程里开设了嵌入式相关的选修课。
读到这里我相信你已经对嵌入式有所了解,不过需要强调的是,一定不要把嵌入式和软件或者计算机搞混淆,从关系上来看,嵌入式是综合了计算机和电子的综合学科,就单纯的技术面而言,嵌入式要广阔的多。但是嵌入式也不是完全没有什么特点,嵌入式设备相比其他我们常用的电子设备,例如个人电脑而言,小型化,高集成度与低功耗是嵌入式技术的一个比较大的特点。
因为嵌入式有着以上种种门槛,所以如果你是打算工作的话至少要花费两年的时间,才能学完一个电子信息学生的知识。不建议非电子信息类专业的人转来。而且大部分公司的招聘也有专业限制的要求,所以很可能导致您扑空,还有就是,单纯的就现实而言,嵌入式行业有着高门槛(这里门槛只的是学习门槛而非学历,实际上嵌入式的学历要求并不算太高,毕竟学的人不多,太挑招不到人)和低待遇的特性,所以坚持干下去并不是很简单,平均月薪只有7k~8k。单论赚钱而言不如软件。
现在我们开始来学习如何入门嵌入式。
虽然嵌入式有着很高的知识壁垒和门槛,但是因为这个行业太过于成熟。所以入门反而不难,所以你能发现,学这个很具有欺骗性,总是会让人自我感觉良好,这行那行的。其实很可能只是个业余水平(甚至都不到)。当然大部分人也就这个水平了。不过如果你能潜心学习这个瓶颈其实能在三四个月内突破。
对于学习嵌入式我的忠告是先从自己的兴趣学起来。例如你觉的软件自己更感兴趣一点就先学习软件部分。对硬件感兴趣就先学硬件。
嵌入式的学习是给很漫长且熬人的过程,没有兴趣的支撑是跑不完全程的,实际上嵌入式的学习是一场无尽的马拉松。
学习嵌入式的第一步准备就是,你需要有一台windows系统的电脑和大量的钱,烧钱何尝不是嵌入式的一个门槛的呢,至少要准备2K。买各种模块,开发板,已经打样的钱都是很贵的,2K可能贪玩一点开发板就用完了。
第二部就是选择自己的起点,我推荐先从编程开始,因为几乎不需要任何的门槛和前置,难度较小。也不必啃那些诘屈聱牙的文字,并且暂时可以不必承受网上到处翻都很难找到资料的痛苦体验。
嵌入式软件涉及到的编程语言分为两种,一种是硬件描述(VHDL),一种就是我们通常使用的通用的编程语言C/C++或者ASM(汇编)。
严格来说VDHL并不能算软件部分,因为他的代码转换成bit文件烧录之后其实算硬件或者固件。
几乎所有的人都是从C语言开始的。当然如果你觉的C语言太难,也可以去使用Python,他更加的现代和易学,但是并非所有的设备都支持Python编程。虽然专业的工程师也会使用Python但是他更像是扳手之类的辅助工具。而且Python很慢。使用Python来编写代码,烧录等等的体验并不好,因为没有官方的支持,环境的搭建出现了问题能搜集到的资料也更少,作为一个什么都不会的新人还是别尝试去标新立异了。除了徒增痛苦和一些专业人士的调侃外几乎什么都得不到。
这种常路之外的小道适合有经验的人去走,这样更容易走的通。
对于学习编程语言我这里略有心得,那就是先学习语言的语法,然后再去搞懂他的内存模型,最后去熟练他的库函数或者熟练的使用编译器。
需要注意的是虽然我的说法是分阶段的,但是实际学习的时候并非如此,中间是有过度带的。并非是你要学完所有的语法内容才能去学习内存模型。
在学完C语言之后,此时应该开始学习如何在嵌入式平台编程。
第二阶段开始选择你的开始,嵌入平台的编程一般分为嵌入式和单片机,其实这个分类只是叫着顺口,用来区分过去老旧的芯片和现在性能强悍的新芯片的,一般说单片机往往指的是过去的8位芯片,嵌入式一般是指的基于ARM内核的32位芯片。其实二者本质并无区别,只是有写代差,本质都是芯片。这样的称呼也导致一个问题,称呼其实非常混乱,许多人混着叫纯看心情。
单片机中比较有代表性的就是基于英特尔8051内核的51系列,例如国产的STC89C52RC,是比较常用的学生学习的8位51单片机。
嵌入式的代表则是意法半导体的STM32F103系列,例如常用的STM32F103C8T6或者STM32F103C6T6。
不过说一千道一万这些都还是MCU的范畴,嵌入式的高集成芯片方案已经是SoC了,MCU其实就技术而言也是很老的东西了。就现实来说,SoC都已经开始老了,新的NoC方案还没开始普及。
当然嵌入式的芯片分类有许多,出了上面提到的还有FPGA/CPLD,MPU,DSP等等有专用用途的芯片。
对于初学者来说我推荐STM32F103C8T6,或者STM32F103资源更多的产品。
对于推荐的原因有二,第一个就是STM32的生态可以说业内领先甚至是说第一没第二的。对初学者和业余爱好者可以说非常友好。具备足够的专业性和低门槛的特点。同时还是32位强悍性能的单片机,内核是基于ARM-CotexM3的较为常见的内核。你玩ESP32或者说Arduino,比人可能觉的你是业余的爱好者,技能水平比较菜。玩STM32至少比人会稍微高看你一眼。至于51已经很难在适应未来的社会需求了,他们自己都在淘汰这款芯片,属于会的觉的不难,不会的看起来很难的东西。再学这个芯片没有比要了,甚至有些浪费时间。
第二就是,STM32的超强扩展性和超强的资源,可以让你省去很多钱。而且芯片价格也便宜不怕你烧。初学者买一个最小系统就够了
拥有了自己的一块开发板之后,那就要开始买下载器或者说调试器了,一般至少要买两个东西,一个是串口调试工具一个是下载调试器,我推荐买一个CH343的串口和一个JLINK下载器,大约一百二十块就能买齐,便宜的时候甚至都不用那么多。
对于外设我认为不需要买那多,一个SPI接口的液晶屏,一个单总线的数字传感器,一个i2c的EEPROM,一个独立按键,再加上一个电机足矣。至于LED灯,一般板子上面都会自带一个。
当然你学会了使用各种外设的编程和调度。那么你现在已经是业余水平了。该来点真正入门的东西了,此时我建议去补补硬件,硬件大部分都是纯理论,实践又非常烧钱。而理论又是实践的基础。理论内容关系错综复杂,内容又非常多,所有学习起来很熬人。
这个时候应该开始学习四大天书了。
先从电路分析基础开始,如果你高中忘记了很多,建议先去补一下高中物理的电磁学部分让再看电路分析基础会简单很多。学习完了这些基础之后,就要开始学习模拟电子技术和数字电子技术了,VHDL语言就是数字电子技术使用的。
数字电子技术比较简单,画画真值表,写写方程,认识一下逻辑门,触发器到到寄存器和一些常见的数字芯片就完事了。
模拟电子技术则是许多人的恶梦,当然如果你电路基础学的很好,那么模拟电子技术其实就是加了点半导体物理,把一些器件抽象成受控源分析就很简单了。但是器件的很多特性和计算公式需要记忆内容细节非常多,数学基础要求也相对较高。模拟电子技术重要的是一定要学会基本的二极管和三极管特性,进阶一点MOSFET,然后了解一下运放和震荡电路就行了,开始不要太难。至于为啥不深入大部分人其实不学学那么多,不仅仅是因为根本学不会,同时也是因为大概率接触不到这种东西,除非你以后专门做模拟信号,模拟传感器等等。再模拟电子技术的基础之上还有一本更进阶的课程,射频微电子。这个反倒常见,学会了可以自己做一些无线电之类的东西,当然难度嘛。
你以为到这里就结束了?不不不,四大天书还有一本信号与系统。当然有兴趣还可以补一本自动控制原理,这个也相当重要。
以上不过是要学习的纯理论。距离真正的应用还早了十万八千里。
此外你还要学习相关的仿真软件,和PCB设计软件,PCB设计又涉及到电磁兼容工程等等一堆繁琐且细碎的内容。
不过我说着很难,其实大部分人只要能画出来PCB跑通,会粘贴复制设计,能够分析基本的电路故障(例如电源短路)和焊接就已经算半只脚入门了。而实操部分涉及到大量的仪器设备,最基本的万用表,拆焊台、示波器,函数发生器,DC稳压直流电源等等。如果自己出钱学的话每有万八千置办不齐。如果这些玩意都不会用,又显得相当业余(使用这些仪器可以说是必备技能了)。
当你整完上面的一堆你距离入门还差一部就是解决问题的能力,这个其实才是核心,如何去提取信息,如何检索信息,如何整理信息,如何处理信息,最终通过获知的信息解决当前的问题,实际上以上的东西都可以不会,但是你没能学会这个可谓竹篮打水一场空。嵌入式的范围很广,我们无法保障我们的知识随时都是够用的。临时学东西的情况可以说是家常便饭,特别是打比赛的。经常性的临时学东西,因为赛时紧张为了完赛,通常都要短时间内攻克大量的问题,学会很多东西。工作也是一样的,顺利还好,不顺利的时候才是展现自己水平的时候。实力不会骗人。水平高和解决问题的能力是对等的。实力越强能解决的问题越多,也就越能化险为夷。
下面来说说真正的入门之法,学会处理问题:
首先我们在遇到问题的时候一定要注意观察,描述正确问题或者说正确的认识问题才是解决问题的关键所在。
例如我们在写程序的时候IDE可能会出各种问题,例如链接错误,编译错误,缺文件,下载失败等等问题。如果你遇到这种情况先去问别人是不正确的做法,实际上,我们在电脑内的大部分问题,都是由明显特征的。要注意观察弹出的提示,如果是英文就去找工具翻译,人类和红毛猩猩的区别就是人会制造和使用工具,别傻不拉几的问东问西。
理解完提示之后,如果不能解决问题,不妨提取一下提示的内容,例如有无错误码,例如Lxxxx,Exxxx的错误码,直接去浏览器里进行搜搜,往往都能迅速的解决问题。或者嫌麻烦直接将错误提示复制到浏览器搜索。着一招就能解决90%以上的问题。
对于搜搜引擎,不要使用国内的任何引擎,微软自带的edge浏览使用的bing引擎就非常棒,Edge浏览器还有许多人性化的功能例如插件,和翻译。甚至支持PDF文件查看和翻译。
在遇到问题的初期我们要做的就是尽可能的获取相关的信息,有时候一个问题的现象很小,可描述的词汇不多,但是往往都是通过对现有内容的提取精炼通过搜索引擎来获知更多信息从而解决问题的,搜索获得的信息也是信息这一点一定要注意,对于一些不常见问题,这种做法很有用,通过检索获得的弱关联信息中整理出对自己有帮助的信息从而解决问题,是非常有用的,什么是弱关联呢?就是和自己搜所的内容的预期目标重合度不高,但是内容中有一些现象和原理有关的就是弱关联。可以简单的理解为有点关系但不多的内容。当你在搜索引擎上搜无可搜的时候,再去选择问别人,往往可以更精准的获知问题的解决方法,提高解决速度。
当然你也可以选择使用AI工具来解决,当然大部分时候并不怎么好用,对于嵌入式领域来说,但是软件部分用一用和了解一些基础概念还是很好使的。
当然如果你会识读和寻找芯片手册会对你有很大帮助,通过手册往往可以解决大部分的问题。很多时候这也是区分业余和专业之间的一个标志。因为手册大部分时候都是英文的,且需要一些知识基础才能看明白。特别是电气特性部分几乎是天书对于非专业的人来说(其实这个玩意更吃经验和理论了解一点就知道图标含义了)。
最后请记住,当你遇到问题的时候不知所措,可以尝试先描述一下问题,其中必然包括问题的现象,发生的背景,已经产生的可能有价值的信息。
尝试精确的描述之后打开搜搜引擎,把描述填上去搜索,如果结果不尽人意,可以尝试换一种描述方式,多试几次尽量提取关键词。大部分情况下你得问题可以在过程中得到解决。
请教别人不是坏习惯,但是请教之前自己探索一番更有帮助。
- 下载图片
- 复制图片
2024-09-18
浏览974
🎙虚字浅心
登录后评论
31
8
22