自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(439)
  • 资源 (32)
  • 收藏
  • 关注

原创 v4l2-ctl基本使用方法

v4l2-ctl基本使用方法

2022-08-15 23:20:48 17903 17

原创 UML顺序图规范

1 生命线一般为虚线2 消息(1)创始消息实心圆开头,实心箭头(2)同步消息实心箭头3 控制期表示阻塞调用4 返回值5 自身消息6 创建实例虚线实心箭头,新创建的对象实例画在创建时的高度上7 销毁对象用<<destroy>>和X表示对象的销毁8 图框常见的图框操作符:alt:选择性的片段,用于表示保护信息表达的互斥逻辑。loop:用于表示保护信息为真的循环片段。loop(n)指明循环的次数。opt:当保护信息为...

2021-10-31 13:28:13 1096

原创 [Android P]OpenCamera详细分析(Camera2+Hal3)

因为工作涉及到Android Camera系统的问题,本文就整理了在Android P上讲解OpenCamera比较详细的文章,结合Andriod P源码,以架构图、UML顺序图、UML类图和关键代码走读的方式,从App层、Framework层、Hal层详细分析了OpenCamera的流程。如有分析的不对的地方,欢迎大家指正~注意:Camera系统架构采用Camera2+Hal3。参考博客:Android Camera2+HAL3架构_既不是天才,便做那疯子!-CSDN博客[A

2021-10-23 23:00:21 8403 4

原创 gdb如何从堆栈破坏的堆栈中定位问题(ucontext_t)

对于大多数堆栈破坏的情况没有有效方法,只能缩小问题代码范围,不断测试复现,找出容易复现的方式,一步步解决。但是有一种情况,如果你的堆栈破坏了,但是有ucontext_t进程上下文信息,那么是可以继续分析的!本文介绍了堆栈破坏但有ucontext_t进程上下文信息的前提下用gdb调试定位问题的过程。(1)使用带有debug信息的动态库(SDL,X11)todoCSDN文章链接(2)查看log的Stack traceSegmentation fault(Invalid ...

2021-04-05 12:21:52 2771

原创 3 vim-config软件包

vim是linux系统中的编辑工具,配置好vim可以大大提高我们的工作效率。在使用vim时我们常常需要自己配置vimrc,安装需要的插件等。这一系列的配置比较繁琐,很多人望而生畏,于是渐渐放弃vim。最近看到一个博主关于[vi/vim使用进阶]的博客,学习后用起来非常方便。但弊端是配置的插件繁多,快捷键繁多,不易记忆,一旦更换电脑环境需要重新配置。为此,我将[vi/vim使用进阶]中的vim配置做成了软件包(vim-config)托管在Github上,到了不同环境,只需要./install.sh便可一键配置

2020-12-20 18:14:24 1336 4

原创 高通QFIL刷机:高通sdm845_la2.0用QFIL软件meta_build和flat_build刷机

[1 代码准备](i)amss_standard_oem:高通源码(ii)test_device:amss_standard_oem对应的二进制文件(高通已经编译)(iii)caf:高通源码对应的谷歌源码[2 编译源码]将amss_standard_oem/LINUX/android/vendor/qcom目录下的proprietary文件夹拷贝到caf/vendor...

2018-10-25 20:23:27 21068 13

原创 OpenCamera流程详细分析(Camera1+Hal1)

以本文记录下学习sdm660 camera模块的总结:首先特别感谢https://blog.csdn.net/armwind博主的文章(一)目录一. android camera系统架构图二. opencamera(1)Bn Bp对象的理解(2)回调函数的注册,监听(3)aidl—ICameraService,hidl--ICameraDevice三. takepic...

2018-10-15 11:19:26 4362 1

翻译 Preface

这些工具通常以直观的方式呈现数据,许多工具的风格类似于早期的Unix工具,产生的输出是熟悉且常常不言自明的。虽然上述声明引起了出席新闻发布会的人们的笑声,但它总结了一个重要原则,这个原则在复杂的技术系统和地缘政治中同样适用:性能问题可能来自任何地方,包括您不知道且因此未检查的系统领域(未知未知)。对于每个读者群体来说,覆盖两种不同的操作系统提供了额外的视角,深入了解它们的特点,特别是在每个操作系统采取不同的设计路径时。技术的历史可以提供有用的见解,深化您的理解,在书中的一些地方已经提到了。

2024-04-07 23:32:11 6

翻译 Chapter5 INTERESTING CACHE TRICKS

每个缓存设计师都会在某个时候遇到由缓存设计方法引起的困难。可能是因为缓存无法包含原始设计中指定的所有最优雅的目标,或者可能存在实际约束,需要在一个领域使用离常规的策略,而现在在另一个领域存在逻辑上的后果。无论出于何种原因,所有设计师都知道几乎可以找到解决这类困境的答案,但通常需要以不同的方式思考问题。本章专门介绍了一些被各种处理器设计师用于改善特定情况下系统性能的技巧。在某些情况下,设计师利用系统划分来提高性能,在其他情况下,他们解决了由于选择了其他方法而引起的问题。这里展示的所有技巧都有点超出传统范畴,

2024-03-03 13:53:32 14

翻译 Chapter4 MAINTAINING COHERENCY IN CACHED SYSTEMS

经常引用的一项统计数据表明,夫妻间最常见的争吵原因是金钱问题。为什么这样的统计数据会出现在一本关于高速缓存设计的书中呢?因为某些金钱争论和缓存一致性问题之间存在着深刻而又务实的相似之处。让我们假设大多数金钱争议都以类似以下例子中的一种开始:“'你为什么不在支票登记册上记录当你从自动提款机取钱时的支出?现在我们反弹了三张支票!”“你在Visa账户上刷了900美元,却忘了告诉我?难怪在餐厅里当着我老板的面我的信用被拒绝了!”“那是我们准备去夏威夷的钱!”“那100美元现金到底发生了什么事情?”这些例

2024-03-03 12:49:13 10

翻译 Chapter3 CACHE MEMORIES AND RISC PROCESSORS

3.1 THE RISC CONCEPT现今的管理咨询师和商业作家告诫美国企业要抛弃古老格言和过去的老套方法,尝试不同的思维方式。这正是IBM T.J.沃森研究中心在1970年代末做的事情。在那个时候,半导体工艺的进步提供了越来越多的集成境遇,人们欢迎它作为增加CPU复杂性的手段。旧架构提供了简单的构造,例如使用简单寻址模式进行加载、存储和加法。随着更高的集成度,程序员可以提供单个指令,对基于多个内存操作符的运算对象进行乘除或执行简单级数逼近函数的子集,使用高度精密的寻址技术。这种方法很大程度上增加了代码

2024-03-03 12:34:07 13

翻译 Chapter2 HOW ARE CACHES DESIGNED?

在本章中,我们将研究缓存设计中使用的一些方法或“行业诀窍”。虽然没有特别复杂的设计技术被使用,但已经投入了大量思考来揭示显而易见的东西,典型的设计师最终将不得不记下许多针对缓存的经验法则,以便正确地进行缓存设计。2.1 THE CPU-TO-MAIN-MEMORY INTERFACE正如第一章所讨论的,CPU缓存实际上插入在CPU和系统主存储器之间。正因为如此,为了让缓存欺骗CPU,使其误以为缓存访问实际上是对主存储器的访问,并且没有其他操作,缓存必须匹配CPU和主存储器之间的接口。2.1.1 Why M

2024-03-02 12:39:25 11

原创 系统调用与系统库函数

Chatgpt]您是对的,即使在上述示例中使用了 `open`、`read` 和 `close` 系统调用,实际上编译后的程序也会链接到 C 标准库(libc)中的相应函数。[问]上述的open/read/close虽然是系统调用,但实际的linux程序编译时会使用libc.so封装的open/read/close函数,相当于还是linux应用程序先调用库函数,再调用系统调用呀?需要注意的是,直接调用系统调用可能会导致代码的可移植性下降,并且需要更多的关注和处理错误情况。

2023-12-09 18:27:32 412

翻译 Chapter1 WHAT IS A CACHE MEMORY?

1.1 CPU SPEED VS. SYSTEM SPEED问题很简单。设计师们不断努力以最具成本效益的方式发挥他们设计的最大潜力。当某个特定CPU的更快版本面世时,设计师通常会尝试通过简单地增加CPU时钟频率来提高现有设计的吞吐量。在某个点之后,系统的主存储器(有时称为后备存储器)的速度成为系统吞吐量的限制因素。这在图1.1中有所体现。X轴表示CPU时钟频率,Y轴表示系统的总吞吐量。对于这个例子,我们假设系统是计算受限的;也就是说,系统的性能受到CPU性能的限制,而不是输入/输出(I/O)设备(例如磁

2023-11-26 19:15:58 109

翻译 INTRODUCTION TO THE FIRST EDITION

由于缓存语言的独特性和技术的新颖性,一个严重的劣势就是术语处于不断变化的状态,你经常会看到在文本中使用的词汇被完全不同地使用,或者更糟的是,用不同的词来描述相同的功能。两种设备的操作原理类似,但是磁盘缓存通常是使用软件控制在动态RAM(DRAM)中实现的,而CPU缓存则以如此高的速度运行,必须使用硬件控制,并且缓存本身必须在静态RAM(SRAM)中实现。是的,有些操作,特别是创建一些更复杂的图形和重新排版文本,如果使用更好、更快的CPU和缓存的机器,速度会快得多,也不会那么令人沮丧。其实,缓存并不难理解。

2023-11-25 13:15:44 85

翻译 INTRODUCTION TO THE SECOND EDITION

不过,我选择保留最旧的一个缓存示例,在第一章中进行演示,以说明真实的缓存设计的门数并不高,而且不必回避缓存设计。最后,与我用来创建第一版的无缓存系统相反,第二版正在一台Windows 95机器上制作,该机器采用133 MHz Pentium处理器,有8KB的一级缓存和256KB的二级缓存。随着领域变得更加广泛,公司之间的交流变得更加频繁和开放,公司特定的行话被更标准化的行话所取代,人们发现自己需要发明一个新的行话之前,会先了解别人的行话。我还添加了一个新的第五章,展示了其他人是如何应对遇到的某些难题的。

2023-11-25 10:22:36 53

翻译 19 Literature

Intel:《IA-32 Intel Architecture Software Developer’s Manual》,第 1、2A、2B 和 3A 和 3B 卷。请参见 www.agner.org/optimize 和 comp.lang.asm.x86 新闻组的 FAQ 中的一些链接。包括在可从 www.intel.com 获取的 Intel C++ 编译器中。

2023-11-23 22:14:53 28

翻译 18 Optimization in embedded systems

在没有-fno-associative-math选项时,结果为0,在有-fassociative-math选项时,结果为1。例如: x*x可以优化为0. 如果x=INF,则结果将错误,因为INF-INF=NAN。-fno-math-errno: 不会为sqrt等函数设置errno的陷阱。这对于包含sqrt的分支的自动向量化是必要的。-fno-signed-zeros: 启用忽略零的符号的优化,例如x*0.0=0和x+0.0=x。

2023-11-23 22:12:59 33

翻译 17 Optimization in embedded systems

这通常属于系统编程领域,但在没有操作系统的应用程序中,这是应用程序员的工作。时钟频率可能低于标准个人计算机的百倍甚至千倍,RAM内存的数量甚至可能少于个人计算机的百万分之一。然而,如果避免使用大型图形框架、解释器、即时编译器、系统数据库以及其他在较大系统上常用的额外软件层和框架,就有可能在这些小型设备上运行相当快速的软件。如果想要计算一个具有两位小数的数字,例如,应该将其乘以100,以便表示为整数。程序员有责任确保数组足够大,可以处理包括终止零在内的字符串,并在必要时进行溢出检查(参见第105页)。

2023-11-23 21:55:08 20

翻译 16 Testing speed

一个时钟周期的长度是时钟频率的倒数,如第15页所解释的那样。如果在执行关键代码片段之前和之后读取时间戳计数器的值,那么您可以得到准确的时间消耗,即两个时钟计数之间的差异。通常的测试方法是创建一个小型的测试程序,使用适当的测试数据多次调用关键函数,并测量所需的时间。一个真实的性能测试应该包括不仅仅是一个单独的函数或热点,还应该包括包含关键函数和热点的最内层循环。偶尔,测量到的时钟计数远高于正常值。这种单元测试对于验证优化函数的功能是必要的,但不幸的是,单元测试并不能完全提供有关函数性能(速度)的全部信息。

2023-11-23 21:53:38 20

翻译 15 Metaprogramming

如果所有的输入都是已知的常量,一个好的优化编译器无论如何都会在编译时进行简单的计算,但是如果涉及到分支、循环、函数调用等更复杂的计算,很少有编译器能够在编译时进行。我认为除了简单的情况外,使用模板元编程是不明智的,因为复杂的代码本身就是一个风险因素,而验证、调试和维护此类代码的成本非常高昂,很少能够证明在性能上的收益是合理的。在C++的模板元编程中,循环被实现为递归模板。这是一种非常高效的方式来删除多余的代码,但是预处理器的功能有严重的限制,因为它在编译器之前起作用,并且只能理解最简单的表达式和运算符。

2023-11-23 21:48:08 16

翻译 14 Specific optimization topics

14.1 Use lookup tables如果一个常量表被缓存,那么从这个表中读取一个值是非常快的。通常从一级缓存中读取表只需要几个时钟周期。我们可以利用这个事实,如果一个函数的输入只有有限数量的情况,那么可以通过表查找来代替函数调用。以整数阶乘函数 (n!) 为例。它只允许输入区间 [0, 12] 中的整数。更大的输入会导致溢出,负数输入则产生无穷大。阶乘的典型实现如下:// Example 14.1aint factorial (int n) { // n!int i, f = 1;f

2023-11-22 23:04:35 21

翻译 13 Making critical code in multiple versions for different instruction sets

微处理器生产商不断向指令集添加新指令。这些新指令可以加快特定类型的代码执行速度。指令集中最重要的添加是第12章中提到的向量操作。如果代码针对特定的指令集进行编译,那么它将与支持该指令集或任何更高指令集的所有CPU兼容,但与早期的CPU不兼容。向后兼容的指令集序列如下所示:在手册4:“指令表”中提供了对指令集更详细的解释。根据第117页的说明,使用AVX或更高版本编译的代码与未使用AVX编译的代码存在一定的限制。使用最新的指令集的一个缺点是与旧微处理器的兼容性丧失。这个困境可以通过为不同的CPU制

2023-11-22 21:09:04 21

翻译 12 Using vector operations

使用长向量库的缺点是,如果你正在执行一个序列的计算,那么你必须在调用下一个步骤的函数之前将每个步骤的中间结果存储在一个临时数组中。short int的宽度为16位,而int的宽度为32位,因此,一个向量可以容纳8个short int类型的数字,而只能容纳4个int类型的数字。在AVX之前的指令集中,高效的向量操作要求数组的地址可被16整除。SSE2是向量类库支持的最低指令集,SSE4.1在select函数中具有优势,AVX2指令集具有更大的向量寄存器优势,而AVX512则具有更大的向量和更高效的分支操作。

2023-11-21 22:34:42 54

翻译 11 Out of order execution

最重要的是避免长的依赖链。它们可以检测到在示例11.3的循环的一个迭代中,寄存器temp的值与前一次迭代中的值无关。当前的CPU通常拥有一个或两个浮点加法单元,并且这些单元是流水线处理的,就像之前解释的那样,因此它可以在前一个加法完成之前启动新的加法操作。例如,在示例11.2b中,如果列表中的元素数目是奇数,那么我们需要在循环外部添加最后一个元素,或者在列表中添加一个额外的虚拟元素,并将该额外元素置零。一个迭代的计算中,除了循环计数器之外,不应该依赖于上一次迭代的结果(如果是整数,则计算速度很快)。

2023-11-21 22:25:49 23

翻译 10 Multithreading

在此,功能分解意味着不同的线程执行不同类型的工作。重要的是,用户界面不在同一个线程中作为非常耗时的任务,因为这将导致令人恼人的长而不规则的响应时间。例如,如果多个线程共享同一个队列、列表、数据库或其他数据结构,则可以考虑为每个线程提供自己的数据结构,然后在所有线程完成耗时的数据处理后将这些数据结构合并。缺点是如果线程使用不同的内存区域,缓存将被填满,并且如果线程对相同的内存区域进行写操作,就会发生缓存争用。在数据分解的情况下,最好没有更多具有相同优先级的线程,而是等于系统中可用的核心或逻辑处理器的数量。

2023-11-21 22:22:27 24

翻译 9 Optimizing memory access

9.1 Caching of code and data缓存是计算机中主内存的代理。这个代理比主内存小而且更接近CPU,因此访问速度更快。为了实现对最常用数据的最快访问,可能会有两个或三个级别的缓存。CPU的速度比RAM内存快得多。因此,高效的缓存对于系统性能非常重要。9.2 Cache organization如果您正在编写具有非顺序访问和需要避免缓存争用的大型数据结构的程序,了解缓存的组织方式是非常有用的。如果您满意更加经验性的准则,可以跳过本节。大多数缓存被组织为行和组。让我通过一个例子来解释。我

2023-11-21 22:20:26 21

翻译 8 Optimizations in the compiler

8.1 How compilers optimize现代编译器可以对代码进行许多修改以提高性能。了解编译器可以做什么和不能做什么对程序员很有用。下面的章节描述了一些编译器优化,这些优化对程序员来说是相关的。Function inlining编译器可以通过被调用函数的函数体来替代函数调用。例如:// Example 8.1afloat square (float a) {return a * a;}float parabola (float x) {return square(x) + 1.

2023-11-20 23:10:41 30

翻译 7 The efficiency of different C++ constructs

大多数程序员对程序代码如何转换为机器代码以及微处理器如何处理这些代码几乎没有了解。例如,许多程序员不知道双精度计算与单精度计算的速度是一样快的。谁会知道模板类比多态类更高效呢?本章旨在解释不同C++语言元素的相对效率,以帮助程序员选择最高效的替代方案。其他手册系列中的其他卷进一步解释了理论背景。7.1 Different kinds of variable storage根据在C++程序中的声明方式,变量和对象存储在内存的不同部分。这对数据缓存的效率有影响(参见第91页)。如果数据在内存中随机散布,数据

2023-11-20 00:03:48 33

翻译 6 Development process

在规划阶段进行对数据结构、数据流和算法的全面分析是很好的,以预测哪些资源最为关键。然而,在早期规划阶段可能存在许多未知因素,很难获得对问题的详细概述。在复杂的情况下,完全理解可能仅在开发过程的后期阶段才能实现。在这种情况下,你可以将软件开发视为一个学习过程,主要的反馈来自测试和编程问题。由于大多数开发方法都是增量或迭代的,因此重要的是为每个中间版本保存备份副本的策略。一些软件开发模型具有严格的形式化要求,在软件的逻辑架构中需要多层抽象。将软件分割成过多独立的抽象层是降低性能的常见原因。

2023-11-19 23:37:26 26

翻译 5 Choosing the optimal algorithm

"英特尔数学核心库"包含了许多常见的数学计算函数,包括线性代数和统计学,而"英特尔性能基元"库则包含了许多音频和视频处理、信号处理、数据压缩和加密的函数(www.intel.com)。哈希表可以大幅提高在非常大的数据库中的搜索时间,但对于那些列表非常小,二分查找甚至线性查找就足够快的情况下,使用哈希表是没有必要的。在某些情况下,你可能需要测试多个不同的算法,以找到在典型的测试数据集上表现最好的算法。你需要参考关于算法和数据结构的通用文献,以了解标准任务(如排序和搜索)的算法,或者更复杂数学任务的专门文献。

2023-11-19 23:35:34 23

翻译 4 Performance and usability

兼容性问题:所有的软件都应该在不同的平台、不同的屏幕分辨率、不同的系统色彩设置和不同的用户访问权限上进行测试。- 安全性:对具有网络访问权限的软件的漏洞攻击和其他滥用可能对许多用户造成极大的损失。- 认真对待用户反馈:用户的投诉应该被视为关于错误、兼容性问题、易用性问题和期望的新功能的宝贵信息来源。这是一份列举了一些让软件用户感到沮丧和浪费时间的典型问题,以及软件开发人员应该注意的重要的易用性问题的清单。- 后台服务:许多在后台运行的服务对用户来说是不必要的,也是资源的浪费。

2023-11-19 23:32:00 18

翻译 3 Finding the biggest time consumers

如果计算机上安装了许多这样的程序,启动时间可能需要几分钟,这完全浪费了用户的时间。此外,可以在程序的最重要或关键部分之前和之后读取时间,以测量每个部分所需的时间。除法需要更长的时间。如果程序中所有数据的总大小大于二级缓存,并且数据在内存中分散或以非连续的方式访问,那么内存访问很可能是程序中最耗时的部分。在时间测量期间,您可能需要将线程固定到特定的CPU核心上,以避免这种情况发生(在Windows中,使用SetThreadAffinityMask,在Linux中使用sched_setaffinity)。

2023-11-19 23:29:06 22

翻译 2 Choosing the optimal platform

最快的执行无疑是通过完全编译的代码实现的。针对此问题有几种可能的解决方法:(1) 在溢出发生之前检查溢出,(2) 使用无符号整数-它们保证会环绕回来,(3) 使用选项-ftrapv捕获整数溢出,但这样效率极低,(4) 使用选项-Wstrict-overflow=2获得此类优化的编译器警告,或者(5) 使用选项-fwrapv或-fno-strict-overflow使溢出行为具有明确定义。然而,通过良好优化的软件设计,即使在这些小型设备上,许多应用程序也可以实现良好的性能,正如第173页所讨论的那样。

2023-11-19 23:22:10 22

翻译 1 Introduction

在过去的几十年里,尽管微处理器性能呈指数级增长,但令人沮丧的长响应时间的软件产品仍然存在,这是一个悖论。这种编写风格的转变原因在于软件项目变得更加庞大和复杂,对软件开发成本的关注增加,以及计算机性能的提升。首先和首要的是,结构化软件开发的优先级高,而程序效率的优先级低,这体现在选择编程语言和接口框架上。在这种情况下,建议软件开发人员改进软件,而不是依赖于越来越快的微处理器:避免使用最浪费资源的软件工具和框架,并避免功能膨胀。此外,应小心注意相对较原始的编程风格可能存在的问题,并考虑使用经济高效的编程构造。

2023-11-19 23:16:25 17

翻译 Suggested Reading

这本书虽然不仅仅关注高速缓存,但它在计算机体系结构的整体设计中详细探讨了高速缓存的作用和优化方法。这些书籍将为你提供深入了解高速缓存内存的知识,从基础概念到实际设计和优化策略。它提供了一些实用的技巧和策略,帮助读者更好地设计和优化高速缓存系统。这本书介绍了现代处理器的设计原理和技术,其中也包括对高速缓存的详细讨论。它深入探讨了超标量体系结构的性能优化和高速缓存的关键作用。这本书是经典之作,提供了对高速缓存设计的详细讨论,涵盖了高速缓存的原理、结构和性能优化等方面。

2023-11-19 12:52:16 35

翻译 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 58

翻译 Chapter14 Memory Management Units

在创建一个多任务嵌入式系统时,有一个简单的方法来编写、加载和运行独立的应用任务是很有意义的。许多现代嵌入式系统使用操作系统,而不是自定义专有的控制系统来简化这个过程。更先进的操作系统使用基于硬件的内存管理单元(MMU)。MMU 提供的一个关键服务是能够将任务作为独立程序在自己的私有内存空间中运行。在受 MMU 控制的操作系统下运行的任务不需要知道不相关任务的内存需求。这简化了在操作系统控制下运行的各个任务的设计要求。在第13章中,我们介绍了带有内存保护单元的处理器核心。这些核心具有一个可寻址的物理内存空

2023-11-19 11:07:15 53

翻译 Chapter13 Memory Protection Units

确定了区域的大小后,区域的起始地址可以是从公式计算出的大小的任何整数值倍数,或者如果您愿意,可以从第13.4表中获取。在ARM940T、ARM946E-S和ARM1026EJ-S处理器中,MPU、缓存和写缓冲区位在CP15:c1:c0中的位置相同,这使得配置MPU的启用对于这三个核心而言是相同的。然后,其他优先级较高的区域被放置在这个背景区域上,以更改定义的背景区域的一个较小子集的属性。背景区域可以将几个休眠的内存区域屏蔽起来,防止未经授权的访问,同时背景区域的另一部分在受不同区域控制下活动。

2023-11-11 09:56:57 43

翻译 Chapter12 Caches

缓存是位于处理器核心和主内存之间的一种小型、快速的存储器阵列,用于存储最近引用的主内存的部分内容。处理器尽可能使用缓存而不是主内存,以提高系统性能。缓存的目标是减少处理器核心由于慢速内存而产生的内存访问瓶颈。常与缓存一起使用的是写缓冲区,它是一个非常小的先进先出(FIFO)存储器,位于处理器核心和主内存之间。写缓冲区的目的是解放处理器核心和缓存存储器,使其不受写入主内存的缓慢写入时间的影响。单词“缓存”是法语,意思是“隐藏的存储空间”。当应用于ARM嵌入式系统时,这个定义非常准确。缓存存储器和写缓冲区硬

2023-11-05 21:47:17 126

Performance Analysis and Tuning on Modern CPUs

Performance Analysis and Tuning on Modern CPUs

2024-01-12

Linux Media Documentation

Linux Media Documentation

2023-04-29

StarUML软件,可离线画UML图

StarUML软件,可离线画UML图

2022-03-13

platform-tools_r31.0.3-windows-systrace.rar

android sdk systrace工具

2022-01-18

FaststoneImageViewer.zip

imageview图像对比软件

2022-01-18

Video for Linux Two API Specification.rar

Video for Linux Two API Specification

2022-01-18

imageViewerV1.00.exe

查看camera raw image的软件

2022-01-18

YuvViewer.exe

查看yuv格式图像的软件

2022-01-18

蓝牙核心规范_v5.3.rar

蓝牙核心规范_v5.3.rar

2022-01-07

AudioPolicy.svg

AudioPolicy.svg UML顺序图

2021-06-12

AudioFlinger.svg

AudioFlinger.svg UML顺序图

2021-06-12

AudioTrack.svg

AudioTrack.svg UML顺序图

2021-06-12

start_kernel.xmind

start_kernel流程图 linux2.6 内核支持两种格式的 initrd,一种是 image-initrd,其核心文件就是 /linuxrc。另外一种是cpio-initrd,使用 cpio 工具生成,其核心文件不再是 /linuxrc,而是 /init。尽管 linux2.6 内核对 cpio-initrd和 image-initrd 这两种格式的 initrd 均支持,但对其处理流程有着显著的区别.

2020-02-15

start_kernel.xmind

start_kernel流程图 linux2.6 内核支持两种格式的 initrd,一种是 image-initrd,其核心文件就是 /linuxrc。另外一种是cpio-initrd,使用 cpio 工具生成,其核心文件不再是 /linuxrc,而是 /init。尽管 linux2.6 内核对 cpio-initrd和 image-initrd 这两种格式的 initrd 均支持,但对其处理流程有着显著的区别.

2020-02-05

JNI函数接口大全工程实例.zip

JNI函数接口大全博客对应资源: 基于JNI函数接口的常用用法整理了AndroidStudio工程实例,便于大家学习和记忆。 代码是基于参考资料[1]中第十三章"JNI Functions"整理的,TestCode涵盖的用法见博客。

2019-08-26

Intel Media SDK 环境搭建笔记

客户端 Intel Media SDK 环境在VS2015下的搭建,放在CSDN自己备忘

2017-02-20

CMake中文手册

本文是CMake官方文档CMake Tutorial (http://www.cmake.org/cmake/help/cmake_tutorial.html) 的翻译。通过一个样例工程从简单到复杂的完善过程,文档介绍了CMake主要模块(cmake, ctest, cpack)的功能和使用环境;从中可以一窥cmake的大体形貌。

2015-12-14

sip-4.16.6

sip-4.16.6 软件,需要的下载~

2015-12-13

Qt及Qt Quick开发实战精解

对应着《QtCreator快速入门》的5个例子

2015-12-13

《Qt Creator快速入门》代码

《Qt Creator快速入门》这本书的代码

2015-12-13

QGIS Python Programming Cookbook

Over 140 recipes to help you turn QGIS from a desktop GIS tool into a powerful automated geospatial framework

2015-12-13

Python Geospatial Development

Build a complete and sophisticated mapping application from scratch using Python tools for GIS development

2015-12-13

Learning QGIS 2.0

Use QGIS to create great maps and perform all the geoprocessing tasks you need

2015-12-13

Building Mapping Applications with QGIS

Create your own sophisticated applications to analyze and display geospatial information using QGIS and Python

2015-12-13

PyQGIS developer cookbook_2.8

PyQGIS developer cookbook_2.8 是release2.8的

2015-12-13

qgis2.10.0编译工具包

qgis2.10.0编译工具包,包含cmake,osgeo4w等

2015-09-04

Overview of (HEVC)翻译版

Overview of the High Efficiency Video Coding (HEVC) Standard翻译版

2015-07-28

High efficiency video coding (HEVC) text specification draft 8

High efficiency video coding (HEVC) text specification draft 8

2015-07-28

face_final2

人脸检测代码优化(2),TQ210人脸检测代码优化

2014-05-27

face_final

人脸检测优化代码(1),在TQ210开发板跑通

2014-05-27

稀疏表示 人脸识别

很好运行,界面很漂亮 GUI Matlab

2014-05-20

Linux命令大全,工具类的帮助文档。

Linux命令大全,工具类的帮助文档。

2013-11-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除