当前位置:网站首页>固件工程师到底是干什么?
固件工程师到底是干什么?
2022-08-03 08:58:00 【嵌入式Linux,】
大家好,我是写代码的篮球球痴
可能大家还不知道,我是一个写固件的工程师,今天和一个微信朋友聊天,他问我工作几年了,我说我工作10年了,而且这10年我都一直在从事嵌入式固件相关的工作。
他猛的觉得很不可思议,因为他想不到工作10年的工程师为什么还需要写代码,为什么还干不上管理的工作,要知道,他的一些同学刚毕业没几年已经年薪百万了。
(⊙o⊙)… 对的,我是一个写固件的嵌入式软件开发。
工作这么多年,我并没有懊恼自己没有当上主管如何如何,而懊恼的事情是,我还是没有自己一个做开发的小工作台,如果回家能有自己一个开发的小地方,那是很惬意的事情的。
好了,下面的文章大家看看,看看一个固件工程师都是在干什么的。
硬件工程师:我们下周硬件回来,准备加班点屏,固件的来个兄弟一起搞下。
应用软件工程师师:我的应用在其他系统上没有问题,这个问题让固件的分析下。
硬件工程师:我今天不在公司,找个固件的兄弟去帮忙抬下东西,顺便把板子的电源焊接了。
测试工程师:这个问题是系统问题,固件的先分析下。
结构工程师:派个固件工程师配合我分析下这个结构问题啊。
项目经理:固件的兄弟们挺辛苦的,年会的时候给他们安排个节目,给他们发个什么奖。
财务总监:我们公司怎么有一些兄弟又搞硬件又搞软件,工资也不是很高,这些岗位可以多招。
CEO:产线的问题不要总是让硬件去跟啊,固件派个跟进量产、试产。
老板:写固件那几个喝酒行不行啊?上次就那个硬件的还能喝点。
=====
现如今,软件和硬件之间的界限已经越来越模糊了,那么处于这个灰色地带的,就是固件。于是,这就分成了三类工作者:
一是,软件工程师一般指做图形界面的程序员,工作内容就是写C++、JAVA、Web等。
二是,硬件工程师当然是指玩电路板的,工作内容就是画原理图、PCB等。
三是,固件工程师也叫单片机工程师,既写代码(主要是C语言、汇编)又要画电路图。
玩单片机的人,可能会有个疑问,为什么我写的C语言能操作到底层的硬件?其实在《计算机组成原理》已经有很详细的介绍了。
我这里粗略地介绍一下,这个原理。
首先,你可以搜索一下“从零开始造电脑”,这位叫Steve的大神,就告诉你,用晶体管可以做出CPU(单片机也是CPU)。
当然,我们现在可不会落后到需要到晶体管来制造电脑。
接下来,你可以看一部叫《乔布斯》的电影,剧中就给你展示苹果公司的第一台计算机。
嘿嘿,看到那些黑色的芯片没有?还有两个大大的变压器。这说明了在大学玩单片机的时代,就相当于回到苹果公司的初始时期!是不是很激动人心?
其实你可以用74系列的逻辑IC、单片机等,来搭建一个属于自己的计算机。这就是说人们把若干个晶体管集成为一块74系列的IC,如果集成度更高呢?那就是手机或者台式机用的多核CPU了。
好,介绍了这些古董之后,就让你有个认识,计算机本质上是N个晶体管的组合,也是数字逻辑芯片的组合,更高级的,就是一块数模混合的芯片,具体形式是由你的工艺决定的。现在回到正题,介绍一下数电的基础知识。
因为CPU主要功能是计算,也就是可以直接运用数学知识来解决问题,这里就举个例子介绍一下,CPU如何计算加法,也就是用数电里的门电路搭一个加法器。
怎样用晶体管搭这些与、或、非门就不说了,不懂的,可以翻书。上图就告诉你,可以用这些门电路搭一个加法器。
怎样输入Ai=0,Bi=1,Ci=0?用74系列的IC的话,可以直接把Ai,Ci接GND,Bi接VCC,就实现加法了。而在CPU内部也是一样可以这样做的,但是CPU可没那么死板,只算常数的加法。
上图中,蓝色箭头指向的1,就是接VCC的,而红色箭头,就是接GND。
在CPU内部,还有ROM,它可以把你要计算的加数和被加数存进去(ROM输出的高低电平,跟你接GND和VCC是一样的效果),而结果则存在寄存器(先暂存,以备后面使用)。
现在有个问题,如果加完之后还要计算乘法(在信号处理领域的卷积运算的核心单元就是乘加器),怎么办?谁来自动完成这个动作?幸好,CPU里面有个叫ALU(算术逻辑单元)来处理这件事情。
这里的控制单元,就把ROM里面的数据取出来,再用选择器,来调用加法器和乘法器,最终把结果存到寄存器中。
如果ROM里面只存数据,那是无法让控制单元知道,你要执行加法还是乘法,要解决这个问题,就需要在ROM里面再划分一个区域,存放指令码。
这个指令码,跟数据是一样,都是0、1的二进制数,只是用途不同,所以起了不同的名字。
其实这个指令码,对应在单片机里面的汇编语言,就是操作码(如:MOV);而操作数就是数据(如:01H)。具体的,可以看看单片机的教材。
根据指令码的设计方法来分,有四种,分别是CISC、RISC、VLIW、TTA,具体区别可以看计算机组成原理。
而PC(程序计数器)就是控制ROM的地址,现在你要知道PC是不能出错的,一旦出错,就意味着单片机不按照你的代码来工作。
现在,我在8位的CPU的ROM里面,第一个地址存了0x03这个指令码来代表加法,而在第二、三个地址存了加数和被加数,然后在第四个地址存了0x05代表乘法,在第五、六个地址存了乘数和被乘数。
那么,按照一定的规则来设计控制单元(这个规则可以自己定义的),它就知道0x03是要执行加法。
那么这个规则如何设计?最简单的,就是用与门了,然后输出一个使能信号,让加法器工作,就跟上面的74LS160差不多。
但是CPU可没那么简陋,它可以使用状态机、流水线等,来控制这些基本单元(如:加法器、乘法器),如下图所示:
说到这里,你至少应该知道,我们只要改变ROM的内容,就可以操作CPU内部的ALU,从而操作CPU的各个硬件单元了。
下面给出相对完整一点的ALU内部结构图:
ROM的内容本质上是一些电荷量(电容上有、无电荷,代表二进制的1和0),也就是固件、软件工程师写的代码。而硬件,就是由晶体管搭建的数字、模拟电路(如:单片机内部的比较器、ADC等)。
所以硬件是物理器件,不容易更改;而ROM的内容完全可以用烧录器就轻松改变它,修改成本非常低,而且很灵活。
在这里,你很难表述,这些电荷量是软件还是硬件,但是CPU的这种结构,导致了两种不同类型的工作者,我们称他们为软件工程师和硬件工程师。而单片机程序员写的代码,跟硬件密切相关,而且一旦完成之后,很少需要修改的(不像软件工程师修改的那么频繁),我们称之为固件。
来源:网络
版权归原作者所有,如有侵权,请联系删除。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
边栏推荐
猜你喜欢
STP生成树选举结果查看及验证
WPF 学习笔记《WPF样式基础》
Industry SaaS Microservice Stability Guarantee Actual Combat
【LeetCode】226. Flip the binary tree
【LeetCode】112. Path sum
Eject stubborn hard drives with diskpart's offline command
Redis cluster concept and construction
PostgreSQL的架构
Exception: Dataset not found.解决办法
BOM系列之localStorage
随机推荐
AD环境搭建
Using pipreqs export requirements needed for the project. TXT (rather than the whole environment)
行业 SaaS 微服务稳定性保障实战
【TPC-DS】DF的SQL(Data Maintenance部分)
STP生成树选举结果查看及验证
LINGO 18.0 software installation package download and installation tutorial
Mysql的in和exists用法区别
uniapp swiper 卡片轮播 修改指示点样式效果demo(整理)
dflow入门2——Slices
分析型数据库性能测试总结
【LeetCode】226.翻转二叉树
Eject stubborn hard drives with diskpart's offline command
MySQL-存储过程-函数-
热部署系统实现
110道 MySQL面试题及答案 (持续更新)
dflow入门5——Big step & Big parameter
Guava-字符串工具
【LeetCode】112. Path sum
并发之固定运行和交替运行方案
MySQL1