书海网短评:
RaspberryPi的诞生,深受20世纪80年代价格相对低廉的高度可编程计算机(以及它们对英国高新技术产生的影响)的启发,它激励新一代程序设计师并为他们提供准入平台。经济成本和技术门槛的可接受性,使得Raspberry
RaspberryPi的诞生,深受20世纪80年代价格相对低廉的高度可编程计算机(以及它们对英国高新技术产生的影响)的启发,它激励新一代程序设计师并为他们提供准入平台。经济成本和技术门槛的可接受性,使得RaspberryPi成为学习计算机工作原理的理想工具。《使用RaspberryPi学习计算机体系结构》将会是你整个RaspberryPi内幕发现之旅的私人指南,也将成为你学习由RaspberryPi完美诠释的知识库的专业级教练。作者EbenUpton和JeffDuntemann是理想的导师:作为RaspberryPi的共同创始人,Upton展现出他的深刻洞察力;Dunteman则将复杂的技术知识凝练为易于理解的解释。以RaspberryPi这块信用卡般大小的计算机(正在革新编程世界)的体系结构为基础,Upton和Duntemann共同提供了隐藏在所有计算机背后的技术的专业级指导。
《使用RaspberryPi学习计算机体系结构》按部就班地讲解每个组件,包括组件能做什么、为何需要它、该组件与其他组件的关系,以及组件创建过程中设计者面临的选择等。从内存、存储器和处理器,到以太网、相机和音频。Upton和Duntemann相互合作,确保读者扎实理解RaspberryPi的内部结构及其整体上与计算背后的技术之间的关系。
《使用RaspberryPi学习计算机体系结构》能帮助读者
■ 了解RaspberryPi每个部分的设计目的
■ 理解不同组件之间的交互方式
■ 深入了解系统设计的完整过程
■ 学习程序设计原理
■ 观察硬件和操作系统之间的相互作用
■ 深入研究ARM芯片背后的机制
■ 比较和对照不同的芯片,从ARM到Intel
EbenUpton是RaspberryPi基金会的创始人,也是该基金会旗下的贸易部门RaspberryPi(贸易)有限公司的CEO,他与GarethHalfacree合著了RaspberryPiUserGuide一书。Eben早年创办了两家成功的移动游戏和中间件公司(Ideaworks3d和Podfun),还曾担任剑桥大学圣约翰学院计算机科学的教学主管,并和他的父亲CliveUpton教授一起编写了牛津诗韵词典(OxfordRhymingDictionary)。Eben在剑桥大学获得了物理学和工程学学士学位以及计算机科学博士学位,还获得了工商管理硕士学位。
JeffDuntemann从1974年就开始出版各种技术类和科幻类出版物。它是Xerox公司的程序师,同时还担任Ziff-Davis出版社和Borland国际软件公司的技术编辑。他编辑发行了两份程序师杂志,在其名下有20本技术性书籍,包括*畅销的AssemblyLanguageStepByStep一书。在Dr.Dobb’sJournal杂志上,Jeff连续四年撰写“StructuredProgramming”专栏,并在很多杂志上发表了大量技术性文章。1989年,Jeff和他的作家伙伴KeithWeiskamp发起成立了CoriolisGroup,到1998年CoriolisGroup已经成为美国亚利桑那州*大的图书出版商。Jeff对“强”人工智能表现出持久的兴趣,他的绝大部分科幻著作(包括TheCunningBlood和TenGentleOpportunities两本小说)都在探寻强人工智能的因果逻辑。Jeff的其他兴趣包括望远镜和风筝,他还是一位电子学和无线电业余爱好者(呼号K7JPD)。在过去的40年里,Jeff一直和妻子Carol居住在美国亚利桑那州的菲尼克斯市,陪伴他们的还有四条卷毛比雄犬。
RalphRoberts是一名受过嘉奖的越战老兵,在阿波罗登月工程期间供职于NASA。自从1979年在CreativeComputing杂志上发表第一篇文章开始,Roberts就一直从事计算机和软件方面的写作。Roberts为国家出版商撰写了超过100《使用Raspberry Pi学习计算机体系结构》籍,以及上千篇文章和短篇小说。总而言之,他已经发售了超过2000万字的专业内容。Roberts的*佳畅销书包括美国*一本关于计算机病毒(美国国家电台由此诞生了多部相关电影)的书籍,还有过去21年里反复印刷的一本烹饪食谱——ClassicCookingwithCoca-Cola,目前已经售出了50万本。
TimMamtora是博通有限公司IC设计部门的总工程师,目前是美国GPU硬件团队的技术带头人。他在移动计算机图形学方面从事了近七年的工作,此前为模拟电视和传统DSP硬件开发内部IP。Tim拥有剑桥大学工程学硕士学位,其中第三年在马萨诸塞州技术学院度过,在那里激发了Tim对数字硬件设计的兴趣。他对推进工程充满激情,并专门花费时间在剑桥大学指导学生,他还在母校发表工程学机遇方面的演讲。工作之余,Tim喜欢各类体育运动、摄影以及游览世界。
BenEverard是一位作家,也是一位播客。平时为Linux编写修补代码,还喜欢摆弄机器人。《使用Raspberry Pi学习计算机体系结构》是Everard的第二部著作,他还撰写了LearningPythonwithRaspberryPi一书(Wiley出版社,2014)。可以在推特@ben_everard上找到他。
第1章计算机漫谈1
1.1日益缤彩纷呈的Raspberry1
1.2片上系统4
1.3一台令人激动的信用卡般大小的计算机5
1.4RaspberryPi的功能6
1.5RaspberryPi板7
1.5.1GPIO引脚7
1.5.2状态LED9
1.5.3USB插口10
1.5.4以太网连接10
1.5.5音频输出11
1.5.6复合视频12
1.5.7CSI摄像头模块连接器13
1.5.8HDMI13
1.5.9microUSB电源14
1.5.10存储卡14
1.5.11DSI显示连接15
1.5.12装配孔15
1.5.13芯片16
1.6未来16
第2章计算概述19
2.1计算机与烹饪20
2.1.1佐料与数据20
2.1.2基本操作21
2.2按计划执行的盒子22
2.2.1执行和知晓22
2.2.2程序就是数据23
2.2.3存储器24
2.2.4寄存器25
2.2.5系统总线26
2.2.6指令集26
2.3电平、数字及其表示27
2.3.1二进制:以1和0表示27
2.3.2手指的局限性29
2.3.3数量、编号和029
2.3.4用于二进制速记的十六进制30
2.3.5执行二进制和十六进制运算31
2.4操作系统:幕后老板33
2.4.1操作系统的功能33
2.4.2向内核致敬34
2.4.3多核34
第3章电子存储器35
3.1存储器先于计算机而存在35
3.2旋转磁存储器(RotatingMagneticMemory)36
3.3磁芯存储器37
3.3.1磁芯存储器的工作过程38
3.3.2存储器访问时间39
3.4静态随机访问存储器(SRAM)40
3.5地址线和数据线41
3.6由存储器芯片构建存储器系统42
3.7动态随机访问存储器(DRAM)45
3.7.1DRAM的工作原理45
3.7.2同步DRAM和异步DRAM47
3.7.3SDRAM列、行、Bank、Rank和DIMM49
3.7.4DDR、DDR2、DDR3和DDR4SDRAM50
3.7.5纠错码存储器53
3.8RaspberryPi的存储器系统54
3.8.1节能性54
3.8.2球栅阵列封装55
3.9缓存55
3.9.1访问的局部性56
3.9.2缓存层级56
3.9.3缓存行和缓存映射57
3.9.4直接映射59
3.9.5相联映射61
3.9.6组相联高速缓存62
3.9.7回写缓存到存储器63
3.10虚拟存储器64
3.10.1虚拟存储器概览64
3.10.2虚拟存储器到物理存储器的映射65
3.10.3深入了解存储器管理单元66
3.10.4多级页表和TLB69
3.10.5RaspberryPi的交换问题70
3.10.6RaspberryPi虚拟存储器70
第4章ARM处理器与片上系统73
4.1急速缩小的CPU73
4.1.1微处理器74
4.1.2晶体管预算75
4.2数字逻辑基础75
4.2.1逻辑门75
4.2.2触发器和时序逻辑76
4.3CPU内部78
4.3.1分支与标志79
4.3.2系统栈80
4.3.3系统时钟和执行时间82
4.3.4流水线技术83
4.3.5流水线技术详解84
4.3.6深入流水线以及流水线阻塞86
4.3.7ARM11中的流水线88
4.3.8超标量执行89
4.3.9基于SIMD的更多并行机制90
4.3.10字节序92
4.4CPU再认识:CISC与RISC93
4.4.1RISC的历史95
4.4.2扩展的寄存器文件95
4.4.3加载/存储架构96
4.4.4正交的机器指令96
4.4.5独立的指令和数据高速缓存97
4.5源于艾康的ARM97
4.5.1微架构、内核及家族98
4.5.2出售设计许可而非成品芯片98
4.6ARM1199
4.6.1ARM指令集99
4.6.2处理器模式102
4.6.3模式和寄存器103
4.6.4快速中断107
4.6.5软件中断108
4.6.6中断优先级108
4.6.7条件指令执行109
4.7协处理器111
4.7.1ARM协处理器接口112
4.7.2系统控制协处理器113
4.7.3向量浮点协处理器113
4.7.4仿真协处理器114
4.8ARMCortex114
4.8.1多发和乱序执行115
4.8.2Thumb2115
4.8.3ThumbEE115
4.8.4big.LITTLE116
4.8.5NEONSIMD协处理器116
4.8.6ARMv8和64位计算117
4.9片上系统118
4.9.1博通BCM2835SoC118
4.9.2第二代和第三代博通SoC设备119
4.9.3VLSI芯片原理119
4.9.4流程、制程工艺和掩膜120
4.9.5IP:单元、宏单元、内核120
4.9.6硬IP和软IP121
4.9.7平面规划、布局和布线121
4.9.8片上通信的标准:AMBA122
第5章程序设计125
5.1程序设计概述125
5.1.1软件开发过程126
5.1.2瀑布、螺旋与敏捷128
5.1.3二进制程序设计130
5.1.4汇编语言和助记符131
5.1.5高级语言132
5.1.6花样泛滥的后BASIC时代134
5.1.7程序设计术语135
5.2本地代码编译器的工作原理137
5.2.1预处理138
5.2.2词法分析138
5.2.3语义分析139
5.2.4生成中间代码139
5.2.5优化139
5.2.6生成目标代码139
5.2.7C编译:一个具体示例140
5.2.8链接目标代码文件到可执行文件145
5.3纯文本解释程序146
5.4字节码解释语言148
5.4.1p-code148
5.4.2Java149
5.4.3即时编译(JIT)150
5.4.4Java之外的字节码和JIT编译152
5.4.5Android、Java和Dalvik152
5.5数据构建块152
5.5.1标识符、关键字、符号和操作符153
5.5.2数值、文本和命名常量153
5.5.3变量、表达式和赋值154
5.5.4类型和类型定义154
5.5.5静态和动态类型156
5.5.6补码和IEEE754157
5.6代码构建块159
5.6.1控制语句和复合语句159
5.6.2if/then/else159
5.6.3switch和case161
5.6.4repeat循环162
5.6.5while循环163
5.6.6for循环164
5.6.7break和continue语句166
5.6.8函数166
5.6.9局部性和作用域168
5.7面向对象程序设计170
5.7.1封装172
5.7.2继承174
5.7.3多态176
5.7.4OOP小结178
5.8GNU编译器工具集概览178
5.8.1作为编译器和生成工具的gcc179
5.8.2使用Linuxmake181
第6章非易失性存储器185
6.1打孔卡和磁带186
6.1.1打孔卡186
6.1.2磁带数据存储器186
6.1.3磁存储器的黎明188
6.2磁记录和编码方案189
6.2.1磁通跃迁190
6.2.2垂直记录191
6.3磁盘存储器192
6.3.1柱面、磁轨和扇区193
6.3.2低级格式化194
6.3.3接口和控制器195
6.3.4软盘驱动器197
6.4分区和文件系统198
6.4.1主分区和扩展分区198
6.4.2文件系统和高级格式化199
6.4.3未来:GUID分区表(GPT)200
6.4.4RaspberryPiSD卡的分区201
6.5光盘202
6.5.1源自CD的格式203
6.5.2源自DVD的格式204
6.6虚拟硬盘205
6.7Flash存储器206
6.7.1ROM、PROM和EPROM206
6.7.2Flash与EEPROM207
6.7.3单级与多级存储209
6.7.4NORFlash与NANDFlash210
6.7.5损耗平衡及Flash转换层213
6.7.6碎片回收和TRIM214
6.7.7SD卡215
6.7.8eMMC216
6.7.9非易失性存储器的未来217
第7章有线和无线以太网219
7.1网络互连OSI参考模型220
7.1.1应用层222
7.1.2表示层222
7.1.3会话层223
7.1.4传输层223
7.1.5网络层224
7.1.6数据链路层226
7.1.7物理层226
7.2以太网227
7.2.1粗缆以太网和细缆以太网227
7.2.2以太网的基本构想227
7.2.3冲突检测和规避228
7.2.4以太网编码系统229
7.2.5PAM-5编码232
7.2.610BASE-T和双绞线233
7.2.7从总线拓扑结构到星型拓扑结构234
7.2.8交换以太网235
7.3路由器和互联网237
7.3.1名称与地址237
7.3.2IP地址和TCP端口238
7.3.3本地IP地址和DHCP240
7.3.4网络地址转换242
7.4Wi-Fi243
7.4.1标准中的标准244
7.4.2面对现实世界245
7.4.3正在使用的Wi-Fi设备248
7.4.4基础设施网络与AdHoc网络249
7.4.5Wi-Fi分布式介质访问250
7.4.6载波监听和隐藏结点问题251
7.4.7分片253
7.4.8调幅、调相和QAM253
7.4.9扩频技术256
7.4.10Wi-Fi调制和编码细节256
7.4.11Wi-Fi连接的实现原理259
7.4.12Wi-Fi安全性260
7.4.13RaspberryPi上的Wi-Fi261
7.4.14更多的网络263
第8章
操作系统265
8.1操作系统简介266
8.1.1操作系统的历史267
8.1.2操作系统基础270
8.2内核:操作系统的核心主导者274
8.2.1操作系统控制276
8.2.2模式276
8.2.3存储器管理277
8.2.4虚拟存储器278
8.2.5多任务处理278
8.2.6磁盘访问和文件系统279
8.2.7设备驱动程序279
8.3操作系统的使能器和助手279
8.3.1唤醒操作系统280
8.3.2固件283
8.4RaspberryPi上的操作系统283
8.4.1NOOBS284
8.4.2第三方操作系统285
8.4.3其他可用的操作系统285
第9章视频编解码器和视频压缩287
9.1第一个视频编解码器288
9.1.1利用眼睛288
9.1.2利用数据290
9.1.3理解频率变换293
9.1.4使用无损编码技术297
9.2时移世易298
9.2.1MPEG的最新标准299
9.2.2H.265302
9.3运动搜索302
9.3.1视频质量304
9.3.2处理能力305
第10章3D图形307
10.13D图形简史307
10.1.1图形用户界面(GraphicalUserInterface,GUI)308
10.1.2视频游戏中的3D图形310
10.1.3个人计算和显卡311
10.1.4两个竞争标准312
10.2OpenGL图形管线314
10.2.1几何规范和属性315
10.2.2几何变换317
10.2.3光照和材质320
10.2.4图元组装和光栅化322
10.2.5像素处理(片段着色)324
10.2.6纹理326
10.3现代图形硬件328
10.3.1瓦片渲染329
10.3.2几何拒绝330
10.3.3着色332
10.3.4缓存333
10.3.5RaspberryPiGPU334
10.4OpenVG336
10.5通用GPU338
10.5.1异构体系结构338
10.5.2OpenCL339
第11章音频341
11.1现在能听到我的声音吗?341
11.1.1MIDI342
11.1.2声卡342
11.2模拟与数字343
11.3声音和信号处理344
11.3.1编辑344
11.3.2压缩345
11.3.3使用特效录制345
11.3.4编码和解码通信信息346
11.41位DAC347
11.5I2S349
11.6RaspberryPi声音输入/输出350
11.6.1音频输出插孔350
11.6.2HDMI350
11.7RaspberryPi的声音351
11.7.1RaspberryPi板载声音351
11.7.2处理RaspberryPi的声音351
第12章输入/输出359
12.1输入/输出简介359
12.2I/O使能器362
12.2.1通用串行总线363
12.2.2USB有源集线器365
12.2.3以太网367
12.2.4通用异步收发器368
12.2.5小型计算机系统接口368
12.2.6PATA369
12.2.7SATA369
12.2.8RS-232串口370
12.2.9HDMI370
12.2.10I2S371
12.2.11I2C371
12.2.12RaspberryPi显示器、摄像头接口和JTAG372
12.3RaspberryPiGPIO373
12.3.1GPIO概述以及博通SoC373
12.3.2接触GPIO374
12.3.3可编程GPIO380
12.3.4可选模式385
12.3.5GPIO实验的简单方法385
前言
通概念——通用可编程计算机——首次出现。
第二次世界大战爆发后,图灵继续在位于布莱切利园(BletchleyPark)开展的盟军代码破解工作中发挥了核心作用。在这个过程中,图灵(作为团队一员——别相信在电影中看到的)卷入到大量专用硬件的研发工作中,包括机电炸弹机,这台机器加速了破解德国恩尼格码密码的自动化进程。这些设备都没有使用图灵初始实验想法中的“有限状态机加无限纸带”这种具体架构,但与实际执行相比,却更适于数学分析。不过,即使是纯粹的电子巨人Colossus——如同炸弹机处理恩尼格码一样处理繁复冗杂的洛伦兹流密码——也没有触及通用程序设计的边界。尽管如此,对于这一代理论工程师而言,当他们返回到平民生活以后,使用真空管研发用于代码破解、雷达和火炮以及实现数字逻辑电路的大规模电子系统的经历,使得他们极具革新能力。
在莫里斯·威尔克斯(MauriceWilkes)的带领下,位于剑桥大学数学实验室的一个工程师小组着手搭建了电子延迟存储自动计算机(ElectronicDelayStorageAutomaticComputer,EDSAC)。1949年投入运行时,时钟频率达到500KHz,通过两个温度控制水箱中的32条水印延迟线,构成了一个容量为2KB的易失性存储器。程序和代码可以通过纸带读写。美国和英国的很多机构都可以狭隘地宣称自己首次研发出通用数字计算机,仅仅是标榜“首次”。对于EDSAC,公开的声明指出,它是第一台将应用扩展到研发团队之外的计算机。其他学科的学者可以申请时间在这台机器上运行他们自己的程序,并由此引入了以计算为服务的概念。EDSAC之后研发了EDSACII,然后是泰坦(Titan)。直到20世纪60年代,剑桥大学才停止从底层出发搭建自己的计算机,并开始从商业贸易商那里购买。这项实际举措直接影响到目前计算机部门的名称:剑桥大学没有计算机科学系,大学里有一个计算机实验室——威尔克斯早期数学实验室的延续。
对于计算机工程实践应用的专注,使得剑桥大学成为孕育新技术的沃土。很多新技术在计算机实验室、工程系或者不同的数学和科学系(即使是我们的数学家也懂得如何进行程序设计)中被提出来,由此吸引了大量跨国公司到此寻找工程技术人才。围绕剑桥大学成长起来的公司网(有时被冠以剑桥产业集群、剑桥现象或硅藻等不同的称谓)代表了美国硅谷之外的少量真正的技术集群之一。那台告诉我应当成为一名芯片设计师的BBC微型计算机就是剑桥生产的,包括其长期的竞争对手——辛克莱频谱。你的手机(以及RaspberryPi)就包含几个由立足于剑桥的ARM芯片公司设计的处理器。EDSAC问世70年之后,在英国剑桥依然是高科技的家园。
言归正传
在我误打误撞所接受的计算机教育中,最大的缺失是对计算机工作过程的系统认识。在从BASIC开始深入到汇编语言时,我被汇编层面的抽象“困住”了。我可以控制Amiga计算机的硬件寄存器在屏幕上移动小精灵,但对于如何搭建一台自己的计算机则一头雾水。在我花费了另一个十年的时间、取得了几个学位、离开学术界并到博通公司(一家在剑桥启动并在此寻求工程技术人才的美国半导体公司)工作之后,我才搞清楚这个问题。在这里,我的名片上印着“微电子芯片设计师”(实际上是更漂亮的称谓,“专用集成电路架构师”)的字样。在此期间,我拥有良好的条件与大量该领域的娴熟的从业者一起工作并向他们学习,包括索菲威尔逊(SophieWilson)
—
原始ARM处理器和BBC微型计算机(和SteveFurber一起)的设计师,还有博通3D图形硬件工程团队的TimMamtora,他提供了《使用Raspberry Pi学习计算机体系结构》图形处理单元(GPU)章节的内容。
很大程度上讲,撰写《使用Raspberry Pi学习计算机体系结构》的目的在于阐述“它是如何工作的”这个话题,正如我18岁时期望的那样。我们尝试覆盖所有现代计算机系统的主要部分,从CPU到易失性随机访问存储器、稳定存储器、网络及接口,以一种中学学生或一年级大学生乐于阅读的方式呈现出来。依托对当前技术发展水平的讨论,我们尝试提供一点历史性知识。绝大多数讨论的话题(尽管不是全部,特别是在技术细节方面)都与1949年维尔克斯的EDSAC工程团队有关系。阅读完《使用Raspberry Pi学习计算机体系结构》后,你至少会对计算机的基本工作原理有所了解。我坚信你将发现加强这方面理解的价值,即使你的目标职业是软件工程师并且从未打算设计一台自己的计算机。如果不了解cache的作用,当工作组的大小超出cache或者分配的缓冲区耗尽了cache的关联性时,程序性能的急速下降会令你很惊讶。如果对网络的工作过程一无所知,就很难为数据中心构建一个高效网络。
关于哪些方面《使用Raspberry Pi学习计算机体系结构》不会涉及,有必要花点时间阐述一下。对于任何涉及的话题,《使用Raspberry Pi学习计算机体系结构》都不是一本综合性技术参考书。关于cache设计、CPU流水线、编译器和网络堆栈,可以编写(有人已经写过)整卷图书。相反,对于每个话题,我们尝试提供一种入门式的讲解,并提供一些深入学习的建议。《使用Raspberry Pi学习计算机体系结构》主要专注于通用计算机(本质上讲,PC机)的架构。对于只对特殊目的和应用领域感兴趣的数字信号处理(DSP)和现场可编程阵列(FieldProgrammableGateArray,FPGA)等话题,只进行了有限的覆盖。最后,涉及一点定量决策过程的知识,这是良好的计算机架构的核心:如何在访问时间和cache大小之间折中,或者决定是否允许某个子系统一致访问一个属于其他部件的cache?我们无法教你像架构师一样思考。对于高级读者,Hennessy和Patterson的ComputerArchitecture:AQuantitativeApproach是这方面不可或缺的参考资料。
曲线上的拐点
首先提出免责声明,此处我愿意分享多年来总结出的几点有益的指导原则。在计算机架构中,像很多事情一样,有一个收益递减规律。当然,不论是以原始的CPU性能、标准化为能量消耗的CPU性能、存储密度、晶体管尺寸还是媒介上的网络带宽的形式,在任何时候,硬件对所完成的东西有一个限制。但情况往往是,在达到这些理论限制前,工程应用上就会遇到收益递减问题:每一项新增的改进都来之不易,都会引起成本和时间开销的提升。如果将研发成本、系统复杂性(容易受到漏洞攻击)或是为提升系统性能而花费的资金绘成图,在某个位置曲线就会急剧弯曲下来。“拐点”的左侧,性能以一种可预测(甚至是直线!)的方式响应花费支出,在右侧,随着努力的增加性能只是缓慢提升,并逐渐逼近由基础技术限制带来的“墙壁”。
有时候找不到性能的替代品。例如阿波罗登月计划,就是工程学上一个极具吸引力的实例。阿波罗登月计划在“拐点”右侧走出了相当远的距离,从根本上误导了旁观者对于宇航技术成熟度的认识。直到今天——火箭技术、航空电子和材料科学持续发展了50年以后——拐点已经移动了足够远的距离,才允许以合理的成本访问太空,甚至从月球返回。虽然如此,那些以谦卑的态度准确定位拐点位置的团队,为市场带来简单、稳健而又流行的工程系统,然后迅速更新换代,这些团队将最终战胜登月工程。
在对待架构方面,保守和更迭一直铭记于心。迄今为止,我们生产的三代RaspberryPi芯片都严格地采用相同的系统基础架构、存储器控制器和多媒体,所做的改变只局限于ARM内核的复杂性、少量致命缺陷的修复和时钟频率的提升。这里会出现一些博弈,因为工程师(包括我自己)是富有激情的,他们总希望打破界限。优秀架构师的任务在于精确把握颠覆性改变引发的风险代价,并与预期的利润进行权衡。
迈向基金会
2008年,我们创建了RaspberryPi基金会,初始目标很简单:应对申请剑桥大学计算机科学专业的学生数量逐步下降的问题。现在,我们看到了令人鼓舞的复苏信号,不论是剑桥还是其他学校,申请数量都超过了20世纪90年代末网络热潮时期的峰值。
我们目睹的一个最显著的变化可能是,新一代年轻人比我们在20世纪80年代时对硬件的兴趣还要高。编写一个汇编语言源程序,在屏幕上移动小精灵不再像以前那么有吸引力,但是在地板上移动机器人却更令人兴奋。我们看到12岁的孩子构建我在20多岁时才引以为豪的控制和传感器项目。我的愿望是,当这些年轻人坐在我孩童时期BBCMicro的新生代面前规划职业生涯时,有一些人可以明白他们将成为优秀的微电子芯片设计师,《使用Raspberry Pi学习计算机体系结构》将帮助他们完成这趟旅行。
—EbenUpton,剑桥,2016.05









