共3条
1/1 1 跳转至页
ARM 关注《ARM嵌入式系统开发——软件设计与优化》
问
谢谢关注,该书已经于5月26号出版发行,考虑到运输和书店的上架时间,估计在6月初各大书店均有销售。当然,我社现在即可直接邮购,方法
参见:http://www.buaapress.com.cn/buaa/index.asp
谢谢大家的支持!
《ARM System Developer's Guide: Designing and Optimizing System Software》
亚马逊网站连接:http://www.amazon.com/exec/obidos/tg/detail/-/1558608745/qid=1115944913/sr=5-1/ref=cm_lm_asin/002-5778715-3890438?v=glance
中译本《ARM嵌入式系统开发——软件设计与优化》详细内容如下:
\[美\] Andrew N.Sloss
\[英\] Dominic Symes
\[美\] Chris Wright著
沈建华译
沈建华,1987年毕业于华东师范大学计算机科学系,现任华东师范大学计算机系副教授,嵌入式系统实验室主任。曾在美国、日本、意大利、瑞士等国学习和工作,2001年2月至2002年2月在加拿大维多利亚大学做访问学者。他从事嵌入式实时系统的教学和科研工作近20年,在嵌入式OS、软件设计与优化、硬件系统设计等方面有一定的研究,并积累了丰富的实践经验。近5年负责并完成国家科技部、企事业单位、及国际合作科研项目10多个。曾获“上海市高校优秀青年教师”、“上海市育才奖”等,并入选教育部第一批高校青年骨干教师培养计划。
开本:787 mm×960 mm 1/16 字数:930千字
2005年5月第1版 2005年5月20日第1次印刷
ISBN 7-81077-652-5 定价:75.00元
致中国读者
首先我们向所有中国读者问好。
很高兴能出版我们书的中文版,希望你们有许多时间来学习ARM技术。如果你是位教授,那么这本书会有助于把ARM处理器内核和重要的软件编程技术介绍给学生;如果你是位学生,那么这本书是学习ARM编程的好读物;如果你是位使用ARM核进行产品研发的工程师,那么这本书可以满足实际需要。
此书的目的是展示如何设计与优化基于ARM处理器核的系统软件。我们的目标是提供一个基础的工作参考,以便能利用它开发出许多成功的新产品。
2004年,ARM的合作伙伴生产制造了12亿片ARM处理器,ARM也推出了2个新的处理器:CortexM3 和 MPCore。CortexM3主要针对微控制器市场,而MPCore主要针对高端的消费类产品。
CortexM3改进了代码密度,减少了中断延迟,并有更低的功耗。CortexM3实现了本书第15章所提到的Thumb2指令集。MPCore是第一个ARM多处理器内核,执行基于均衡多处理器(SMP)的操作系统。MPCore提供了cache一致性,每个实现支持1~4个ARM11核,这种设计为现代消费类产品对性能和功耗的需求作了很好的平衡。ARM还引入了L2 cache控制器来改进系统的整体性能。
为了支持大量的密集数据处理,ARM引入了OptimoDE技术,把它作为一个可配置的、专用的超长指令字(VLIW)数据引擎,配合ARM处理器工作。这种数据引擎可帮助主处理器完成诸如MPEG4或H.264等复杂算法。
ARM的大学计划将继续促进在应用研究、大学生和研究生课程以及教学培训中使用ARM技术。ARM已经给那些从事片上系统(SoC)设计教学和研究的大学,授权了开发工具、仿真模型和物理IP,并与剑桥(Cambridge)、卡内基·梅隆(CarnegieMellon)、密西根(Michigan)等大学保持密切联系。
ARM的研究和开发机构正专注于改进代码密度、降低功耗、扩展多媒体功能以及提高安全性。最后,我们要对沈教授表示最深切的感谢,为他在此书中文版翻译工作中的专注与努力。
谢谢您,沈教授。
Andrew N. Sloss
Dominic Symes
Chris Wright
2005年2月
译 者 序
2004年7月,一个偶然的机会,我去北京参加美国国家半导体(NS)公司的一个颁奖活动,正巧北京航空航天大学出版社的马广云老师打电话给我,说有一本关于ARM软件设计与优化的英文原版书,各方评价都很高,是否可以帮助翻译。我看到这本原版著作后,便当即答应尽快翻译此书。这确实是本好书。
我是从2000年开始接触、使用ARM处理器的。2001年2月至2002年2月,我在加拿大维多利亚大学访学期间,对ARM体系结构进行了分析、研究,并以Cirrus Logic的EP7312和EP9312为美国一家公司做了两个嵌入式无线应用的系统设计。出于对嵌入式系统的浓厚兴趣和对ARM处理器前景的认同,近几年,我和我们实验室的其他老师、研究生一起,使用ARM处理器设计、开发了10多个应用项目、产品和一些软/硬件基础平台。软件部分包括OS移植、驱动、FAT文件系统、GUI、TCP/IP网络协议栈、WiFi(802.11b)、USB协议栈、实时音频、图像信号处理以及许多应用软件。涉及的ARM处理器芯片有Samsung的S3C44B0X,4510,2410;Atmel的AT91R40008,RM9200;Cirrus Logic的EP7312,EP9312;Philips的LPC2106,2132,2292;OKI的ML674000;Analog Device的AduC7026;Intel的Xscale PXA255等。
多年对ARM系统的研究与实践,一方面加深了我们对ARM处理器系统的理解并丰富了我们的经验;另一方面也使我们深深感到了嵌入式软件设计与优化的特殊重要性。嵌入式系统由于其硬件资源、成本的限制,以及一些实时需求,许多在PC等标准平台上的软件(包括系统软件和应用软件)都不能直接搬到一个特殊的嵌入式硬件平台上,而必须经过适当的裁剪、优化;否则就可能产生很差的效果,甚至会导致系统瘫痪。通过对软件系统的合理设计与优化,可以降低对系统硬件资源(如CPU性能、存储器容量等)的需求,也可以降低系统功耗,从而使一个不可行的系统变为可行,也可以把一个毫无竞争力的产品变得极有竞争力!这里,可以把程序的优化过程看作是一个艺术加工过程,精雕细琢,一步步把一个平庸之作变成一件艺术品,体现出其真正的价值。
当我看完这本原版书后,感觉它写出了这几年我们正在研究、摸索而尚未能整理出来的许多东西,是从软件系统的角度对ARM系统开发的一个原则性指导,也是嵌入式软件开发者从入门变为高手的一个必备指南。作者论述简洁明了,把原本一些较复杂的问题(如嵌入式OS),只用很少的篇幅就把一个基本框架说得很清楚,确有功底深厚,举重若轻之感。书中论述的一些知识、方法和技巧,也是做好一个嵌入式软件的基础。只有把许多细致的基础工作做扎实,才能聚沙成塔,编写出高效的软件,创造出具有竞争力的产品。翻译此书,希望能对目前国内32位(ARM)嵌入式系统教学、研发热潮中的广大专业技术人员有所帮助,并提升32位嵌入式系统应用的水平。
本书系统介绍了基于ARM的软件设计与优化方法,知识面较广,涉及了计算机学科的很多基础知识,包括C语言与汇编语言程序设计、编译原理、数据结构、操作系统、计算机体系结构、数值计算、数字信号处理等内容;同时也给翻译工作带来了一定的困难,许多词汇、术语若按字面上翻译,则很难确切地表达出其本意,我们主要根据其上下文内容和中文习惯,并参照其他相关的中文书籍,进行意译。如5.9节中的aligned,译成“(地址)边界对齐的”,endianness译成“字节排列方式(大/小端)”;6.2节中的profiler,译成“性能分析器”等。另外一些简单的常用词,如loadstore,在用作名词时不译,在用作动词时译成“装载存储”,如“load指令在装载数据时……”,而不译成“装载指令在装载数据时……”。关于cache写策略的writethrough和writeback,本书中分别译为“直写”和“回写”,而没有用通常所说的“写直达”和“写回”,我们认为这样更简单明了而贴近原意。还有一些专业词汇,如DSP部分的“tap(抽头)”、“biquad(双阶节)”等,首次出现时都给出译文和英文,以后简单而都能理解的一般只给出英文,特别是用作单位时,如cycles/tap和cycles/biquad等。还有ARMv5和ARMv6体系结构的一些内容,几乎找不到相关资料可参考,也没有实验平台可以验证,只能根据我们的理解进行翻译。另外,对于一些程序中的简单注释,考虑到此书并非入门级读物,以及书中已有较详细的说明,经与出版社商量,没有全部翻译。
为了尊重原著,本书有些用词可能与国内一些书不太一致,例如原著中多处出现的“processor(处理器)”,是一种广义的泛指,可能是指一个ARM内核或内核中的一部分,也可能是指一个芯片;另外在一些地方(如表2.10中),把ARM7TDMI,ARM9TDMI,ARM720T及ARM920T等都统称为“CPU 核(core)”。所以本书也不区分“内核”与“核”。请读者阅读时注意。
在翻译过程中,发现了原著中的一些错误与不妥之处,通过与原作者多次交流并得到确认,在译稿中已得到纠正。还有一些标有“译者注”的地方,是我们根据对原文的理解,结合国内的习惯用法,作的一些补充说明。
本书对许多问题作了简明、细致的阐述,论述非常客观、公正。对一个事物的介绍,总是结合其背景或环境;对一个问题的描述或改进,一般也是从正、反两方面来进行,既说明了一种技术、方法对某方面的益处,同时也指出可能对另一方面造成的负面影响,即使对ARM处理器的介绍,也并非全是褒奖之词。这种严谨、科学的辩证思维和工作作风,更是值得我们每一个人学习并应身体力行的。
全书主要由笔者翻译并校对。我的研究生张群忠、沈颖、梁丹、庄艺唐、姜宁、吴红举及杨海波等参与了部分内容的翻译和资料整理工作。我的同事续晋华老师帮助修改和审核了第8章。我的同事杨艳琴老师通读了译稿,并提出了许多修改建议。原著的3位作者Andrew N. Sloss, Dominic Symes和Chris Wright及时提供了许多帮助,Andrew N.Sloss先生还亲临我们实验室交流、指导。在此书的翻译过程中,还得到了ARM(中国)总裁谭军博士、费浙平先生,北京航空航天大学出版社马广云博士、胡晓柏编辑,深圳英蓓特信息技术有限公司徐光峰先生,广州周立功单片机发展有限公司周立功先生的热情指导和鼓励。在此,谨向他(她)们表示衷心的感谢。
我也要特别感谢我的家人——妻子戴军、女儿沈维嘉,正是由于她们的无私帮助和全力支持,使我能全身心地投入到自己所热爱的工作之中,并在短短6个月的时间里完成了此书的翻译工作。
翻译是一件很难做得完美的事。由于时间仓促及水平所限,错误及不妥之处,请各位读者批评指正,并提出宝贵意见。我也会在我们实验室的网站( www.emlab.net )上及时发布相关信息,欢迎访问并相互交流。
沈建华
2005年2月
于华东师范大学
前言
如今,嵌入式系统开发人员和片上系统设计人员越来越多地选择特定的处理器内核和配套的工具、库及现成的组件来快速开发基于微处理器的新产品。ARM在这一方面表现尤为突出。在过去的10年中,ARM体系结构已成为世界上最受欢迎的32位体系结构,在本书完成时,基于ARM的处理器已发售了超过20亿片。ARM处理器已被嵌入到各种产品——从移动电话到汽车刹车系统。全球的ARM合作伙伴和第三方供应商,在半导体和产品设计公司中迅速发展壮大,包括硬件工程师、系统设计人员和软件开发人员。但至今还没有一本书能够较好地满足基于ARM的嵌入式系统及软件开发的需要,本书将填补这一空白。
本书的目标是,从一名产品开发者的角度来描述ARM内核的操作,重点放在软件设计上。由于本书是专门写给有一些嵌入式系统开发经验而可能对ARM体系结构不熟悉的工程师的,所以不要求有以前的ARM开发经验。
为了帮助读者尽快地学以致用,书中包含了一系列ARM软件范例。它们可以被集成到商业产品中,或者作为模板以快速创建应用软件。这些范例都已编号,读者可以在Morgan Kaufmann出版社的网站上方便地找到这些源代码。对于有ARM开发经验而想要获得ARM系统最高效能的人来说,这些代码同样颇有价值。
本书的结构
本书开头部分简要介绍了ARM处理器的设计原则,说明了它与传统RISC思想的区别及其原因。第1章还介绍了基于ARM处理器的简单嵌入式系统。
第2章进一步深入到硬件,介绍了ARM处理器核,并综述了当前市场上的ARM内核。
第3章和第4章分别介绍了ARM和Thumb指令集,也为本书后面的内容打下基础;有一些关键指令的解释,包括完整的例子,因此这2章可以看作是指令集的使用指南。
通过我们在协助ARM客户工作时开发的许多例子,第5章和第6章讲述了如何编写高效的代码。第5章讲述了在ARM体系结构上编写可以被高效编译的C代码的技巧和规则。这些技巧和规则已得到了证实,并且有助于确定哪些代码应该被优化。第6章详述了编写和优化ARM汇编代码的最佳方法,这对于通过降低系统功耗和时钟频率来改善系统性能是至关重要的。
由于在许多算法中都用到一些基本操作,所以如何优化它们是很值得研究的。第7章讨论了如何针对ARM处理器优化基本操作。该章不仅提供了实现一般基本操作的优化参考,而且为想得到一种快速参考方法的使用者提供了更加复杂的数学运算的优化参考。对于想要深入研究各个实现的读者,还提供了所需的理论知识。
嵌入式音频和视频系统应用的需求正在日益增长。它们需要数字信号处理(DSP)能力,直到最近,这种处理能力一般仍是由独立的DSP芯片提供的。然而,现在ARM体系结构提供了更高的存储器带宽和快速乘累加运算,使得仅用一个ARM内核的设计就能支持这些应用。第8章研究了如何尽可能改善ARM在数字处理应用方面的性能以及怎样实现DSP算法。
异常处理是嵌入式系统的核心。高效的异常处理能够大大改善系统的性能。第9章以一系列翔实的范例介绍了异常处理和中断的理论与实践。
固件是所有嵌入式系统的重要部分。在第10章中,通过我们设计的、称为Sandstone的一个简单固件包,介绍了固件的结构和设计。本章还介绍了一些可以运行在ARM上的流行的、工业固件包。
第11章以我们设计的、称为简单小操作系统(SLOS)的一个简单嵌入式操作系统为例,示范了嵌入式操作系统的实现方法。
第12,13,14章重点关注存储系统。第12章讨论了围绕ARM内核的各种cache技术,演示了带cache的特定ARM处理器的cache控制例程。第13章讨论了存储器保护单元(MPU)。第14章讨论了存储器管理单元(MMU)。
最后,在第15章,展望了ARM体系结构的未来,重点讲述今后几年内ARM指令集的发展方向和正在实现的新技术。
附录提供了详细的指令集参考、周期定时以及特定的ARM产品。
网上的范例
如前所述,本书有大量的经过测试的实用程序,可以帮助强化有关概念和方法。它们在Morgan Kaufmann出版社的网站上http://www.mkp.com/companions/1558608745可以找到。
致谢
首先要感谢的,当然是我们的妻子——Shau Chin Symes和Yulian Yang,以及所有大力支持并容忍我们花费了大量家庭生活时间在这一项目上的亲人。
本书前后花了许多年,很多人都曾给予过鼓励和技术上的建议,我们要感谢所有这些人。写一本技术书需要很辛苦地重视大量细节问题,因此要感谢所有投入时间和精力阅读本书并给予反馈的审稿人员。在这个过程中,与出版商一起工作的审稿人员有Jim Turley(SiliconInsider);Peter Maloy(Code Sprite);Chris Larsen,Peter Harrod(ARM,Ltd.);Gary Thomas(MLB Associate);Wayne Wolf(Princeton University);Scott Runner(Qualcomm,Inc.);Nial Murphy(PanelSoft)和Dominic Sweetman(Algorithmics,Ltd.)。
要特别感谢Wilco Dijkstra,Edward Nevill和David Seal,允许我们在本书中使用一些精选的范例。还要感谢Rod Crawford,Andrew Cummins,Dave Flynn,Jamie Smith,William Ree和Anne Rooney,在整个过程中提供了帮助和建议。感谢ARM战略支持小组:Howard Ho,John Archibald,Miguel Echavarria,Robert Allen和Ian Field,阅读并提供了快速反馈。
我们还要感谢John Rayfield发起这个项目并完成了第15章。还要感谢David Brash审阅了原稿,并允许我们在本书中使用了ARMv6的一些资料。
最后,我们要感谢Morgan Kaufmann出版社,特别是Denise Penrose和Belinda Breyer在整个项目过程中的耐心和建议。
目录
第1章基于ARM的嵌入式系统1
1.1RISC设计思想2
1.2ARM设计思想3
1.3嵌入式系统的硬件5
1.3.1ARM总线技术6
1.3.2AMBA总线协议6
1.3.3存储器7
1.3.4外设9
1.4嵌入式系统的软件10
1.4.1初始化(启动)代码10
1.4.2操作系统11
1.4.3应用程序12
1.5总结12
第2章ARM处理器基础1
2.1寄存器16
2.2当前程序状态寄存器17
2.2.1处理器模式18
2.2.2分组寄存器18
2.2.3状态和指令集21
2.2.4中断屏蔽22
2.2.5条件标志22
2.2.6条件执行24
2.3流水线24
2.4异常、中断及向量表27
2.5内核扩展28
2.5.1cache和紧耦合存储器29
2.5.2存储管理30
2.5.3协处理器31
2.6体系结构的不同版本31
2.6.1命名规则32
2.6.2体系结构的发展33
2.7ARM处理器系列34
2.7.1ARM7系列35
2.7.2ARM9系列36
2.7.3ARM10系列37
2.7.4ARM11系列37
2.7.5专用处理器37
2.8总结38
第3章ARM指令集1
3.1数据处理指令42
3.1.1MOVE指令42
3.1.2桶形移位器43
3.1.3算术指令46
3.1.4算术指令使用桶形移位器
47
3.1.5逻辑指令48
3.1.6比较指令49
3.1.7乘法指令50
3.2分支指令51
3.3loadstore指令53
3.3.1单寄存器传送指令53
3.3.2单寄存器loadstore指令的
寻址方式54
3.3.3多寄存器传送指令57
3.3.4交换指令65
3.4软件中断指令66
3.5程序状态寄存器指令68
3.5.1协处理器指令69
3.5.2协处理器15(CP15)指令语法
70
3.6常量的装载71
3.7ARMv5E扩展72
3.7.1零计数指令73
3.7.2饱和算术指令73
3.7.3ARMv5E乘法指令74
3.8条件执行75
3.9总结77
第4章Thumb指令集1
4.1Thumb寄存器的使用81
4.2ARMThumb交互82
4.3其它分支指令84
4.4数据处理指令84
4.5单寄存器loadstore指令87
4.6多寄存器loadstore指令89
4.7堆栈指令90
4.8软件中断指令91
4.9总结92
第5章高效的C编程1
5.1C编译器及其优化概述94
5.2基本的C数据类型96
5.2.1局部变量类型97
5.2.2函数参数类型101
5.2.3有符号数与无符号数103
5.3C循环结构104
5.3.1固定次数的循环104
5.3.2不定次数的循环107
5.3.3循环展开108
5.4寄存器分配111
5.5函数调用113
5.6指针别名117
5.7结构体安排120
5.8位域124
5.9边界不对齐数据和字节排列方式
(大/小端)127
5.10除法131
5.10.1带余数的无符号重复除法
133
5.10.2把除转换为乘133
5.10.3除数是常数的无符号除法
136
5.10.4除数是常数的有符号除法
137
5.11浮点运算140
5.12内联函数和内嵌汇编140
5.13移植问题144
5.14总结145
第6章ARM汇编与优化1
6.1编写汇编代码148
6.2性能分析和周期计数154
6.3指令调整154
6.4寄存器分配162
6.4.1分配变量给寄存器163
6.4.2使用超过14个的局部变量
166
6.4.3最大限度地使用寄存器168
6.5条件执行172
6.6循环结构174
6.6.1减计数循环174
6.6.2展开计数循环175
6.6.3多层嵌套循环178
6.6.4其它计数循环181
6.7位操作182
6.7.1固定宽度的位域打包和解包
182
6.7.2可变宽度编码的位流打包
183
6.7.3可变宽度编码的位流解包
186
6.8高效的switch188
6.8.1在范围0≤x<N的switch
189
6.8.2基于通用变量x的switch
191
6.9边界不对齐数据的处理192
6.10总结196
第7章基本运算优化1
7.1双精度整数乘法198
7.1.1长整型乘法199
7.1.2128位结果的无符号64位
乘法200
7.1.3128位结果的有符号64位整数
乘法201
7.2整数规格化和前导0计数203
7.2.1ARMv5及以上体系结构
的整数规格化203
7.2.2在ARMv4体系结构上的
规格化204
7.2.3后缀0计数206
7.3除法208
7.3.1通过试探减法实现无符号
数除法208
7.3.2无符号整数的Newton
Raphson除法215
7.3.3无符号小数Newton
Raphson除法221
7.3.4有符号数除法228
7.4平方根229
7.4.1通过试探减法计算平方根
229
7.4.2使用NewtonRaphson迭
代计算平方根231
7.5超越函数:log,exp,sin,cos233
7.5.1以2为底的对数运算233
7.5.22的乘幂235
7.5.3三角函数236
7.6字节顺序反转和位操作239
7.6.1字节顺序反转240
7.6.2位变换240
7.6.3‘1’位计数243
7.7饱和及舍入运算244
7.7.1饱和32位数到16位245
7.7.2饱和左移245
7.7.3舍入右移245
7.7.4饱和的32位加减法245
7.7.5饱和绝对值246
7.8随机数产生246
7.9总结247
第8章数字信号处理1
8.1表示一个数字信号250
8.1.1选择一种表示方法250
8.1.2操作以定点格式存储的值
253
8.1.3定点信号的加法和减法254
8.1.4定点信号的乘法255
8.1.5定点信号的除法256
8.1.6定点信号的平方根256
8.1.7小结:数字信号的表示256
8.2基于ARM的DSP介绍258
8.2.1ARM7TDMI的DSP259
8.2.2ARM9TDMI的DSP260
8.2.3StrongARM的DSP262
8.2.4ARM9E的DSP264
8.2.5ARM10E的DSP265
8.2.6Intel Xscale的DSP267
8.3FIR滤波器269
8.4IIR滤波284
8.5离散傅里叶变换292
8.6总结304
第9章异常和中断处理1
9.1异常处理307
9.1.1ARM处理器模式及异常
307
9.1.2向量表309
9.1.3异常优先级310
9.1.4链接寄存器偏移311
9.2中断313
9.2.1分配中断313
9.2.2中断延迟314
9.2.3IRQ与FIQ异常315
9.2.4基本的中断堆栈设计与实现
317
9.3中断处理方法321
9.3.1非嵌套中断处理321
9.3.2嵌套中断处理324
9.3.3可重入中断处理330
9.3.4优先级简单中断处理334
9.3.5优先级标准中断处理340
9.3.6优先级直接中断处理344
9.3.7优先级分组中断处理347
9.3.8基于VIC PL190的中断服务
例程351
9.4总结352
第10章固件1
10.1固件和引导装载程序354
10.1.1ARM Firmware Suite
357
10.1.2Red Hat Redboot358
10.2例子:Sandstone358
10.2.1Sandstone的目录结构
359
10.2.2Sandstone的代码结构
359
10.3总结364
第11章嵌入式操作系统1
11.1基本模块366
11.2实例:简单小型操作系统SLOS
367
11.2.1SLOS目录结构368
11.2.2初始化369
11.2.3存储模型373
11.2.4中断和异常处理374
11.2.5调度程序378
11.2.6上下文切换380
11.2.7设备驱动程序框架382
11.3总结383
第12章高速缓冲存储器cache1
12.1存储层次和cache387
12.2cache结构390
12.2.1cache存储器的基本结构
391
12.2.2cache控制器的基本操作
392
12.2.3cache与主存的关系392
12.2.4组相联395
12.2.5写缓冲器399
12.2.6cache效率的衡量399
12.3cache策略400
12.3.1写策略——直写法或回写法
400
12.3.2cache行替换策略401
12.3.3cache失效时的分配策略
404
12.4协处理器15与cache405
12.5清除和清理cache406
12.5.1清除cache407
12.5.2清理cache410
12.5.3清理Dcache410
12.5.4使用路和组索引寻址清理
Dcache414
12.5.5使用testclean命令清理
Dcache417
12.5.6在Intel XScale SA110和Intel StrongARM内核中
清理Dcache418
12.5.7清理和清除部分cache
421
12.6cache锁定426
12.6.1在cache中锁定代码和数据
427
12.6.2通过增加路索引来锁定cache
428
12.6.3使用锁定位锁定cache
433
12.6.4在Intel XScale SA110中
锁定cache行437
12.7cache与软件性能440
12.8总结441
第13章存储器保护单元MPU1
13.1受保护的区域446
13.1.1重叠区域447
13.1.2背景区域448
13.2初始化MPU,cache和写缓冲器
449
13.2.1定义区域的大小和位置
450
13.2.2访问权限453
13.2.3设置区域的cache和写缓冲器
属性457
13.2.4使能区域和MPU460
13.3MPU系统示例461
13.3.1系统需求462
13.3.2使用存储器映射分配区域
463
13.3.3初始化MPU464
13.3.4初始化和配置区域465
13.3.5完成初始化MPU468
13.3.6受保护系统的上下文切换
469
13.3.7mpuSLOS470
13.4总结470
第14章存储管理单元1
14.1从MPU到MMU474
14.2虚存如何工作474
14.2.1使用页定义区域476
14.2.2多任务和MMU478
14.2.3虚存系统的存储器组织
480
14.3ARM MMU的详情482
14.4页表482
14.4.1一级页表项483
14.4.2L1转换表基地址484
14.4.3二级页表项485
14.4.4为嵌入式系统选择合适的
页大小486
14.5转换旁路缓冲器487
14.5.1单步页表搜索487
14.5.22步页表搜索488
14.5.3TLB操作489
14.5.4TLB锁定490
14.6域和存储器访问权限491
14.7cache和写缓冲器493
14.8协处理器CP15和MMU配置
494
14.9快速上下文切换扩展496
14.9.1FCSE如何使用页表和域
497
14.9.2使用FCSE的提示499
14.10示例:一个简单的虚拟存储系统
500
14.10.1第1步:定义固定的系统
软件区域501
14.10.2第2步:为每个任务定义
虚存映射502
14.10.3第3步:在物理存储器中
定位区域503
14.10.4第4步:定义和定位页表
503
14.10.5第5步:定义页表和区域
数据结构506
14.10.6第6步:初始化MMU、Cache
和写缓冲器509
14.10.7第7步:建立上下文切换程序
524
14.11MMUSLOS示例525
14.12总结525
第15章ARM体系结构的发展1
15.1ARMv6对高级DSP和SIMD
的支持528
15.1.1SIMD算法操作529
15.1.2打包指令532
15.1.3复数运算支持533
15.1.4饱和指令534
15.1.5绝对差值求和指令534
15.1.6双16位乘法指令535
15.1.7高位字乘法536
15.1.8密码算法乘法扩展537
15.2ARMv6增加的系统和多处理
器支持538
15.2.1混合大小端支持538
15.2.2异常处理538
15.2.3多处理同步原语(Multipro
cessing Synchronization
Primitives)540
15.3ARMv6的实现541
15.4ARMv6之后的未来技术543
15.4.1TrustZone543
15.4.2Thumb2543
15.5总结544
附录AARM和Thumb汇编指令1
A.1如何使用这篇附录2
A.2语法548
A.2.1可选表达式548
A.2.2寄存器548
A.2.3立即数548
A.2.4条件和标志549
A.2.5移位操作550
A.3按字母顺序列出ARM和Thumb
指令551
A.4ARM汇编速查597
A.4.1ARM汇编变量598
A.4.2ARM汇编标注599
A.4.3ARM汇编表达式600
A.4.4ARM汇编保留字601
A.5GNU汇编快速查询608
附录BARM和Thumb指令编码612
B.1ARM指令集编码548
B.2Thumb指令集编码618
B.3程序状态寄存器620
附录C处理器与体系结构622
C.1ARM命名规则548
C.2内核与体系结构624
附录D指令周期定时626D.1指令周期定时表的使用627
D.2ARM7TDMI指令周期定时
628
D.3ARM9TDMI指令周期定时
630
D.4StrongARM1 指令周期定时
631
D.5ARM9E指令周期定时632
D.6ARM10E指令周期定时634
D.7Intel XScale指令周期定时636
D.8ARM11指令周期定时637
附录E建议的参考读物642
E.1ARM参考548
E.2算法参考643
E.3存储器管理与cache体系结构
(硬件综述与参考)643
E.4操作系统参考644
答 1: 关注~~~~~~~~ 答 2: 书还不错,就不知道翻译得如何!书还不错,不知道翻译得如何! 答 3: 关注……呵呵,久仰久仰 答 4: 此书什么时候能在书店买到啊 答 5: 有机会读原版!偶现在基本上拒绝读译版的书!很多只是应时之作,为了评职称所用的,个别译者甚至连业内的一些概念都不清楚!偶在这方面可是花了不少冤枉钱的! 答 6: 问一下去哪儿可以找到原班的英文书,想翻译 答 7: 看目录觉得很不错定价有点高 答 8: 还没有面世吗?北航出版社主页上没有说明啊! 答 9: 哪里有电子版的下载?rt 答 10: 呵呵楼上真有意思呵呵,书刚出来就想有电子版的了 答 11: 在印刷厂呢呵呵,谢谢大家关注,书已经送到印刷厂了,很快就会和大家见面了。——胡晓柏(hxb77@263.net) 答 12: 我想印刷厂的应该是电子版吧? 答 13: 谢谢关注顶ing 答 14: 关注中
参见:http://www.buaapress.com.cn/buaa/index.asp
谢谢大家的支持!
《ARM System Developer's Guide: Designing and Optimizing System Software》
亚马逊网站连接:http://www.amazon.com/exec/obidos/tg/detail/-/1558608745/qid=1115944913/sr=5-1/ref=cm_lm_asin/002-5778715-3890438?v=glance
中译本《ARM嵌入式系统开发——软件设计与优化》详细内容如下:
\[美\] Andrew N.Sloss
\[英\] Dominic Symes
\[美\] Chris Wright著
沈建华译
沈建华,1987年毕业于华东师范大学计算机科学系,现任华东师范大学计算机系副教授,嵌入式系统实验室主任。曾在美国、日本、意大利、瑞士等国学习和工作,2001年2月至2002年2月在加拿大维多利亚大学做访问学者。他从事嵌入式实时系统的教学和科研工作近20年,在嵌入式OS、软件设计与优化、硬件系统设计等方面有一定的研究,并积累了丰富的实践经验。近5年负责并完成国家科技部、企事业单位、及国际合作科研项目10多个。曾获“上海市高校优秀青年教师”、“上海市育才奖”等,并入选教育部第一批高校青年骨干教师培养计划。
开本:787 mm×960 mm 1/16 字数:930千字
2005年5月第1版 2005年5月20日第1次印刷
ISBN 7-81077-652-5 定价:75.00元
致中国读者
首先我们向所有中国读者问好。
很高兴能出版我们书的中文版,希望你们有许多时间来学习ARM技术。如果你是位教授,那么这本书会有助于把ARM处理器内核和重要的软件编程技术介绍给学生;如果你是位学生,那么这本书是学习ARM编程的好读物;如果你是位使用ARM核进行产品研发的工程师,那么这本书可以满足实际需要。
此书的目的是展示如何设计与优化基于ARM处理器核的系统软件。我们的目标是提供一个基础的工作参考,以便能利用它开发出许多成功的新产品。
2004年,ARM的合作伙伴生产制造了12亿片ARM处理器,ARM也推出了2个新的处理器:CortexM3 和 MPCore。CortexM3主要针对微控制器市场,而MPCore主要针对高端的消费类产品。
CortexM3改进了代码密度,减少了中断延迟,并有更低的功耗。CortexM3实现了本书第15章所提到的Thumb2指令集。MPCore是第一个ARM多处理器内核,执行基于均衡多处理器(SMP)的操作系统。MPCore提供了cache一致性,每个实现支持1~4个ARM11核,这种设计为现代消费类产品对性能和功耗的需求作了很好的平衡。ARM还引入了L2 cache控制器来改进系统的整体性能。
为了支持大量的密集数据处理,ARM引入了OptimoDE技术,把它作为一个可配置的、专用的超长指令字(VLIW)数据引擎,配合ARM处理器工作。这种数据引擎可帮助主处理器完成诸如MPEG4或H.264等复杂算法。
ARM的大学计划将继续促进在应用研究、大学生和研究生课程以及教学培训中使用ARM技术。ARM已经给那些从事片上系统(SoC)设计教学和研究的大学,授权了开发工具、仿真模型和物理IP,并与剑桥(Cambridge)、卡内基·梅隆(CarnegieMellon)、密西根(Michigan)等大学保持密切联系。
ARM的研究和开发机构正专注于改进代码密度、降低功耗、扩展多媒体功能以及提高安全性。最后,我们要对沈教授表示最深切的感谢,为他在此书中文版翻译工作中的专注与努力。
谢谢您,沈教授。
Andrew N. Sloss
Dominic Symes
Chris Wright
2005年2月
译 者 序
2004年7月,一个偶然的机会,我去北京参加美国国家半导体(NS)公司的一个颁奖活动,正巧北京航空航天大学出版社的马广云老师打电话给我,说有一本关于ARM软件设计与优化的英文原版书,各方评价都很高,是否可以帮助翻译。我看到这本原版著作后,便当即答应尽快翻译此书。这确实是本好书。
我是从2000年开始接触、使用ARM处理器的。2001年2月至2002年2月,我在加拿大维多利亚大学访学期间,对ARM体系结构进行了分析、研究,并以Cirrus Logic的EP7312和EP9312为美国一家公司做了两个嵌入式无线应用的系统设计。出于对嵌入式系统的浓厚兴趣和对ARM处理器前景的认同,近几年,我和我们实验室的其他老师、研究生一起,使用ARM处理器设计、开发了10多个应用项目、产品和一些软/硬件基础平台。软件部分包括OS移植、驱动、FAT文件系统、GUI、TCP/IP网络协议栈、WiFi(802.11b)、USB协议栈、实时音频、图像信号处理以及许多应用软件。涉及的ARM处理器芯片有Samsung的S3C44B0X,4510,2410;Atmel的AT91R40008,RM9200;Cirrus Logic的EP7312,EP9312;Philips的LPC2106,2132,2292;OKI的ML674000;Analog Device的AduC7026;Intel的Xscale PXA255等。
多年对ARM系统的研究与实践,一方面加深了我们对ARM处理器系统的理解并丰富了我们的经验;另一方面也使我们深深感到了嵌入式软件设计与优化的特殊重要性。嵌入式系统由于其硬件资源、成本的限制,以及一些实时需求,许多在PC等标准平台上的软件(包括系统软件和应用软件)都不能直接搬到一个特殊的嵌入式硬件平台上,而必须经过适当的裁剪、优化;否则就可能产生很差的效果,甚至会导致系统瘫痪。通过对软件系统的合理设计与优化,可以降低对系统硬件资源(如CPU性能、存储器容量等)的需求,也可以降低系统功耗,从而使一个不可行的系统变为可行,也可以把一个毫无竞争力的产品变得极有竞争力!这里,可以把程序的优化过程看作是一个艺术加工过程,精雕细琢,一步步把一个平庸之作变成一件艺术品,体现出其真正的价值。
当我看完这本原版书后,感觉它写出了这几年我们正在研究、摸索而尚未能整理出来的许多东西,是从软件系统的角度对ARM系统开发的一个原则性指导,也是嵌入式软件开发者从入门变为高手的一个必备指南。作者论述简洁明了,把原本一些较复杂的问题(如嵌入式OS),只用很少的篇幅就把一个基本框架说得很清楚,确有功底深厚,举重若轻之感。书中论述的一些知识、方法和技巧,也是做好一个嵌入式软件的基础。只有把许多细致的基础工作做扎实,才能聚沙成塔,编写出高效的软件,创造出具有竞争力的产品。翻译此书,希望能对目前国内32位(ARM)嵌入式系统教学、研发热潮中的广大专业技术人员有所帮助,并提升32位嵌入式系统应用的水平。
本书系统介绍了基于ARM的软件设计与优化方法,知识面较广,涉及了计算机学科的很多基础知识,包括C语言与汇编语言程序设计、编译原理、数据结构、操作系统、计算机体系结构、数值计算、数字信号处理等内容;同时也给翻译工作带来了一定的困难,许多词汇、术语若按字面上翻译,则很难确切地表达出其本意,我们主要根据其上下文内容和中文习惯,并参照其他相关的中文书籍,进行意译。如5.9节中的aligned,译成“(地址)边界对齐的”,endianness译成“字节排列方式(大/小端)”;6.2节中的profiler,译成“性能分析器”等。另外一些简单的常用词,如loadstore,在用作名词时不译,在用作动词时译成“装载存储”,如“load指令在装载数据时……”,而不译成“装载指令在装载数据时……”。关于cache写策略的writethrough和writeback,本书中分别译为“直写”和“回写”,而没有用通常所说的“写直达”和“写回”,我们认为这样更简单明了而贴近原意。还有一些专业词汇,如DSP部分的“tap(抽头)”、“biquad(双阶节)”等,首次出现时都给出译文和英文,以后简单而都能理解的一般只给出英文,特别是用作单位时,如cycles/tap和cycles/biquad等。还有ARMv5和ARMv6体系结构的一些内容,几乎找不到相关资料可参考,也没有实验平台可以验证,只能根据我们的理解进行翻译。另外,对于一些程序中的简单注释,考虑到此书并非入门级读物,以及书中已有较详细的说明,经与出版社商量,没有全部翻译。
为了尊重原著,本书有些用词可能与国内一些书不太一致,例如原著中多处出现的“processor(处理器)”,是一种广义的泛指,可能是指一个ARM内核或内核中的一部分,也可能是指一个芯片;另外在一些地方(如表2.10中),把ARM7TDMI,ARM9TDMI,ARM720T及ARM920T等都统称为“CPU 核(core)”。所以本书也不区分“内核”与“核”。请读者阅读时注意。
在翻译过程中,发现了原著中的一些错误与不妥之处,通过与原作者多次交流并得到确认,在译稿中已得到纠正。还有一些标有“译者注”的地方,是我们根据对原文的理解,结合国内的习惯用法,作的一些补充说明。
本书对许多问题作了简明、细致的阐述,论述非常客观、公正。对一个事物的介绍,总是结合其背景或环境;对一个问题的描述或改进,一般也是从正、反两方面来进行,既说明了一种技术、方法对某方面的益处,同时也指出可能对另一方面造成的负面影响,即使对ARM处理器的介绍,也并非全是褒奖之词。这种严谨、科学的辩证思维和工作作风,更是值得我们每一个人学习并应身体力行的。
全书主要由笔者翻译并校对。我的研究生张群忠、沈颖、梁丹、庄艺唐、姜宁、吴红举及杨海波等参与了部分内容的翻译和资料整理工作。我的同事续晋华老师帮助修改和审核了第8章。我的同事杨艳琴老师通读了译稿,并提出了许多修改建议。原著的3位作者Andrew N. Sloss, Dominic Symes和Chris Wright及时提供了许多帮助,Andrew N.Sloss先生还亲临我们实验室交流、指导。在此书的翻译过程中,还得到了ARM(中国)总裁谭军博士、费浙平先生,北京航空航天大学出版社马广云博士、胡晓柏编辑,深圳英蓓特信息技术有限公司徐光峰先生,广州周立功单片机发展有限公司周立功先生的热情指导和鼓励。在此,谨向他(她)们表示衷心的感谢。
我也要特别感谢我的家人——妻子戴军、女儿沈维嘉,正是由于她们的无私帮助和全力支持,使我能全身心地投入到自己所热爱的工作之中,并在短短6个月的时间里完成了此书的翻译工作。
翻译是一件很难做得完美的事。由于时间仓促及水平所限,错误及不妥之处,请各位读者批评指正,并提出宝贵意见。我也会在我们实验室的网站( www.emlab.net )上及时发布相关信息,欢迎访问并相互交流。
沈建华
2005年2月
于华东师范大学
前言
如今,嵌入式系统开发人员和片上系统设计人员越来越多地选择特定的处理器内核和配套的工具、库及现成的组件来快速开发基于微处理器的新产品。ARM在这一方面表现尤为突出。在过去的10年中,ARM体系结构已成为世界上最受欢迎的32位体系结构,在本书完成时,基于ARM的处理器已发售了超过20亿片。ARM处理器已被嵌入到各种产品——从移动电话到汽车刹车系统。全球的ARM合作伙伴和第三方供应商,在半导体和产品设计公司中迅速发展壮大,包括硬件工程师、系统设计人员和软件开发人员。但至今还没有一本书能够较好地满足基于ARM的嵌入式系统及软件开发的需要,本书将填补这一空白。
本书的目标是,从一名产品开发者的角度来描述ARM内核的操作,重点放在软件设计上。由于本书是专门写给有一些嵌入式系统开发经验而可能对ARM体系结构不熟悉的工程师的,所以不要求有以前的ARM开发经验。
为了帮助读者尽快地学以致用,书中包含了一系列ARM软件范例。它们可以被集成到商业产品中,或者作为模板以快速创建应用软件。这些范例都已编号,读者可以在Morgan Kaufmann出版社的网站上方便地找到这些源代码。对于有ARM开发经验而想要获得ARM系统最高效能的人来说,这些代码同样颇有价值。
本书的结构
本书开头部分简要介绍了ARM处理器的设计原则,说明了它与传统RISC思想的区别及其原因。第1章还介绍了基于ARM处理器的简单嵌入式系统。
第2章进一步深入到硬件,介绍了ARM处理器核,并综述了当前市场上的ARM内核。
第3章和第4章分别介绍了ARM和Thumb指令集,也为本书后面的内容打下基础;有一些关键指令的解释,包括完整的例子,因此这2章可以看作是指令集的使用指南。
通过我们在协助ARM客户工作时开发的许多例子,第5章和第6章讲述了如何编写高效的代码。第5章讲述了在ARM体系结构上编写可以被高效编译的C代码的技巧和规则。这些技巧和规则已得到了证实,并且有助于确定哪些代码应该被优化。第6章详述了编写和优化ARM汇编代码的最佳方法,这对于通过降低系统功耗和时钟频率来改善系统性能是至关重要的。
由于在许多算法中都用到一些基本操作,所以如何优化它们是很值得研究的。第7章讨论了如何针对ARM处理器优化基本操作。该章不仅提供了实现一般基本操作的优化参考,而且为想得到一种快速参考方法的使用者提供了更加复杂的数学运算的优化参考。对于想要深入研究各个实现的读者,还提供了所需的理论知识。
嵌入式音频和视频系统应用的需求正在日益增长。它们需要数字信号处理(DSP)能力,直到最近,这种处理能力一般仍是由独立的DSP芯片提供的。然而,现在ARM体系结构提供了更高的存储器带宽和快速乘累加运算,使得仅用一个ARM内核的设计就能支持这些应用。第8章研究了如何尽可能改善ARM在数字处理应用方面的性能以及怎样实现DSP算法。
异常处理是嵌入式系统的核心。高效的异常处理能够大大改善系统的性能。第9章以一系列翔实的范例介绍了异常处理和中断的理论与实践。
固件是所有嵌入式系统的重要部分。在第10章中,通过我们设计的、称为Sandstone的一个简单固件包,介绍了固件的结构和设计。本章还介绍了一些可以运行在ARM上的流行的、工业固件包。
第11章以我们设计的、称为简单小操作系统(SLOS)的一个简单嵌入式操作系统为例,示范了嵌入式操作系统的实现方法。
第12,13,14章重点关注存储系统。第12章讨论了围绕ARM内核的各种cache技术,演示了带cache的特定ARM处理器的cache控制例程。第13章讨论了存储器保护单元(MPU)。第14章讨论了存储器管理单元(MMU)。
最后,在第15章,展望了ARM体系结构的未来,重点讲述今后几年内ARM指令集的发展方向和正在实现的新技术。
附录提供了详细的指令集参考、周期定时以及特定的ARM产品。
网上的范例
如前所述,本书有大量的经过测试的实用程序,可以帮助强化有关概念和方法。它们在Morgan Kaufmann出版社的网站上http://www.mkp.com/companions/1558608745可以找到。
致谢
首先要感谢的,当然是我们的妻子——Shau Chin Symes和Yulian Yang,以及所有大力支持并容忍我们花费了大量家庭生活时间在这一项目上的亲人。
本书前后花了许多年,很多人都曾给予过鼓励和技术上的建议,我们要感谢所有这些人。写一本技术书需要很辛苦地重视大量细节问题,因此要感谢所有投入时间和精力阅读本书并给予反馈的审稿人员。在这个过程中,与出版商一起工作的审稿人员有Jim Turley(SiliconInsider);Peter Maloy(Code Sprite);Chris Larsen,Peter Harrod(ARM,Ltd.);Gary Thomas(MLB Associate);Wayne Wolf(Princeton University);Scott Runner(Qualcomm,Inc.);Nial Murphy(PanelSoft)和Dominic Sweetman(Algorithmics,Ltd.)。
要特别感谢Wilco Dijkstra,Edward Nevill和David Seal,允许我们在本书中使用一些精选的范例。还要感谢Rod Crawford,Andrew Cummins,Dave Flynn,Jamie Smith,William Ree和Anne Rooney,在整个过程中提供了帮助和建议。感谢ARM战略支持小组:Howard Ho,John Archibald,Miguel Echavarria,Robert Allen和Ian Field,阅读并提供了快速反馈。
我们还要感谢John Rayfield发起这个项目并完成了第15章。还要感谢David Brash审阅了原稿,并允许我们在本书中使用了ARMv6的一些资料。
最后,我们要感谢Morgan Kaufmann出版社,特别是Denise Penrose和Belinda Breyer在整个项目过程中的耐心和建议。
目录
第1章基于ARM的嵌入式系统1
1.1RISC设计思想2
1.2ARM设计思想3
1.3嵌入式系统的硬件5
1.3.1ARM总线技术6
1.3.2AMBA总线协议6
1.3.3存储器7
1.3.4外设9
1.4嵌入式系统的软件10
1.4.1初始化(启动)代码10
1.4.2操作系统11
1.4.3应用程序12
1.5总结12
第2章ARM处理器基础1
2.1寄存器16
2.2当前程序状态寄存器17
2.2.1处理器模式18
2.2.2分组寄存器18
2.2.3状态和指令集21
2.2.4中断屏蔽22
2.2.5条件标志22
2.2.6条件执行24
2.3流水线24
2.4异常、中断及向量表27
2.5内核扩展28
2.5.1cache和紧耦合存储器29
2.5.2存储管理30
2.5.3协处理器31
2.6体系结构的不同版本31
2.6.1命名规则32
2.6.2体系结构的发展33
2.7ARM处理器系列34
2.7.1ARM7系列35
2.7.2ARM9系列36
2.7.3ARM10系列37
2.7.4ARM11系列37
2.7.5专用处理器37
2.8总结38
第3章ARM指令集1
3.1数据处理指令42
3.1.1MOVE指令42
3.1.2桶形移位器43
3.1.3算术指令46
3.1.4算术指令使用桶形移位器
47
3.1.5逻辑指令48
3.1.6比较指令49
3.1.7乘法指令50
3.2分支指令51
3.3loadstore指令53
3.3.1单寄存器传送指令53
3.3.2单寄存器loadstore指令的
寻址方式54
3.3.3多寄存器传送指令57
3.3.4交换指令65
3.4软件中断指令66
3.5程序状态寄存器指令68
3.5.1协处理器指令69
3.5.2协处理器15(CP15)指令语法
70
3.6常量的装载71
3.7ARMv5E扩展72
3.7.1零计数指令73
3.7.2饱和算术指令73
3.7.3ARMv5E乘法指令74
3.8条件执行75
3.9总结77
第4章Thumb指令集1
4.1Thumb寄存器的使用81
4.2ARMThumb交互82
4.3其它分支指令84
4.4数据处理指令84
4.5单寄存器loadstore指令87
4.6多寄存器loadstore指令89
4.7堆栈指令90
4.8软件中断指令91
4.9总结92
第5章高效的C编程1
5.1C编译器及其优化概述94
5.2基本的C数据类型96
5.2.1局部变量类型97
5.2.2函数参数类型101
5.2.3有符号数与无符号数103
5.3C循环结构104
5.3.1固定次数的循环104
5.3.2不定次数的循环107
5.3.3循环展开108
5.4寄存器分配111
5.5函数调用113
5.6指针别名117
5.7结构体安排120
5.8位域124
5.9边界不对齐数据和字节排列方式
(大/小端)127
5.10除法131
5.10.1带余数的无符号重复除法
133
5.10.2把除转换为乘133
5.10.3除数是常数的无符号除法
136
5.10.4除数是常数的有符号除法
137
5.11浮点运算140
5.12内联函数和内嵌汇编140
5.13移植问题144
5.14总结145
第6章ARM汇编与优化1
6.1编写汇编代码148
6.2性能分析和周期计数154
6.3指令调整154
6.4寄存器分配162
6.4.1分配变量给寄存器163
6.4.2使用超过14个的局部变量
166
6.4.3最大限度地使用寄存器168
6.5条件执行172
6.6循环结构174
6.6.1减计数循环174
6.6.2展开计数循环175
6.6.3多层嵌套循环178
6.6.4其它计数循环181
6.7位操作182
6.7.1固定宽度的位域打包和解包
182
6.7.2可变宽度编码的位流打包
183
6.7.3可变宽度编码的位流解包
186
6.8高效的switch188
6.8.1在范围0≤x<N的switch
189
6.8.2基于通用变量x的switch
191
6.9边界不对齐数据的处理192
6.10总结196
第7章基本运算优化1
7.1双精度整数乘法198
7.1.1长整型乘法199
7.1.2128位结果的无符号64位
乘法200
7.1.3128位结果的有符号64位整数
乘法201
7.2整数规格化和前导0计数203
7.2.1ARMv5及以上体系结构
的整数规格化203
7.2.2在ARMv4体系结构上的
规格化204
7.2.3后缀0计数206
7.3除法208
7.3.1通过试探减法实现无符号
数除法208
7.3.2无符号整数的Newton
Raphson除法215
7.3.3无符号小数Newton
Raphson除法221
7.3.4有符号数除法228
7.4平方根229
7.4.1通过试探减法计算平方根
229
7.4.2使用NewtonRaphson迭
代计算平方根231
7.5超越函数:log,exp,sin,cos233
7.5.1以2为底的对数运算233
7.5.22的乘幂235
7.5.3三角函数236
7.6字节顺序反转和位操作239
7.6.1字节顺序反转240
7.6.2位变换240
7.6.3‘1’位计数243
7.7饱和及舍入运算244
7.7.1饱和32位数到16位245
7.7.2饱和左移245
7.7.3舍入右移245
7.7.4饱和的32位加减法245
7.7.5饱和绝对值246
7.8随机数产生246
7.9总结247
第8章数字信号处理1
8.1表示一个数字信号250
8.1.1选择一种表示方法250
8.1.2操作以定点格式存储的值
253
8.1.3定点信号的加法和减法254
8.1.4定点信号的乘法255
8.1.5定点信号的除法256
8.1.6定点信号的平方根256
8.1.7小结:数字信号的表示256
8.2基于ARM的DSP介绍258
8.2.1ARM7TDMI的DSP259
8.2.2ARM9TDMI的DSP260
8.2.3StrongARM的DSP262
8.2.4ARM9E的DSP264
8.2.5ARM10E的DSP265
8.2.6Intel Xscale的DSP267
8.3FIR滤波器269
8.4IIR滤波284
8.5离散傅里叶变换292
8.6总结304
第9章异常和中断处理1
9.1异常处理307
9.1.1ARM处理器模式及异常
307
9.1.2向量表309
9.1.3异常优先级310
9.1.4链接寄存器偏移311
9.2中断313
9.2.1分配中断313
9.2.2中断延迟314
9.2.3IRQ与FIQ异常315
9.2.4基本的中断堆栈设计与实现
317
9.3中断处理方法321
9.3.1非嵌套中断处理321
9.3.2嵌套中断处理324
9.3.3可重入中断处理330
9.3.4优先级简单中断处理334
9.3.5优先级标准中断处理340
9.3.6优先级直接中断处理344
9.3.7优先级分组中断处理347
9.3.8基于VIC PL190的中断服务
例程351
9.4总结352
第10章固件1
10.1固件和引导装载程序354
10.1.1ARM Firmware Suite
357
10.1.2Red Hat Redboot358
10.2例子:Sandstone358
10.2.1Sandstone的目录结构
359
10.2.2Sandstone的代码结构
359
10.3总结364
第11章嵌入式操作系统1
11.1基本模块366
11.2实例:简单小型操作系统SLOS
367
11.2.1SLOS目录结构368
11.2.2初始化369
11.2.3存储模型373
11.2.4中断和异常处理374
11.2.5调度程序378
11.2.6上下文切换380
11.2.7设备驱动程序框架382
11.3总结383
第12章高速缓冲存储器cache1
12.1存储层次和cache387
12.2cache结构390
12.2.1cache存储器的基本结构
391
12.2.2cache控制器的基本操作
392
12.2.3cache与主存的关系392
12.2.4组相联395
12.2.5写缓冲器399
12.2.6cache效率的衡量399
12.3cache策略400
12.3.1写策略——直写法或回写法
400
12.3.2cache行替换策略401
12.3.3cache失效时的分配策略
404
12.4协处理器15与cache405
12.5清除和清理cache406
12.5.1清除cache407
12.5.2清理cache410
12.5.3清理Dcache410
12.5.4使用路和组索引寻址清理
Dcache414
12.5.5使用testclean命令清理
Dcache417
12.5.6在Intel XScale SA110和Intel StrongARM内核中
清理Dcache418
12.5.7清理和清除部分cache
421
12.6cache锁定426
12.6.1在cache中锁定代码和数据
427
12.6.2通过增加路索引来锁定cache
428
12.6.3使用锁定位锁定cache
433
12.6.4在Intel XScale SA110中
锁定cache行437
12.7cache与软件性能440
12.8总结441
第13章存储器保护单元MPU1
13.1受保护的区域446
13.1.1重叠区域447
13.1.2背景区域448
13.2初始化MPU,cache和写缓冲器
449
13.2.1定义区域的大小和位置
450
13.2.2访问权限453
13.2.3设置区域的cache和写缓冲器
属性457
13.2.4使能区域和MPU460
13.3MPU系统示例461
13.3.1系统需求462
13.3.2使用存储器映射分配区域
463
13.3.3初始化MPU464
13.3.4初始化和配置区域465
13.3.5完成初始化MPU468
13.3.6受保护系统的上下文切换
469
13.3.7mpuSLOS470
13.4总结470
第14章存储管理单元1
14.1从MPU到MMU474
14.2虚存如何工作474
14.2.1使用页定义区域476
14.2.2多任务和MMU478
14.2.3虚存系统的存储器组织
480
14.3ARM MMU的详情482
14.4页表482
14.4.1一级页表项483
14.4.2L1转换表基地址484
14.4.3二级页表项485
14.4.4为嵌入式系统选择合适的
页大小486
14.5转换旁路缓冲器487
14.5.1单步页表搜索487
14.5.22步页表搜索488
14.5.3TLB操作489
14.5.4TLB锁定490
14.6域和存储器访问权限491
14.7cache和写缓冲器493
14.8协处理器CP15和MMU配置
494
14.9快速上下文切换扩展496
14.9.1FCSE如何使用页表和域
497
14.9.2使用FCSE的提示499
14.10示例:一个简单的虚拟存储系统
500
14.10.1第1步:定义固定的系统
软件区域501
14.10.2第2步:为每个任务定义
虚存映射502
14.10.3第3步:在物理存储器中
定位区域503
14.10.4第4步:定义和定位页表
503
14.10.5第5步:定义页表和区域
数据结构506
14.10.6第6步:初始化MMU、Cache
和写缓冲器509
14.10.7第7步:建立上下文切换程序
524
14.11MMUSLOS示例525
14.12总结525
第15章ARM体系结构的发展1
15.1ARMv6对高级DSP和SIMD
的支持528
15.1.1SIMD算法操作529
15.1.2打包指令532
15.1.3复数运算支持533
15.1.4饱和指令534
15.1.5绝对差值求和指令534
15.1.6双16位乘法指令535
15.1.7高位字乘法536
15.1.8密码算法乘法扩展537
15.2ARMv6增加的系统和多处理
器支持538
15.2.1混合大小端支持538
15.2.2异常处理538
15.2.3多处理同步原语(Multipro
cessing Synchronization
Primitives)540
15.3ARMv6的实现541
15.4ARMv6之后的未来技术543
15.4.1TrustZone543
15.4.2Thumb2543
15.5总结544
附录AARM和Thumb汇编指令1
A.1如何使用这篇附录2
A.2语法548
A.2.1可选表达式548
A.2.2寄存器548
A.2.3立即数548
A.2.4条件和标志549
A.2.5移位操作550
A.3按字母顺序列出ARM和Thumb
指令551
A.4ARM汇编速查597
A.4.1ARM汇编变量598
A.4.2ARM汇编标注599
A.4.3ARM汇编表达式600
A.4.4ARM汇编保留字601
A.5GNU汇编快速查询608
附录BARM和Thumb指令编码612
B.1ARM指令集编码548
B.2Thumb指令集编码618
B.3程序状态寄存器620
附录C处理器与体系结构622
C.1ARM命名规则548
C.2内核与体系结构624
附录D指令周期定时626D.1指令周期定时表的使用627
D.2ARM7TDMI指令周期定时
628
D.3ARM9TDMI指令周期定时
630
D.4StrongARM1 指令周期定时
631
D.5ARM9E指令周期定时632
D.6ARM10E指令周期定时634
D.7Intel XScale指令周期定时636
D.8ARM11指令周期定时637
附录E建议的参考读物642
E.1ARM参考548
E.2算法参考643
E.3存储器管理与cache体系结构
(硬件综述与参考)643
E.4操作系统参考644
答 1: 关注~~~~~~~~ 答 2: 书还不错,就不知道翻译得如何!书还不错,不知道翻译得如何! 答 3: 关注……呵呵,久仰久仰 答 4: 此书什么时候能在书店买到啊 答 5: 有机会读原版!偶现在基本上拒绝读译版的书!很多只是应时之作,为了评职称所用的,个别译者甚至连业内的一些概念都不清楚!偶在这方面可是花了不少冤枉钱的! 答 6: 问一下去哪儿可以找到原班的英文书,想翻译 答 7: 看目录觉得很不错定价有点高 答 8: 还没有面世吗?北航出版社主页上没有说明啊! 答 9: 哪里有电子版的下载?rt 答 10: 呵呵楼上真有意思呵呵,书刚出来就想有电子版的了 答 11: 在印刷厂呢呵呵,谢谢大家关注,书已经送到印刷厂了,很快就会和大家见面了。——胡晓柏(hxb77@263.net) 答 12: 我想印刷厂的应该是电子版吧? 答 13: 谢谢关注顶ing 答 14: 关注中
顶! ==============================================================
在论坛看了很多ARM相关资料,学了不少知识,最近想动手试试做个东西,MP4太复杂,想想还是使用
STM32做一个MP3播放器,请各位高手给点意见呀:
http://www.armjishu.com/bbs/viewtopic.php?id=1631&flag=102
欢迎大家给出评价与建议!
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |