当前课程知识点:智能车制作:嵌入式系统 >  第二章 绪论 >  2.1 计算机的基本概念、发展历史 >  Video

返回《智能车制作:嵌入式系统》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《智能车制作:嵌入式系统》慕课在线视频列表

Video课程教案、知识点、字幕

各位同学大家好

欢迎大家回到

ARM微控制器与嵌入式系统的慕课课堂

我是清华大学工程物理系的曾鸣老师

我们来继续我们的嵌入式系统之旅

那么在上一章的第一章

关于概览里头呢

我们了解了嵌入式系统是什么

我们为什么要学它

以及它有什么用

最重要的是我们探讨了一下

怎样才能学好嵌入式系统

比一般的课程呢

可能多用了一个小节的时间

但是我想最重要的一点

就是我们说要想学好嵌入式系统

或者要学好任何一个工科的知识

最重要的一点就是动起手来

而且玩起来真的觉得他很好玩

所以呢我们现在开始进入

真正的我们的嵌入式系统之旅

一点一点的把这样一个知识掌握

把这样一些东西具备自己玩起来的能力

那么今天进入简介(Introduction)这么一个章节

在这个章节里呢

我们基于大家前修课要求的C语言基础

试着从我们这门课的视角

来顺一顺计算机的基本概念发展历史

从我们的视角为后面的进一步的

深入的学习奠定一些基础

那么我们在讲一门计算机课的时候

往往会回顾一下人类计算的历史

我不是特别想从咱们中国的

算盘这个时代开始回顾

那么我给大家会推荐一篇

我自己觉得写得很好的文章

这不是我写的

是叫做改变世界机械之美

讲的是机械时代的计算设备

为什么计算设备呢更多是计算器

这个文章的网址呢在这儿

是一个叫做简书的网站上

有很多爱好者写很短小的文章

那么我们会发现这个文章里头

比如说从开普勒同时代的人

一直到菲尔特这样

十八十九二十世纪的人

我们人类的计算设备在不断的进步

比如最早的人类已知的计算器

就是开普勒的好友

为他设计的这样一个木结构

里头有传动齿轮

来帮助他进行天体的计算

然后还有一些我们耳熟能详的大拿

在十六世纪十五世纪的阶段

有很多百科全书式的学者

比如著名的微积分里遇到的莱布尼兹

他的名字很多时候跟牛顿放在一起

这就是由他设计的机械计算器

里头巧妙地设计了一个

带有连杆传动的机械计算设备

到了十九二十世纪交界的时候

开始出现了按键式的机械计算器

巧妙地使用按键键程的差异

通过精密的轴承的转角

来传动获得等比例的运算

那么它的发明人呢是菲尔特

这样一种机械按键式的计算器

一直用到了二十世纪的中叶

他处在一个跟电子计算机交替的时代里头

比如说左边这张图

是我从德国慕尼黑的

德意志博物馆里拍摄到的

一系列的德国历史上的

精密计算设备当中的照片

手摇式的按键计算器

而右边这张图呢

是我在咱们中国的一个博物馆里拍到的

我们国家的科学家

进行两弹一星的研制在五十年代

巨量的运算所使用的手摇计算器

你会发现它后面有一个

打着很多孔的纸带

来记录计算的数据乃至程序

那么计算器发展到二十世纪的中叶

我们说它跟电子计算机

出现了一个时间上的交叉

正在一个过渡的时期

那么开启这个时代前页的人是谁呢

我们一般来讲要缅怀或者致敬一位前辈

就是这个照片里的人

我会问很多同学这个人是谁

有很多同学因为看了很多爱好的书

我们喜欢嵌入式系统

会一口答上来说这个人是阿兰图灵

对这个人就是图灵

也是我们计算机领域最高奖

就是用他的名字命名的图灵奖

那么阿兰图灵一生最大的成就

或者现在人类

最耳熟能详的事情是两件事儿

当然那二战军方破译密码的事情

不算的话两件事

一个是图灵机的概念

一个是关于人工智能的图灵测试的概念

那么在计算机的历史发展到了1930年代

这个时间点的时候

阿兰图灵做一个非常开创时代卓越的贡献

就是他在1936年发表了一篇论文

这篇论文的名字叫做可计算数字

机器在判断性问题当中的应用

那么原文当然是用英文写作的

那么这样一篇论文

当中提出了图灵机的概念

可计算性的概念等等这样一系列的问题

我们一般在计算机历史上

都会觉得天才人物

都是在划时代的时候脑袋一拍

提出了一个概念

影响了后面100年

但是我们说在科学研究的领域

很多时候不是这样的

包括爱因斯坦的相对论

也不是凭空产生的

图灵也不是

这一系列问题引起人类的关注

是因为数学科学发展到了这一步

以螺丝为代表的数理哲学数理逻辑

发展到了一个非常高的水平

在这里人类开始关注关于数学是否完备

数学是否自洽等这样一系列

带有哲学意义的根本性问题

而这些问题被提出

乃至被探讨都是在前几个世纪的积累上

人类无法想象的

那么这样一个可计算问题

图灵为了定义它解决它

最终解决数学是否完备

这样一些基础性的问题

开创性的首先做了计算性的声明

想象出了图灵机这样一个构想

那么这个构想是什么呢

就是认为一个能够用有限步骤

加以计算解决的问题

都称为可计算问题

或者叫可计算性

那么图灵用悖论的方法

也是我们有时候说的反证法

证明了

他构想了一个图灵机

所有的可计算问题

都能用一个图灵机加以描述

而无法用图灵机加以实现和描述的问题

都不是可计算性问题

那么发展到今天我们会发现

可计算问题已经是一个非常普适的(common)定义

我们一般认为可算不合算的事情

很多时候图灵的定义

会告诉我们更多的结果

比如说我们的文字识别语音识别

在一般的概念都认为

这不是一个计算问题

但是如果你理解图灵的定义

你会发现它总能拆分为

有步骤的图灵机算

最后得到的是一个可计算问题

转化为数字问题已解决

那么图灵究竟构想了一个什么样的东西

来通过这样的一种可计算性的定义

和图灵机的定义

乃至用悖论找到了停机问题

最后巧妙地证明了数学的完备性

这样一个基础数理逻辑问题呢

那就是非常著名的概念图灵机(Turing machine)

那么这个构想非常的简单

有很多时候简单的才是巧妙的

图灵机想象我们有一个无限长的纸袋子

这个纸袋子上被分成了很多的格子

每个格子里头可以保留一个信息

我们今天经常会说它是0或者1

实际上在图灵的论文里

它是任意多种的比特信息

比如我们假想它最简单就是0或者1

甚至再加上一个空白

那么我们可能划上线表示1

没有线表示0

那么机器的运行是分成三个步骤来做的

每一部机器都会可以选择

把这个格子上值读出来

看看盒子上是0是1或者是不是空白

那么机器自己有一张状态表

它根据所读到的符号

和它自己的状态表

总会形成一系列的映射

比如说读到的值是什么

机器的状态是什么

然后我应该做一个操作是什么

这个操作就是把这个格子上的0或者1

可以选择保持原样或者改变它的值

那么最后一个步骤呢

就是把这个格子往任意方向移动一格

那么图灵机一个非常简单的模型

那么这里头我们会发现

它会有一个映射关系在里头

就是每一部读到的0或者1

和我要做的步骤

那么图灵机定义

总会通过一个有限的这样一个映射的指令集

决定了一个图灵机的定义

那么一旦一件事情能够

通过有限个状态指令集的步骤的叠加组合

形成一套

操作过程加以完成

它就是一个可计算问题

那么这件事情如果我们后知后觉

作为现代人倒过来看

会很明显的感觉到几件事儿

也就是说读到了什么值

做什么操作规定了这个图灵机的指令

也就是他做什么事儿

然后这些事儿的流程

图灵机定义

能够通过流程实现可计算问题

这个流程其实就是程序(program)

这个概念我们以后会反复的说

所以一旦能够被这样一种简化模型

通过流程通过程序加以解决问题

就是可计算问题

所以呢我们一个图灵机

总是从一个格子开始

加以运算到某个位置

进入一种所谓停止状态解决一个问题

这就是图灵的构想

这个构想足够的简单

我们会说它是一个虚拟的计算机

完全忽略了所有的硬件状态

考虑的焦点就是数理逻辑本身

这就是我们说图灵探讨计算机科学

或者作为一个先驱者

它的基础使数学发展到这一步

那么当然图灵也有很多天才的构想

它会构想我在纸袋子上存储数据和程序

那么也就是

比如说像这张图1971年代日历的计算机

它的程序就存在像游尺一样的

纸袋上的方洞来决定的

如果多说一句这样的构想

也不是天才一拍脑袋想出来的

因为在十八世纪十九世纪

提花编织机的纺织机纺布机

就是用这样的纸带

来保存布料的花样和图案的

那么图灵计算机是一个形而上的

抛出一切硬件构架的实现

我们往往会发现这样的东西

都会在哲学层面会非常的厉害

所以图灵的文章从理论上证明了

这套通用计算机的可能性

以及它所能解决问题的范围

那么如果过了若干年以后到了1939年

美国阿坦那索夫

研制了世界上第一台电子计算机

这台计算机非常好记

就叫ABC

A就是阿坦那索夫(Atanasoff)名字的缩写

B是Berry C是Computer

那么他第一次使用了二进制

使用电路的开和合

电压的高和低来表示数字的0或者1

运用了当时可以使用的电子管

和电路来执行逻辑运算

第一次实现了电子计算机

那么应该说他是图灵机的

第一个硬件实现看得见也摸得着

当然了由于ABC这台计算机比较低调

一直没有特别宣传

所以世界上的这个历史里头

一度也认为另外一台计算机埃尼阿克(ENIAC)

是世界第一台计算机

但从时间上却是ABC更早

那么来看看ABC这台计算机

它是叫Atanasoff-Berry Computer

缩写成ABC

那么这张看上去彩色的这张图非常漂亮

那个年代是没有彩色照片的

这是纪念这台计算机几十周年纪的时候

用当时的图纸和材料

由这个研究所复刻的一个复刻版

那么黑白的这个照片

和底下的这张设计图

是当年ABC这计算机设计时候的原始资料

它首先实现了二进制的运算

实现了可以重复读写使用的存储器

实现了并行的数据处理

而且区分了存储单元和计算的功能

所以他在图灵的原始构想上

其实又往前走了一大步

那么应该说

这个阿坦那索夫的ABC计算机

是图灵机的第一实际的实现

到了1940年代

另一位我们很著名的人冯·诺依曼

不仅研制成功了更好更广泛的电子计算机

而且还为计算机设计了编码程序

真正的将纸袋的存储和输入输出

用到了计算机上

所以有很多认为冯·诺依曼

是计算机之父

但他自己非常的谦虚

表达了对图灵的尊重

那么冯·诺依曼更重要是提出了

冯·诺依曼体系结构

将计算机进一步分为了运算器

逻辑控制器 存储器 输入设备输出设备

这五大部分一直沿用到今天

应该说

我们发现这个历史的延续

从1936年图灵的

一个从数理哲学谈成的构想

一直到1939年的ABC

一直到冯·诺依曼的更好的计算机

实际到我们今天这条路走下来

我们始终还是没有脱离图灵机的这个

形而上的带有哲学意义的构想范畴

那么他从数学上

解释了所有计算机发展的

到今天这些问题

那么所以在1966年的时候

计算机科学界开始颁发最高的

号称计算机界诺贝尔奖的图灵奖

也是这个来源

那我们再看几个历史东西

比如说这个

看着锈锈的像个滚筒一样的东西

没错它是一个鼓(drum)

但它是个磁鼓

我们现在都用磁盘

那么它是一个磁鼓

它就是第一台计算机ABC上的

DRAM或者叫内存

它由很多很多个电容

密密麻麻地排成

每个电容通过保留的电压是高是低

来存储0或者1

那么它能存储多少数据呢

它能存储30×58个比特

那大家可以算一算

六八四十八

它一共也就是180到200个字节的容量

一个巨大的磁鼓

那么随着时代的发展

技术当然在不断的进步

比如说这张图1956年

就是著名的IBM350这样一台计算机

我很想考大家的一件事

这个人坐在一个小桌子旁边

旁边有一个柜子

我想问一问计算机的主机

是这张图里哪个部分

很多同学根据印象会觉得

那个巨大的柜子肯定是计算机

运算能力强大

我告诉大家不是的

在1956年代计算机已经

能够做的比较小形化

这个人坐的这个桌子这个台子

是计算机的主机

旁边这个柜子

是世界上第一个硬盘

它采用了五十张24英寸的磁盘

用磁性来代表0或者一

整个这个柜子这么大的磁盘

需要一套维护系统

来维持它里头的温度气体

那么它的总容量是五兆字节

也就是今天我们用单反相机

照一张照片的容量

那么这一个硬盘的造价

每兆字节价值1万美元

所以这个硬盘价值5万美元

这是在1956年代的计算机的水平

所以呢随着计算机的发展

我们已经进入了一个非常繁荣的时代

在这个学期我们要学的课里头

一个小小的ARM嵌入式系统

运算能力的事情我们待会再讲

我们所使用的KL25Z128这样一个

最低端的这一个便宜的芯片

十几二十块钱的价值

它的片内RAM存储器是128k

ROM不可丢失的存储器是1M字节

已经远远超过了

计算机发展几十年前的那个时代

但是我们后面会讲

我们仍然要量入为出地去使用这些存储

那么作为知识的进一步延续

知道了计算器的历史渊源

我们顺着来顺一顺

从数字的世界如何走到计算机的世界

图灵说了0或者1

我们生活中要解决很多

计算的复杂问题

我们的数怎么表示成0或者1呢

在这里不过多展开只是过一遍

我们人类的技术都是用十进制对吧

那么十进制与二进制的转换

大家都很熟悉

我们通过不断的除以二

可以将十进制数按位转化成二进制数

通过不断地把一个二进制的数

按位乘以二的幂次方求和

就转换为十进制数

那么在计算机领域

所有C语言基础的同学都会有一个概念

我们很常用使用的是十六进制数

用0123456789 以及ABCDEF

这十六个字符来表达

0到15的数字

形成十六进制数的表达式

在计算机科学

在C语言里头

我们很经常的使用十六进制数

原因就是如这张表所示

因为二进制数非常的长

非常容易出错

对于人类的书写

所以一旦使用十六进制的时候

它能够刚好每四位对应一个十六进制数

所以非常当你熟练的时候

你会非常一目了然的

比如说看到5就是0101

看到七就是0111

形成二进制之间的映射关系

所以当你做一个嵌入式

底层硬件开发的时候

十六进制与二进制与十进制间的换算

必须特别的熟练并且特别的有概念

换言之记住这张表

那么这些换算的事情

在本门课程范围里我不会展开的讲

那么如果大家不熟悉或者想玩一玩

我有个很好的建议

就是使用你们Windows上的计算器

把它打开

然后进入科学程序员计算模式

敲一些数在上面的按键上进行进制的转化

那么在进行嵌入式开发的领域

或者计算机编程的领域

如果带有C语言基础

我要提示的是

大家要逐渐的对一些数比较敏感

比如说0 十六进制0x00

二进制一串0

二进制一串1

十六进制就是应该是0xFF

那么十进制是255

那么包括128十六进制是0x80

二进制是0b10000000

127是0b01111111

是0x7F等等

我们要逐渐对这些值比较有概念

特别在进行日后硬件编程的时候

比如0x55 0xAA

这种1 0交替的二进制数也会经常用到

这是大家应该注意的另外一个点

那么有了数

我们接着往下顺知识

那么人类喜欢使用什么呢

我们人类是使用语言的

TXT文本在计算机里怎么处理

C语言大家都学过

我们再回顾一下

一个很重要的概念

就是ASCII码表

这是C语言的基本概念

我们只是过

那么最早ASCII码表是用七个比特

来表示一些控制符

和常见的数字字母的

那么ASCII码它实际上的缩写是American Standard Code for Information Interchange

这实际上是一个这个美国官方标准

但是长久以来

由于计算机的诞生和发展

它是计算机领域的实质上的标准

那么ASCII码

它这128个字符

会形成这样一张表

里头有大量控制字符

在今天其实已经不用了

它为了跟早期的打字机

或者是这些机械设备保持兼容

那么对于换行

NewLine以及这个英文字母和数字的使用

到今天都是延续的

那么我们在嵌入式开发的领域

或者在C语言的基础上巩固的事情

希望提示大家的就只是一个点

就是在C语言里头

Character类型变量的字符

它的本质是数字

或者说对于计算机来讲

计算机可不认识ABCD

我们只是存储它在ASCII码表里头的ASCII的值

所以我们如果有一个Unsigned character类型的变量

它等于'A'字符加4

那它的结果是什么呢

我们会说

它的结果就是字母E

但是同时计算机里存的值十进制是101

那么同样的如果我有一个unsigned character变量

它等于字母字符'a'减掉大'Z'

是什么意思呢

字符其实不能做减法的

减的是它对对应的ASCII码表的值

也就是7

我们对这个概念要回顾(recall)一下

在C语言里学过

那么在嵌入式编程

或者在任何一个计算机编程里头

我们非常清楚的一件事情是

我们编程或者按下一个键给计算机

计算机其实收到的是它的ASCII码值

而在C语言里头它是一个字符型变量

存的是值也可以当字符处理

而一旦我们要把这个值输出

比如说在显示器上显示的时候

计算机根本不知道字符是什么

它只是根据ASCII码的值到字库里

去调用这个值所对应的那个形状

逐点绘制到屏幕上

让人类觉得我看到了一个'A'

这是它的本质

所以计算机不认识字母

只认识数

这是在基础概念阶段要给大家说清楚的

那么我们从

一个基本的数学的概念

进入一个嵌入式系统知识

我们很重要的还有一个概念呢

就是数字与模拟

那么数字与模拟在

我们嵌入式系统

经常要跟物理世界打交道

我们要测一测温度是多少

人跑得有多快

心率是多少

智能车的转速是多少

这个数字与模拟的基本概念当中

我们最核心的两个差异

就是模拟的东西是连续的

而数字的东西是离散(discrete)的

那么我们打一个很形象的比喻

虽然在数字电路

模拟电路这样的基础课程里

会更多地探讨

在嵌入式行业我们建立概念

打一个比喻

比如说一个闹钟

它如果是指针走过表盘的这种形式

我们可以说这个指针

所指向的时间是模拟的

因为它会扫过表盘的

每一个角度每一个区域

而如果我们用的是电子表电子钟

它的秒数分数都是三十

三十一离散跳跃的

它不会出现它中间的中间值

这是一种离散的概念

所以呢

在台湾或者香港

Analog这个词很多时候会翻译成类比

叫模拟也好 叫类比也好

那它的意思是什么呢

是如果我们拿到了一个的电学信号

这个电学信号在很多时候

是一个自然界存在的物理量的反应

而自然界绝大多数的物理量

比如说温度

别说气压的变化

比如说光照的强度的变化

它无论变化的多么剧烈

它都是一个连续函数

那么它是连续的

那么在电学量里头

如果我们测量的传感器

输出一个量是这些量的

一定程度上的表征

它的电学量会跟这些物理量

连续的发生变化

这个时候我们处理的是模拟信号

那么我们很多时候

在当代计算机系统

会把它变成数字信号

更简单说就是类比成人

就是我在固定的时间点

用一个有限精度的温度计

去测量一个温度

所以我得到的是很多离散的点

而如果这个测量系统

是一个计算机系统

我会得到一个向量

由若干个值组成

那么

通过数字系统

来处理这些离散的值

进行存储运算和变化

都会非常的富有效率

但是呢我们可能

失去了这个连续当中的

若干物理信息

对于如何的转化如何的不失真

在其它的相关课程里大家有机会学习

但我们建立的概念是

这是数字与模拟的区别

我们在时间上是间隔的

我们在取值上是量化的

电子学世界正在走

从模拟往数字变化的趋势当中

比如我们很多同学

可能接触都没有接触过

但是听说过的

比如说我们磁带

逐渐地被CD所取代

那么磁带上很多存储的是模拟量

大量的雌信号的强弱代表1个音的变化

而CD上存储的是0或者1

我们看过的录像带

正在逐渐被DVD被网络视频文件所取代

然后我们用天线接收了模拟电视信号

正在逐渐被进入千家万户的

数字电视所取代

那么所有的这些数字系统

所传递的是这些量

被离散化量化以后的值

这个值又通过刚才数的关系

转换成0或者1

来进行处理或者传输

那么在电子计算机系统里头

0或者1怎么表现呢

我们以后可能会学习很多标准(Standard)

但最基本的一个概念

对于绝大多数系统对于最常用的系统

我们会非常简单(simple)地使用一个电压的

高和低来代表0或者1

这是与模拟系统最大的一个差异

如果大家学会模拟计算机

我们会说一个电学量

代表了麦克风采级到声音的大小

那么电压的每一个值

连续变化就代表了音量的变化

但是实际上

在数字系统里头

我们是将它采样以后

用一个电压传递信息的时候

它用它的低电压代表0

高电压代表1

传递0和1的序列

那表中所获得的物理信息

那么在当代的系统里头

经常模拟和数字是一起工作的

比如个典型的CD播放器

从CD上读出的信号是0和1的串列

它在时间和幅度上

表征了我们所采集到的声音信号

所要记录的声音信号的

幅值的变化规律

我们通过一个叫做

数模转换的器件

将它还原成

我们能看到的电压波形

但是这个电压波形

它可能功率不够

可能幅度不够

我们再通过模拟电路的功率放大

来驱动一个我们所需要的

音频换能器或者叫喇叭

或者叫音箱把

机械能变成声波传递出来

那么这样一个从数字值

到数字信号的处理

再到模拟的转换

是我们当代常用的数模混合的

系统的一个基本范式

所以嵌入式系统

工作在一个计算机的这个范畴里头

我们往往是在数字域

能够获得一些物理量

转化成数字量

也可以把它转换成模拟量

再与外部的世界发生作用

这个概念在学习嵌入系统的时候

一定要非常的清晰

也更加的关注它与模拟世界的关系

那么我们在第一个小节里

大家回顾一下

讲了讲

机械计算器从哪来

讲了讲图灵机

然后最后一直讲到了数文本

以及我们所要接触的

整个电子学的世界

数字与模拟是什么关系

扫清了这样一些基本概念

它非常的简单

有很多同学可能有基础

那么在下一节课

而我们将会尝试从一个

简单的开关简单的0或者1

如何一直演变到

一个小的CPU如何运行

学过那节课大家会发现

我们到的计算机系统的视野

又有所不同

好 这节课就到此结束

谢谢大家

智能车制作:嵌入式系统课程列表:

第一章 概览

-1.1 课程概览

--Video

-1.2 进入嵌入式系统的世界

--Video

-1.3 如何学好嵌入式系统

--Video

第二章 绪论

-2.1 计算机的基本概念、发展历史

--Video

-2.2 从晶体管到CPU

--Video

-2.3 概念CPU、微控制器MCU和嵌入式系统

--Video

-2.4 八卦计算机史

--Video

-2.5 不同领域、不同系列的嵌入式系统

--Video

-2.6 ARM历史与MKL25Z128 MCU

--Video

第三章 MCU基础

-3.1 CPU的基本结构和运行机制

--Video

-3.2.1 堆栈的概念

--Video

-3.2.2 堆栈的概念-头脑体操

--Video

-3.3.1 ARM的体系结构

--Video

-3.3.2 ARM的体系结构-头脑体操

--Video

-3.4 中断的概念和机制

--Video

-3.5 中断子程的概念和编程

--Video

-3.6 复位、时钟、存储器和总线

--Video

-3.7 小结:MCU的总体结构和程序运行机制

--Video

第四章 MCU外设与开发

-4.1 第一种外设:IO

--Video

-4.2 IO外设的编程实操-点亮LED

--Video

-4.3 IO外设的进阶知识

--Video

-4.4 嵌入式开发的基本概念与工具链

--Video

-4.5 嵌入式开发的进阶知识

--Video

-4.6 嵌入式开发中的C语言(上)

--Video

-4.7 嵌入式开发中的C语言(下)

--Video

-E0.1 实验零 开发板的初步认识与工具链的安装

--Video

-E0.2 实验零 体验一个例程的编译与下载

--Video

-E0.3 实验零 编写第一个程序:点亮核心板LED

--Video

-E1 实验一 点灯秘籍

--Video

第五章 MCU与嵌入式系统设计

-5 智能车视角的嵌入式设计

--Video

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。