![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
3.3.3 《ARM系统开发指南:设计和优化系统软件》
文章平均质量分 88
https://download.csdn.net/download/u011721340/5963189?utm_medium=distribute.pc_relevant_download.none-task-download-2~default~keyword~Rate-2-5963189-d
vimer-hz
书是越读越薄的
展开
-
Suggested Reading
这本书虽然不仅仅关注高速缓存,但它在计算机体系结构的整体设计中详细探讨了高速缓存的作用和优化方法。这些书籍将为你提供深入了解高速缓存内存的知识,从基础概念到实际设计和优化策略。它提供了一些实用的技巧和策略,帮助读者更好地设计和优化高速缓存系统。这本书介绍了现代处理器的设计原理和技术,其中也包括对高速缓存的详细讨论。它深入探讨了超标量体系结构的性能优化和高速缓存的关键作用。这本书是经典之作,提供了对高速缓存设计的详细讨论,涵盖了高速缓存的原理、结构和性能优化等方面。翻译 2023-11-19 12:52:16 · 50 阅读 · 0 评论 -
Chapter15 The Future of the Architecture
在这些情况下,通常使用32位值,而ARMv6则添加了一些新的乘法指令,可对Q31格式的值进行操作。需要解决的问题包括便携设备的数字信号处理(DSP)和视频性能,混合大小端系统(如TCP/IP)的互操作,以及多处理环境中高效的同步。采用了标准的ARM设计理念,即计算效率非常高且功耗非常低,ARM提出了一种简单而优雅的方法,将现有的ARM 32位数据通路切割成四个8位和两个16位切片。本章介绍了ARMv6架构中的组件,这些组件是ARM引入的用于解决市场需求的,包括增强的DSP支持和多处理环境支持。翻译 2023-11-19 12:40:49 · 67 阅读 · 0 评论 -
Chapter14 Memory Management Units
在创建一个多任务嵌入式系统时,有一个简单的方法来编写、加载和运行独立的应用任务是很有意义的。许多现代嵌入式系统使用操作系统,而不是自定义专有的控制系统来简化这个过程。更先进的操作系统使用基于硬件的内存管理单元(MMU)。MMU 提供的一个关键服务是能够将任务作为独立程序在自己的私有内存空间中运行。在受 MMU 控制的操作系统下运行的任务不需要知道不相关任务的内存需求。这简化了在操作系统控制下运行的各个任务的设计要求。在第13章中,我们介绍了带有内存保护单元的处理器核心。这些核心具有一个可寻址的物理内存空翻译 2023-11-19 11:07:15 · 67 阅读 · 0 评论 -
Chapter13 Memory Protection Units
确定了区域的大小后,区域的起始地址可以是从公式计算出的大小的任何整数值倍数,或者如果您愿意,可以从第13.4表中获取。在ARM940T、ARM946E-S和ARM1026EJ-S处理器中,MPU、缓存和写缓冲区位在CP15:c1:c0中的位置相同,这使得配置MPU的启用对于这三个核心而言是相同的。然后,其他优先级较高的区域被放置在这个背景区域上,以更改定义的背景区域的一个较小子集的属性。背景区域可以将几个休眠的内存区域屏蔽起来,防止未经授权的访问,同时背景区域的另一部分在受不同区域控制下活动。翻译 2023-11-11 09:56:57 · 66 阅读 · 0 评论 -
Chapter12 Caches
缓存是位于处理器核心和主内存之间的一种小型、快速的存储器阵列,用于存储最近引用的主内存的部分内容。处理器尽可能使用缓存而不是主内存,以提高系统性能。缓存的目标是减少处理器核心由于慢速内存而产生的内存访问瓶颈。常与缓存一起使用的是写缓冲区,它是一个非常小的先进先出(FIFO)存储器,位于处理器核心和主内存之间。写缓冲区的目的是解放处理器核心和缓存存储器,使其不受写入主内存的缓慢写入时间的影响。单词“缓存”是法语,意思是“隐藏的存储空间”。当应用于ARM嵌入式系统时,这个定义非常准确。缓存存储器和写缓冲区硬翻译 2023-11-05 21:47:17 · 277 阅读 · 0 评论 -
Chapter11 Embedded Operating Systems
在接下来的阶段中,设置PCB,其中包含每个任务的状态,包括所有的ARM寄存器。需要注意的是,任务1不需要初始化,因为它是第一个要执行的任务。由于嵌入式操作系统是为特定目的而设计的,所以在历史上,嵌入式操作系统通常简单、时间受限,并且在有限的内存中运行。从示例中可以看出,修饰程序包括调用两个例程:第一个是重置定时器的eventsTickService(特定于平台的调用),第二个是调用调度器的kernelScheduler,而调度器则会进行上下文切换。在这个操作系统的实现中,实际上只使用了三个异常。翻译 2023-11-04 12:59:44 · 57 阅读 · 0 评论 -
Chapter10 Firmware
代码的第一部分计算了 sandstone_init2 过程的绝对地址,该地址在重新映射之前由 Sandstone 用于跳转到新的重新映射环境中的下一个过程。固件的主要目的之一是提供一个稳定的机制来加载和引导操作系统。从这里的代码可以看出,除了复位向量外,所有的向量都会跳转到一个唯一的虚拟处理程序——一个导致无限循环的跳转指令。除了闪存ROM和SRAM,计算机系统中还存在其他类型的内存,如动态随机访问存储器(DRAM)、扩展内存(Extended Memory)和虚拟内存(Virtual Memory)等。翻译 2023-11-01 22:47:10 · 196 阅读 · 0 评论 -
Chapter9 Exception and Interrupt Handling
中断控制器的基地址被复制到寄存器r14_irq中,并用于获取控制器中的IRQEnable寄存器并将其放入寄存器r12中。如果在中断模式下重新使能中断,并且中断例程执行了BL子程序调用指令,那么子程序的返回地址将设置在寄存器r14_irq中。为了禁用相同或更低优先级的中断,处理程序进入一个例程,首先使用寄存器r11和链接寄存器r14中的基地址计算优先级级别。根据第9.1.4节的描述,由于流水线的原因,在进入IRQ处理程序时,链接寄存器指向返回地址后四个字节,因此处理程序必须从链接寄存器减去四来补偿这个差异。翻译 2023-10-29 19:48:48 · 199 阅读 · 0 评论 -
Chapter7 Optimized Primitives
原语是一种基本操作,可以在各种不同的算法和程序中使用。例如,加法、乘法、除法和随机数生成都是原语。一些原语直接由ARM指令集支持,包括32位加法和乘法。然而,许多原语在指令中没有直接支持,我们必须编写程序来实现它们(例如,除法和随机数生成)。本章提供了常见原语的优化参考实现。前三个部分介绍了乘法和除法。第7.1节介绍了实现扩展精度乘法的原语。第7.2节介绍了规范化,这对于第7.3节中的除法算法非常有用。接下来的两节介绍了更复杂的数学运算。第7.4节讨论了平方根。第7.5节介绍了对数、指数、正弦和余弦等超翻译 2023-10-28 19:19:29 · 110 阅读 · 0 评论 -
Chapter6 Writing and Optimizing ARM Assembly Code
嵌入式软件项目通常包含几个主导系统性能的关键子例程。通过优化这些例程,您可以降低系统功耗,并减少实时操作所需的时钟速度。优化可以将一个不可行的系统变为可行的系统,或将一个竞争力不强的系统变为有竞争力的系统。如果您按照第5章中给出的规则仔细编写C代码,您将获得一个相对高效的实现。为了实现最大性能,您可以使用手写汇编语言来优化关键的例程。手动编写汇编语言使您直接控制了三种优化工具,这些工具无法通过编写C源代码显式使用:■ 指令调度:重新排列代码序列中的指令,以避免处理器停顿。由于ARM实现是流水线的,一条翻译 2023-10-25 22:28:13 · 85 阅读 · 0 评论 -
Chapter5 Efficient C Programming
本章的目的是帮助您以一种在ARM架构上编译高效的方式编写C代码。我们将通过许多小例子来展示编译器如何将C源代码转换为ARM汇编代码。一旦您了解了这个转换过程,就能够区分快速的C代码和慢速的C代码。这些技术同样适用于C++,但在这些例子中我们将专注于纯C。我们首先概述C编译器和优化,这将让您了解C编译器在优化代码时面临的问题。通过理解这些问题,您可以编写更高效的源代码,提高速度并减小代码大小。下面的小节按主题进行分组。第5.2节和第5.3节介绍了如何优化基本的C循环。这些节以数据包校验和作为简单的示例来说翻译 2023-10-06 10:33:37 · 102 阅读 · 0 评论 -
Chapter4 Introduction to the Thumb Instruction Set
有两种标准分支指令或B的变体。第二种版本去除了指令的条件部分,并将有效的分支范围扩展为有符号的11位立即数,即-2048到+2046字节之间。由于在具有16位数据总线的处理器上,Thumb性能优于ARM,但在32位数据总线上性能低于ARM,因此在内存受限的系统中使用Thumb。可以看到,跳转到Thumb的分支地址的最低位被设置为1,这将在cpsr中的T位上将状态设置为Thumb状态。由于它也被设计为编译器的目标,而不是手写汇编代码的目标,我们建议您使用高级语言(如C或C++)编写针对Thumb的代码。翻译 2023-10-03 17:22:47 · 128 阅读 · 0 评论 -
Chapter3 Introduction to the ARM Instruction Set
类似地,像LDR这样的指令具有ARMv5的扩展,但不需要新的或扩展的助记符。LDR伪指令将插入MOV或MVN指令来生成一个值(如果可能的话),或者生成一个带有PC相对地址的LDR指令,从字面常量池(嵌入在代码中的数据区域)中读取常量。例如,在ARM7上,加载多个指令需要2 + Nt个周期,其中N是要加载的寄存器数量,t是每个连续访问内存所需的周期数。编译器(例如armcc)提供了一个开关来控制在加载-存储操作中传输的寄存器的最大数量,从而限制了最大的中断延迟。在这里,N是寄存器列表中的寄存器数量。翻译 2023-10-03 14:13:17 · 157 阅读 · 0 评论 -
Chapter2 ARM Processor Fundamentals
我们将从软件开发者的角度描述ARM处理器的程序员模型,展示处理器核心的功能以及不同部分的相互作用。然后,我们将描述ARM核心体系结构的修订,包括用于标识它们的ARM核心命名规则以及ARM指令集体系结构的时间顺序变化。然而,对于实时系统来说,代码执行的可确定性至关重要,加载和存储指令或数据所需的时间必须是可预测的。要返回到用户模式,使用特殊的返回指令,指示核心从spsr_irq还原原始的cpsr,并将用户寄存器r13和r14分段。监管者模式是处理器在复位后所处的模式,通常是操作系统内核运行的模式。翻译 2023-10-02 18:36:45 · 73 阅读 · 0 评论 -
Chapter1 ARM Embedded Systems
存储器访问是昂贵的,因此将内存访问与数据处理分离提供了一个优势,因为您可以在不需要多次内存访问的情况下多次使用寄存器组中保存的数据项。ARM公司的成功基于一个简单而强大的原始设计,通过不断的技术创新,至今仍在不断改进。这种类型的技术是外部或片外的(即总线设计用于与芯片外部的设备进行机械和电气连接),并集成在个人计算机的主板中。外设设备的范围从简单的串行通信设备到更复杂的802.11无线设备不等。然而,在过去的二十年里,RISC和CISC之间的区别已经模糊,因为CISC处理器已经实现了更多的RISC概念。翻译 2023-09-19 01:20:05 · 69 阅读 · 0 评论 -
Preface
过去的10年里,ARM架构已经成为全球最普遍的32位架构,截至目前,全球已经出货超过20亿个基于ARM的处理器。然而,现在ARM架构提供了更高的内存带宽和更快的乘-累加操作,使得单个ARM核心设计能够支持这些应用。它提供了经过优化的常见原语的参考实现,以及更复杂的数学运算的参考实现,以供快速参考。第十二章讨论围绕ARM核心的各种缓存技术,演示了控制特定支持缓存的ARM处理器上缓存的例程。最后,在第十五章中,我们考虑了ARM架构的未来,重点介绍了指令集的新方向和ARM在未来几年内正在实施的新技术。翻译 2023-09-17 22:27:51 · 52 阅读 · 0 评论