从学生到社会人_EmbeddedLove

大约从几年前起,我就想写一篇关于嵌入式(Embedded)的相关总结,它可以是叙述性的解释和聊天,也可以是技术性的报告或者是探讨。估计这个过程会在开始的时候非常有趣,至于之后,谁又能想到呢,但是既然和很多人一样选择了这个行当,分享自己的认识,分享自己的所闻所见和技术积累,那就是一件义不容辞的事情了,opensource也包括了想法的开源。

我的朋友应该都知道,我在本科时候学的是信息系统,那是一个偏向互联网行业的技术,其实非常有趣的事情是,在我接触嵌入式这个专业之前及之后,我对“软件”和“硬件”的认知过程其实是非常有趣的,我觉得有必要和大家分享一下,相信会有些共鸣。

此外!!此外!!!我想声明,这篇文章的内容会偏向介绍给小白,可能是技术小白,也可能是行业外从事别的工作的同事,也或许是对物联网,互联网有些了解但是不深入的朋友,甚至可以是公务员,银行上班族等等,我会讲的比较深入简出,给大家一个方便理解的感受,帮助你们平日里吹牛逼哈哈哈哈(重点是学习)。
还有一个此外!那啥这个文内我主要以自己的阅历和理解给介绍一下,严谨的东西我尽量努力,但也不保证会有人以不同的理解表达不同的想法和见解,站的位置和领域不同产生的见解是有显著差异性的,欢迎大家和我讨论。

其实吧,我第一次接触这个嵌入式,还是在课程名中见到的,当时叫embedded wireless system(嵌入式无线系统)专业名,隶属我当时的学院,电子电气工程学院。大家知道,我是本科学的前端后端这一方向的,跟这个完全是两个天地,当时看到这个名字的时候,第一反应自然是语文上的理解,嵌入式,嵌哪儿?说真的,我当时就都没想的很多,简单的以为是设备与设备之间的嵌合,当然这是其中的一部分但是甚微。具体的嵌入式我想后面再细说它。总之现在回头想,回头看会觉得自己好幼稚,观众姥爷别笑,这种感觉我相信每一个,记住是每一个开发者都会有过的,开发某一个产品之前觉得它难于上青天,登完了以后感觉这就是个弟弟,登这个弟弟还费了我这么久时间,我也简直就是个凑弟弟了。

Alt

为了更好的理解嵌入式,我觉得有必要从头将它掰扯掰扯才能更好被理解

我记忆中最早的嵌入式设备

在这里插入图片描述
我记忆里第一次接触到的设备应该是我爷爷当年做的一个家用挂历了,有点类似图片中的这个,但是没有这么精细,那会儿还都是木质外观,但是异常精准,小时候就记忆里有爷爷拿着电烙铁在家,用放大镜焊接的场景,历历在目。
有点offtopic了,不过我想说的是,嵌入式这个行当的历史应该是非常非常久了,或者说它就是现代计算机的另一个分支。
我们总说嵌入式,嵌入式,其实有一个名词我一直没提,就是单片机,或者说单片机更贴近大部分人的生活一点,尤其是学生。
说道单片机,那必然要和开发板一块扯扯淡,其实是一类东西,单片机也能敲代码,也能烧程序(下载程序),但是开发板能做更多事情,理解起来就像是,我能用诺基亚发短信,打电话,玩游戏,但是我的华为还能用语音发短信,用文字转语音打电话,用手机背板玩游戏,更强大的功能,导致了更多的场景可以被应用。

嵌入式是个啥

我记得在我读书的时候,最常遇到的场景:
同学:同学,你是学什么的呀
我: 嵌入式的,不知道你有没有听过
同学:没有,那是个啥
我:编程的一种
同学:噢噢噢,IT程序员
我:其实不是的,你知道单片机吗
同学:不知道
我:那集成电路呢
同学:不知道
我:KEIL,IAR?(这个我通常问一些有些了解的人)
同学:没听说过
我:…
备注(我之所以不愿意承认程序员这个问题,是因为很多人,或许说98%的人理解的程序员是我们互联网的开发者,也就是一台电脑,一杯咖啡,敲一天代码的那种,我本科学的那个,所以我理解的会比较深刻,但是嵌入式软件工程师的生活可不是这样的)

大概经过了几十次类似的问话以后吧,我也学会了“见人说人话,见鬼说鬼话”的打工人必备技能!
没办法,真的很难和领域外的人解释,但是嵌入式又不是那么难那么复杂的东西,只是大部分人不想理解。那么我就在这里解释一下嵌入式究竟在实际开发中担任了什么样的角色。

在这里插入图片描述
相信许多电影里场景,一谈到高科技就整点这样的图片出来,给人一种高端大气上档次的感觉,哈哈哈哈是的,我第一次看到的时候内心也是“真他娘的帅”,这些秘密麻麻的纹路其实就是我们集成电路的走线了。每一个设备打开以后基本也都是这个样子,只是这个看上去比较抽象罢了,一块看上去完整的板子里面有许许多多的元器件,电阻,电容,两极管,光耦等等:
1.有的是用来提供降压的(这个不难理解,我们给一个设备通电的时候不是一般都只有一个电源的嘛,那不同的元器件它需要的电压是不同的,所以有些电阻需要用来降压)。
2.有的比如电容它还除了能用来提供电压,还可以用来给我们做测试debug用。许多硬件工程师在设计PCB的时候会在某些电源检测的地方分一个电容,这样我们在开发的时候就可以直接量这个电容两端的电压,来校对程序运行过程中的电压检测是不是准确,这是极大地帮助了软件工程师的元件设计(respect HW Engineer)。
3.光耦,也是比较常见的一种元器件,通常用来做隔离和导通,工作的逻辑和继电器是一样的,单路导通引发工作路导通,很香,很实用。

也就是说有各种各样的元器件需要相互连接和协作,那么就出现了各种各样的线路,此外,这个PCB解释起来很容易,但是真正要学会它,没有若干年的功夫是不可能的,PCB也是我认为最深奥的一门学科了,真的相当深奥,那可是所有设备的底啊,PCB画不好,什么设备都跑不动,电脑都起不来,也就别谈什么别的东西了,重要的是,它不像我们写代码,还有个编译器给你debug一下,告诉你哪哪行代码错了,有啥毛病要去修改,人家可是元器件,直愣愣的就是冰冷的材料,它可不会说话,一旦遇到问题,没有能力可咬不动这块骨头。哎,顺带吐槽一下资本市场,我就奇了怪,为什么PCB这么难的东西,招聘的时候待遇却这么一般,难道大家都不打算设计自己的板子,或者是不打算开拓吗,资本控制知识太可怕了(可怕)。

在这里插入图片描述
换一个比较契合现实的集成电路给大家看一下,这就是我们一般生活中应用比较的电路板的模样了,通常有cpu(Central Processing Unit),用来组成全部代码逻辑,有的还有双CPU,一个主(Master)一个从(Slave),这个完全看设计需要了,其他的元器件就是电阻那些东西, 当然也有别的芯片,一般这些芯片我们并不直接往里面烧代码,但是会通过拉低拉高它的管脚(PIN)来达到我们想要的功能,但是这一类芯片也是问题比较多的,主要体现在它的性能上,我们常说国产化的东西不太行,国产芯片怎么怎么如何如何,很大的根源就在这里,这个问题我会在后面聊一下。

好了,大部分的嵌入式工作都是基于这个展开的,那么问题来了,我相信有很多不太了解我们的人会想知道,一个产品它的根源在这里,那么是如何运行起来的呢,我想在后一节,以一个例子来解释,从一个用户的行为,一直到芯片命令底层元器件的工作,最终给用户一个反馈,这样一个流程会涉及到信号学,通信协议等等,这些如果讲起来估计没个几天几夜我讲不清楚,还是给我自己留个肝过过小日子吧,毕竟打工人,不是人上人哈哈哈。

从用户到底层,从底层到用户

场景:用户手持一个测量环境参数(湿度传感器)设备,数据在设备屏幕上显示。

对象 动作
点击按钮开始
CPU 收到命令,发布命令
传感器 采样,返回数据

整个流程不算复杂,我用比较容易理解的方式将它分层说明:

1.用户按下设备按钮的时候,设备的按钮本身就是一个元器件,他会产生一个电流信号,根据之前我解释的那个走线,按钮也是和我们的CPU,通过某些元器件的连接,或许把信号隔离或者不隔离/1/,然后传到主CPU。

2.当CPU收到这个信号后,他会根据自己的代码逻辑,在预先写好的管脚内发送特定的信号/2/,或者干脆拉低某个管脚,总之这些行为都是根据你要命令的传感器/3/来预先编程的。

3.当传感器收到信号后,他会开始采样,把环境温度湿度等等他能获得的数据以信号,以特定的通信方式告知CPU,CPU就可以分析/4/出来是什么样的东西,然后反馈给我们的用户,反馈方式也很多,有的直接在本设备的LED上显示,也可以无线传输出去(那么就要额外配置一些元器件或无线模块了)。

流程很简单易懂,里面的注释内容才是我想拓展和交流给大家的。
/1/信号为什么要隔离?
其实原理也很容易,初中物理的电生磁,这么一说大家就懂了,都是在线路里,不管多小的电流都会产生磁场的,所以我们一般要做隔离,毕竟那么小的一块板子嘛。

/2/特定的信号指的是什么?
总体上来讲,信号,有很多种,PWM(pulse)脉冲信号,AD信号和DA信号(数模,模数),太多了,讲不完的。
我有自己的一套最直观的理解,所谓的信号不过是电流,不过你是脉冲的(其实就是信号随时间的走向是一个正弦波),或者是AD(analog to digital)模拟转数字信号,或者DA,其实已经是表象上的东西了,就像是刺绣,有的人手巧一点可以秀一对儿鸳鸯,很鲜活很好看,那有的人脑子不太行,想秀鸳鸯结果修成了蛤蟆,可是说到底,他们都是用的同一个线在画布上秀来秀去的,同样的,我们的电流本质是一样,只是他们波动的形状不太一样,当我们把波动的电流随着时间轴的拉长或压缩,那就会有不同的形状了。
在这里插入图片描述
网上找来一张图,大家只看上面的地方就可以了。
这是一种Digital,数字信号。
我简单解释一下数字信号和模拟信号,也就是AD和DA,有的地方是ADC,C是转换convert。
所谓数字型号简单的说就是它只产生高电平或者低电平,也就是如图里面的,模拟信号呢会有一个顺滑的曲线,比如我们的正弦波就很丝滑。
换一个方式说,我们的温度从0慢慢升高的时候,我们需要的是模拟信号吧,让他从0, 1 ,2, 3这样一点一点的,有过程的升高比较符合我们现实生活;如果这时候我们强行给他来数字信号呢,那我们就只能得到0摄氏度,100摄氏度这样的两个值,这显然不太靠谱。
但是我们撕开它以后其实还是能得到我们想要的丝绸,也就是说,总归来说还是电流,没有什么特别的。

/3/什么是传感器
其实传感器和元器件的有点类似,或者说就是一类东西。元器件呢,电阻电容,感觉比较low,传感器呢,其实给他扒开衣服也是这点东西,只是已经被厂家给修正了,会根据不同的场景产生不同信号。
打个比方,我们有运动传感器motion sensor,他里面的组成部分有一个扩增,用来放大光信号,然后就是接受光信号的元器件,当外部信号变化(人走来走去会有阴影的嘛),特殊的元器件会产生电流的变化(光敏电阻建议大家去看一下工作原理,另外感慨一下,材料学才是万物之源),根据这些变化我们就能知道环境有了什么变化。
/4/分析啥,怎么分析
前面我们说到,传感器或元器件返回来的都是根据温度环境产生变化而变化的电流参数,也就是说,我环境温度35度,其实我采集到的信号可能是一堆二进制模样的电流,CPU这里看到的也是一堆数字(如果我预先配置的是AD哈),其实是不能被直接使用和理解的,这时候我们需要一些简单的算法,这些算法通常都在传感器产品的说明书里会写。
extra:阅读文献和文档也是嵌入式的必备技能,基本是全英文的。
有了算法我们就能将这些看不懂的数字对应到合理的温度表达了,基本任务也就完成了。

嵌入式还要干些啥

太多了,由于嵌入式是属于偏向底层的编程开发,那么很自然的你需要阅读硬件原理图(别指望你的硬件工程师啥都要告诉你,人家也是人上人),还有全英文的技术文档和手册,里面涵盖了芯片概要设计,寄存器手册等等。

要写的东西太多了,今天先这样吧。
算是给我自己转正前的想法做一个汇总,有些东西过了这个时间就容易被遗忘,好记性不如烂笔头。

猜你喜欢

转载自blog.csdn.net/nickyEC/article/details/109400834