网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

“为用而专”---嵌入式系统 下

时间:2023-04-13 15:36

人气:

作者:admin

标签: ios  PC  计算机硬 

导读:通常,我们提到计算机硬件,脑海里立马浮现的就是一台PC主机,当然这个时候你要特别小心,因为这个时候你举出的例子很可能是暴露年龄或者逼格的。比如,用台式机举例还是用笔记...

当被人问起“什么是嵌入式系统”时,无需看过我的文章,有一种狡猾的说法肯定是挑不出任何错误的——套用知乎上一类著名的问答体,“如何快速的假装/成为某个领域的专家”——你可以故作认真的说:

嵌入式系统首先是一个计算机系统”,然后大谈你对软件和硬件的看法……

为了在几乎没有逼格的行业中让大家能够有机会装逼,下面我就教大家一种关于嵌入式系统软件和硬件的特别观点,绝对可以让所有的小师妹小师弟甚至是同龄人偷来“刮目相看”的眼光。当然首先你要真的理解这种说法。

为了引起更多人的注意,同时让话题更有冲击性,你应该非常肯定、神秘、恨铁不成钢而又愤慨的宣布一个观点:

“你知道么?嵌入式系统中几乎所有人关于软件和硬件的看法都是错误的……我们被教科书给坑了!”

1、传统计算机系统中的“软件/硬件”观

通常,我们提到计算机硬件,脑海里立马浮现的就是一台PC主机,当然这个时候你要特别小心,因为这个时候你举出的例子很可能是暴露年龄或者逼格的。比如,用台式机举例还是用笔记本举例显然暴露年龄,用Windows笔记本举例还是Mac举例将暴露逼格。当我们提到软件,脑海里浮现的差不多就是Windows上跑着的各类软件,当然,如果你能用APP,特别是iOS的APP来举例,显然就是很有面子的。

是的,细心的你注意到了,传统的软硬件观念直接来源于通用计算机。在后面的讨论中我们会发现,这种由通用计算机带来的思维定势是非常可怕的。

2、嵌入式系统中的“软/硬件”观

嵌入式系统中的软件和硬件并不是你想象的那么简单。这其实很好理解,你可以在大学校园里随便拦下几个学生,让我们来做一个采访,问问他们什么是软件什么是硬件:

屌丝A(计算机学院):你丫有病么?硬件就是你的电脑主机咯,主板、CPU、内存硬盘、显卡什么的;软件就是Windows程序咯

屌丝B(信息学院):硬件就是单片机啊,51、AVR、STM32之类的,对了,还有开发板也算吧?软件嘛,就是Firmware咯(固件),过去用汇编开发,现在都是用C了

屌丝C(信息学院):毛线!我还可以用VHDL和Verlog写一个内核呢,你说说VHDL和Verilog写出来的是不是软件?FPGA是不是硬件?

屌丝B:呃……那咋办?

屌丝D(计算机学院):你们别忘了,开发板上跑的虚拟机也是硬件哦,虚拟机上用Java写的程序也是软件。

大家可能注意到了,在嵌入式系统中,软件和硬件是一个不那么靠谱的定义方式——当人们用普通话发相同的声音说同一个词语的时候,描述的可能根本不是同一个东西。那么,嵌入式系统中,软件和硬件应该如何理解呢?

方案一 . 要么,你可以假装从来没有看过这篇文章,只跟你用相同系统的人讨论问题,或者“自己根据语境”自动切换软件和硬件的意思。

方案二 . 要么,我们重新定义一下软件和硬件的概念,只要这个概念兼容原有的理解方式就可以了。

真有一种兼容老概念的新定义么?答案是肯定的。让我们来首先找一找在不同层面上软件的共同点:大家都是用一种语言(Java、C、VHDL、甚至是原理图)来描述自己大脑中的逻辑(思维)。让我们来体会一下这个特点,是不是这么个特点?因此,我们重新郑重的定义一下软件:

软件:人们借助某种语言,“尝试”固化下来的,自己的思维

与之相对,硬件的概念可以修改为:

硬件:业已固化下来的逻辑,可以稳定的提供确定的服务和功能

可见, 软件的本质是思维,是设计人员的思维 ,因而程序设计人员最重要的是自己 根据任务的需求想通所有的逻辑,并借助一定的语言作为工具,把自己的思维"固化"下来 。这个思维的过程叫做"设计(Design)"、这个固化的过程叫做"编码(Coding)"。简单的说,写代码只是一个思维翻译的过程,更重要的是首先写程序的人要想清楚,拥有清晰的思维,然后借助准确无误的语言表达能力(很遗憾,很多人语言表达能力非常有限——就是用C语言写不出自己想要实现的功能)才能写出正确的代码。

思维的设计有很多辅助工具,如大家熟知的流程图(Flow Chart)、UML图、还有大家不太用的数据流图(Data Flow Diagram)等等。然而,具体代码往往并不是一个好的辅助工具。进行思维设计的开发人员,叫做Programmer。

将Programmer的设计文档(各类图表)翻译成具体程序代码的人叫做Coder。

说残酷一点:Programmer设计,负责思考;Coder翻译,负责干苦力。如果你不服,我也没办法,哈哈哈哈……

**硬件,本质上一个固化下来的逻辑。**这个逻辑的前身当然是思维,只不过它被固化下来了,而且可以"稳定"可靠的提供"确定"的功能和服务。比如,FIFO是队列,在某些软件系统中把这种逻辑确定的模块叫做"构件"(Component),一种中性化的描述,并不强调它是软件还是硬件。因为构件的本质是一个模块,是一个可以提供"确定"的,大家都知道的功能的模块。它可以是硬件的,也可以是软件的。Who care?有的系统还会提供硬件抽象层,进一步模糊这类模块的软硬属性——反正你知道它是做什么的就行了,反正它很可靠,而且可以重复利用,所以你用就好了,是软的还是硬的,无所谓,反正都是同一个API

当我们想凸显一个模块的逻辑、确定性和稳定性,而又不能或者不需要或者不关心它的软硬属性的时候,我们就干脆叫他构件(Component)。

重新定义软件和硬件的概念,不是一个文字游戏,而是一个行业内在心底里约定俗成已经默默在做的事情,只是,今天被明确的点破了而已。虽然你觉得被刷了三观(也许你没有),但仔细想想,其实的确和过去的认识没有本质上的区别?

不是么?其实你早就懂对么?哈哈哈哈——我没有重新发明软件或者硬件,我只是诚实的搬运工。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信