最近比较关注ARM系统架构,所以专心研读了国外大牛的作品:ARM SystemDevelopers Guide-Designing And Optimizing System Software,英文版可以到如下链接下载;

http://download.csdn.net/detail/yangrendong/7735333

为了加深自己每天阅读的理解程度,就搞了个译作连载,把阅读的东西以自己的理解而翻译成中文,以便后续作为回顾的材料复习用,这个也算促进自己学习动力的方式吧。

1.1 RISC设计理念

1.2 ARM设计理念

1.2.1 嵌入式系统指令集

1.3 嵌入式系统硬件

1.3.1 ARM总线技术

1.3.2 AMBA总线协议

1.3.3 内存

1.3.4 外设

1.4 嵌入式系统软件

1.4.1 Boot代码

1.4.2 操作系统

1.4.3 应用

1.5 总结

第一章 ARM嵌入式系统

ARM处理器内核是许多成功的32位嵌入式系统的关键部分。你可能并没有意识到你自己其实就拥有一个。ARM内核广泛使用在手机,掌上型电脑,和许多其他日常便携式消费设备上。

ARM的设计师一路走来经历了1985年的第一款ARM1原型。到2001年底有超过10亿的ARM处理器被运往世界各地。ARM公司从简单和强大的原创设计中收获了他们的成功,现在仍在持续不断的技术创新。ARM核心并不仅仅是一个单核,而且包括一整套设计包括分享设计原理和指令集。

例如,其中成功的ARM内核是ARM7TDMI。它提供了高达120 Dhrystone MIPS并以高代码密度和低功耗著称,这让它成为移动嵌入式设备的理想选择。

第一章我们主要讨论ARM为创造一个灵活的嵌入式处理器而采用的RISC(精简指令集)的设计理念,然后我们介绍一个例子,讨论嵌入式设备围绕ARM处理器的典型的的硬件和软件技术。

1.1 RISC设计理念

ARM内核使用RISC架构,RISC设计的理念旨在分发简单但强大的指令,他们在高时钟频率内的一个CPU周期内执行。RISC设计理念集中在减少硬件执行指令的复杂度,因为这样可以很容易让软件比硬件有更大的灵活度和智能。所以,RISC设计让编译器变得更复杂,相反,传统的复杂指令集(CISC)更多依赖于硬件指令功能,所以CISC指令更加复杂,图1说明了这些主要的差异:

RISC理念实施基于以下4个基本准则:

1.      指令------RISC有一个精简的指令集,他们可以提供在一个CPU周期内执行的简单操作。编译器或者程序员通过结合几个简单的指令来合成复杂的操作(例如除法操作)。每个指令有固定的长度,这样管道可以在解码当前指令前预取下一条指令。相反,CISC处理器指令通常大小不定,需要更多的CPU周期来执行

2.      管道------指令被分解成很多更小的单元来处理,这样可以通过管道来并行执行。理想的情况是在一个周期内管道前进一步来获得最大吞吐量。指令可以在一个流水线级进行解码。我们没有必要通过miniprogram来执行指令,也就是CISC处理器上的微码概念。

3.      寄存器------RISC机器有很大的通过寄存器组。任何寄存器都可以包含数据或者地址。寄存器可以作为所有数据处理的快速本地内存存储。相反,CISC处理器有专门的用于特殊目的的寄存器.

4.      load-store架构------处理器处理寄存器里的一个数据,单独的load和store指令让数据在寄存器组和外部内存间传输。内存访问很耗时,所以单独的内存访问的数据处理提供了一个优势因为你可以多次使用存储在寄存器里的数据,而不需要多次去访问内存。相反,CISC设计数据处理操作可以直接操作内存。

这些设计规则允许RISC处理器变得简单,并且内核可以工作在很高的始终频率。相反,传统的CISC处理器更加复杂和工作在低始终频率。无论如何,在过去二十多年的发展过程中,RISC和CISC之间的界限已经模糊,CISC处理器中已经应用了更多RISC概念。

1.2  ARM设计理念

有很多物理特征驱动着ARM处理器的设计。首先,可移植的嵌入式系统需要各种形式的电池能量。ARM处理器被设计为较小以降低功耗和延长电池操作----这对手机和PDA应用非常必要。

高代码密度是另外一个主要的要求,因为嵌入式系统由于成本和物理大小的限制,只拥有有限的内存。高代码密度对比如手机或大容量存储设备这些拥有有限板载内存的设备的应用是有用的。

另外,嵌入式设备是价格敏感和低成本内存存储的设备。对于高容量的应用比如数码相机,设计过程中都要精打细算。使用低成本存储设备的能力可以产生显著的节省。

另一个重要的要求是要减少嵌入式处理器所占用的面积。对于一个单芯片解决方案,嵌入式处理器占用的面积越小,留给特殊外设的可用空间就越大。这个同时减少了设计和制造的开销。这反过来又降低了最终产品需要的较少分立芯片设计和制造的成本。

ARM已经集成了硬件调试技术到处理器中,这样软件工程师可以看到处理器执行代码时到底发生了什么。有了更大的透明度,软件工程师可以更快的解决问题,这能对市场变化快速做出响应并减少所有的开发成本。

ARM内核并不是纯粹的RISC架构,因为他主要的应用限制-嵌入式系统。从某种意义上来说,ARM内核的优势在于他没有完全坚持RISC的道路。在今天的系统中最关键的不是裸处理器的速度,而是整体有效的系统性能和功耗。

1.2.1嵌入式系统的指令集

Arm指令集在很多方面有别于纯粹的RISC定义,这个使得ARM指令集更加适合于嵌入式应用。

·         某些可变执行周期的指令------并不是所有的ARM指令都是单CPU周期执行的。例如,load-store-multiple指令在执行周期方面可变取决于需要转移的寄存器的数量。转移可以发生在连续的内存地址上,这可以提升性能,因为连续内存访问通常比随机访问快。代码密度也因为多寄存器传送在函数开始和结束时的常用操作功能而受到改进。

·        行内桶式移位器导致更复杂的指令—行内桶式移位器属于硬件部分,它在指令使用输入寄存器之前预处理他们。这个扩大了更多指令的容量以提高核心性能和代码密度。我们将在第二、三、四章来更详细的解释这个特性。

·        Thumb16位指令集----Arm通过增加一个16位的叫Thumb的指令集来增强处理器内核,它允许Arm内核执行16位或者32位的指令。16位的指令相对于32位的固定长度的指令提升了大概30%的代码密度。

·         条件执行----一个指令只有在特殊条件满足的情况下才会被执行。这个特性通过减少分之指令来提升了性能和代码密度。

·         增强指令----加强版的数字信号处理器 (DSP)指令被添加到标准指令集中来支持快速的16x16位的乘法操作和饱和度.这些指令允许某些情况下更快速的ARM处理器的行为,这替代了传统的处理器外加DSP的组合。

这些新增的特性让Arm处理器成为最通用的32位嵌入式处理器核心之一。许多世界上顶尖的半导体公司生产基于Arm处理器的产品。

1.3嵌入式系统硬件

嵌入式系统可以控制很多不同的设备,从生产线上小的传感器到美国航天局天空探测使用的实时系统。所有这些设备是软件和硬件组件的结合。每个组件都是为高效率而选的,而且如果适用,会被设计用于未来的扩展。

图1.2显示了一个典型的基于ARM内核的嵌入式设备。每个方块代表了一个特性或功能,之间的连线表示承载数据的总线,我们可以把上面的设备分为四个硬件部分:

§ ARM处理器控制着嵌入式设备,不同版本的ARM处理器可以适应所需的工作特性。ARM处理器包括一个内核(处理指令和控制数据的执行引擎)外加通过总线对接的周边元件,这些部分包括可以包括内存管理和缓存。

§ 控制器协调系统的重要功能块.两个常用的控制器是中断和内存控制器

§ 外围设备提供所有的对外部芯片的输入输出功能,并负责嵌入式设备的独特性。

§ 总线用于在设备的不同部分间进行通信

1.3.1 ARM 总线技术

嵌入式系统相对于x86的pc使用不同的总线技术。最普遍的PC总线技术是PCI总线,连接比如视频卡和硬盘控制器到x86处理器总线。这种技术是外部的或外部芯片(例如总线设计用来机械电连接设备到外部芯片)和内置于PC的主板上。

相反,嵌入式系统使用一个内部芯片的片上总线,这允许不同的外部设备可以同ARM内核进行通信。

有两种不同分类的设备连接到总线上,ARM处理器内核是总线控制器----一个逻辑设备可以使不同设备可以在同一个总线上间传输数据,或者附属总线----逻辑设备只能响应从总线控制器传输过来的请求。

一个总线有两个架构层,第一层是物理层覆盖电路特性和总线宽度(16,32或64位)。第二层处理协议---- 统治处理器和外围设备通信间的逻辑规则。

ARM主要是一个设计公司。他很少实现总线的电气特性,但他通常指定总线协议。

1.3.2 AMBA总线协议

高级微控制器总线架构(AMBA)在1996年推出,现在被广泛使用于ARM处理器的片上总线架构。ARM系统总线(ASB)和ARM外设总线是第一个推出的AMBA总线。后来ARM推出了另一个总线设计,叫做ARM高性能总线(AHB).通过使用AMBA,外设设计者可以在多个项目中使用相同的设计。

一个外设可以很简单可以无需重新设计接口而连接到不同处理器架构的片上系统上。因为有大量的外设是基于AMBA接口开发的,硬件设计师就可以有更多的选择经过测试和验证的外设用于设备上。对于硬件开发者来说,即插即用接口提升了可用性,也缩短了产品的上市时间。

AHB相比ASB提供更高的数据吞吐量,因为AHB是基于集中式复用总线方式,而ASB是双向总线设计。这种变化可以使得AHB总线可以运行在更高的时钟频率上,并成为第一个支持64位和128宽度的ARM总线。ARM公司以推出两个变化的AHB总线:多层AHB和AHB精简版。与原始的AHB任何时刻只允许一个总线主控是活跃的相比,多层AHB允许多个活跃的总线主控。AHB精简版是AHB总线的一个子集,仅限于一个单一的总线主控。这种总线是为那种不需要所有标准AHB总线特性的设计而开发出来的。

AHB和多层AHB在主机和从机上支持相同的协议但在互连方式上有所不同。多层AHB新的互连方式对于多处理器的系统来说是有利的。他们允许并发执行和高的吞吐率。

图1.2所示的实例设备有三个总线:AHB总线用于高性能外设,APB总线用于低性能外设和第三种总线用于外围设备,所有权归属这个设备。这种外部设备需要一个专门的桥来连接AHB总线。

1.3.3 存储器

嵌入式系统由不同形式的存储器来储存和执行代码。当你决定采用特定的存储器特性时,你需要比较价格,性能和功耗,比如层次,宽度和类型。如果存储器为保持所需的宽度,内存需要运行两次,那么内存的功率可能需要更高

1.3.3.1 层次

所有的计算机系统都有某种形式层次的存储。图1.2显示了支持外部片外存储器的设备。内部处理器由一个可选的缓存来提高存储性能。

图1.3显示了内存的权衡:最快的缓存离ARM处理器内核物理位置越近,最慢的辅助存储器离它越远。通常越接近处理器内核的储存成本也越高,容量也越小。

缓存在主存和内核之间,它一般用来加速处理器和主存之间的数据传输,缓存提供了性能上的全面提升,但是损失了可预见的执行时间。尽管缓存提升了系统的整体性能,但是它并对实时系统响应时间没有什么帮助。所以很多小型的嵌入式系统并不使用缓存来获取性能收益。

主存大些----256KB到256MB(或者更大),取决于应用---通常存储在单独的芯片上。Load和Store指令如果在快速访问的缓存里没有发现数据将访问主存。二级存储是最大和最慢形式的存储。硬盘驱动器和CD-ROM驱动器是辅助存储的例子,现在辅存大小可以从600MB到60GB。

1.3.3.2 宽度

内存宽度指每次访问存储器时返回的比特数----典型的有8位、16位、32位和64位。内存宽度对整体性能和性价比有明显的影响。

如果你有一个不带缓存的使用32位ARM指令和16位宽的内存芯片的系统,那么处理器处理每个指令需要进行两次内存存取,每次存取需要两次16位的load,这显然降低了系统的性能,但有利的是16位的内存很便宜。

相反,如果内核执行16位的thumb指令,在16位宽度的内存上将收获更好的性能。内核仅仅做一次存取操作来load一条指令,这可以获得很高性能。因此,在16位宽度的内存上使用Thumb指令既提升了性能也降低了成本。

表格1.1总结了ARM处理器上使用不同内存宽度的设备理论上的周期时间:

1.3.3.3 类型

有很多不同类型的内存。这一节我们描述一些在ARM嵌入式系统中比较流行的内存设备。

只读存储器(ROM)缺少柔性,因为出厂时就包含一个镜像而且不可以编程。ROMs大量使用在不需要更新或纠错的高容量设备上。很多设备也使用ROM来保存boot代码。

Flash ROM可以读写,但是它写入的速度很慢,你不能使用它来保持动态数据。他的主要用途是存放设备固件或长期的关机后需要保留的数据。FlashROM的擦除和写入都是软件控制的,无需二外的硬件循环请求,这样减少了制造成本。Flash ROM已经成为最受欢迎的只读存储器类型,现在已经被用做大数据或二级存储的替代。

动态随机访问存储器(DRAM)是最通用的RAM,它具有与其他类型相比,每兆字节的成本最低。DRAM是动态的----它需要存储单元刷新每隔数毫秒需要新的电子电荷。所以在使用存储器之前我们需要设置DRAM控制器

静态随机访问存储器(SRAM)比传统的DRAM更快,但是它需要更多的硅片面积。SRAM是静态的----RAM不需要刷新。因为SRAM在数据访问时不需要中断,所以SRAM的访问时间比同等的DRAM要短。它的成本比较高,它通常应用在更小的高速的任务,比如快速存储器和告诉缓存。

同步动态随机访问存储器(SDRAM)是DRAM的许多子类别之一。他可以比常规内存运行在更高的时钟速度上。SDRAM由于他的时钟本身与处理器总线同步。内部数据被从内存中取出来,送到流水线、最终到总线上。旧的DRAM是异步的,所以不有效的和SDRAM同步。

1.3.4 外设

嵌入式系统需要某些形式的外设来和外界互动。一个外设设备可以通过连接片外芯片上的设备或传感器来执行芯片输入输出功能。每个外设通常执行一个单一功能,而且可以主流在芯片上。外设从简单的串行通信设备到更复杂的802.11无线设备应有尽有。

所有的ARM外设都是内存映射过来的----变成接口都是彝族内存寻址寄存器,这些寄存器地址都是基于外设基址的一个偏移。

控制器是嵌入式系统中使用高级特性的特殊外设。两种重要的控制器是内存控制器和终端控制器。

1.3.4.1内存控制器

内存控制器连接不同类型的内存到处理器总线。开机时,内存控制器被配置到硬件中以允许内存设备是活动状态的。这些内存设备允许初始化代码被执行。有些内存设备被软件设置,例如,当使用DRAM时,你必须在使用它之前设置内存时序和刷新频率。

1.3.4.2中断控制器

当一外设或设备需要关注时,它向处理器发送一个中断。中断控制器提供了可编程的执政政策来允许软件来决定任何时刻哪个外设或设备可以中断处理器,这个是通过设置中断控制器中的特定比特位来实现的。

ARM处理器有两种类型的中断控制器:标准中断控制器和适量中断控制器(VIC).

当外部设备需要服务时,标准的中断控制器发送中断信号给处理器内核。他们可以……中断处理例程通过读取中断控制器里的设备位图寄存器来决定哪个设备需要服务。

VIC比标准中断控制器更强大因为它赋予中断优先级、简化决定哪个设备引起中断。在关联了优先级和例程地址到每个中断后,VIC仅仅认定到内核的中断信号,如果新中断的优先级高于当前处理的中断例程。依赖于这种类型,VIC不但调用标准中断异常例程,它加载VIC中的设备例程地址,或者呼叫内核直接跳转到设备例程。

1.4 嵌入式系统软件

嵌入式系统需要软件来驱动它.图1.4 显示了四个典型的软件部件请求控制嵌入式设备。

图中每个软件组件使用更高的抽象层来把代码从设备上来隔离。

初始代码是在板上执行的第一个代码,并用于特定的目标或目标组。它设置了在把控制权交给操作系统之前板子最小部分。

操作系统提供了基础设施来控制应用和管理硬件系统资源。很多嵌入式系统并不需要一个操作系统,而仅仅需要一个简单的任务调度器,可以是事件或轮训驱动。

设备驱动是图示1.4中第三组件。他们为外围硬件设备提供了一致的软件接口。

最终,例如,手机上可能有一个日志应用。有可能同一个设备上运行了多个应用,这由操作系统来控制。

软件可以从ROM或RAM中运行。固定于设备上的ROM代码(例如初始化代码)称为固件。

1.4.1 初始(BOOT)代码

初始代码(BOOT代码)把处理器从复位状态变成操作系统可以运行的状态。它通常配置内存控制器和处理器缓存并初始化一些设备。在一些简单的系统中,可能没有操作系统,取而代之的是一个简单的调度器或debug监视器。

初始化代码在把控制交给操作系统之前完成一堆管理员任务。我们可以把这些不同的任务划分为三类:初始化硬件配置、诊断和引导。

初始化硬件配置包括目标平台设置,它可以引导镜像。尽管目标平台自带了一个标准的配置,但这个配置通常需要修改已满足被引导镜像的要求。例如,存储器系统通常需要请求重组织内存图,参看Example 1.1

Example 1.1 初始或组织内存是初始化代码很重要的一部分,因为很多操作系统期望在它可以起来之前知道内存的布局。

诊断经常被嵌入到初始代码中。它的主要目地是故障识别和隔离。

引导设计加载镜像并把控制权交给它。引导程序自身可能很复杂,如果系统必须引导不同的操作系统或相同操作系统的不同版本。

引导映像是最后阶段,首先你必须先加载映像。这个涉及复制程序包括代码和数据到RAM,只复制包含volatile变量的数据到RAM。一旦启动后,系统通过修改程序指针指向映像的开始来移交控制权。

有时候为了减少镜像大小,映像是压缩过的。当加载它或者控制权交给它时它会解压缩。

图1.5显示了重组织前后的内存。这个基于ARM的嵌入式系统很常见,这可以提供内存重映射,因为它允许系统在上电时从ROM开始初始代码。初始代码然后重定义或重新映射内存,把RAM放到0x00000000地址----这是很重要的一步,因为一场矢量表就可以放到RAM中再被重新编程。我们将在2.4章节详细讨论矢量表。

1.4.2 操作系统

初始化过程准备硬件以让操作系统接过控制。操作系统管理系统资源:外围设备、内存和处理器时间。在操作系统的控制下,操作系统环境下的不同应用可以高效的使用他们。ARM处理器支持超过50种操作系统,我们可以把操作系统分为主要两种:实时操作系统(RTOSs)和平台操作系统。

RTOSs提供有保证的事件响应事件。不同的操作系统有不同的对系统响应时间的控制。硬实时应用需要有保证的响应来工作。相反,软实时应用需要好的响应时间,但是如果响应超时了,性能下降更明显。RTOSs操作系统一般没有第二个存储设备。

平台操作系统需要内存管理单元来管理大、非实时的应用,并且往往有第二个存储设备。Linux操作系统是一个典型的平台操作系统的例子。

这两种操作系统并不互斥,有平台操作系统使用ARM内核,带有内存管理单元和实时特性。ARM开发了一系列处理器内核专门针对各个类别。.

1.4.3 应用

操作系统调度应用—代码专用于处理特定任务。一个应用程序实现了任务处理;操作系统控制环境。嵌入式系统可以有一个活动应用或者几个应用同时运行。

ARM处理器被应用在多个市场,包括网络、汽车、手机和消费类电子设备,海量存储体和成像,这些方面可以发现有很多ARM应用。

例如,ARM处理器在网络应用方面的应用,比如家庭网关、高速网络通信的DSL猫和802.11无线通信。移动部分手机是ARM处理器应用最大的地方。ARM处理器也应用在大容量存储设备,比如硬件驱动器和成像产品比如喷墨打印机----成本灵敏和高容积的应用。

相反,ARM处理器没有应用在需要前言高性能方面的应用,因为这些应用倾向于低容积和高耗能,ARM不是集中于那些类型的应用设计上。

1.5 总结

纯粹的RISC旨在高性能,但是ARM使用改进的RISC设计理念,仍然目标在于好的代码密度和低功耗。嵌入式系统包含一个处理器内核,外加缓存、内存和外围设备。系统由操作系统软件来控制管理应用任务。

RISC关键的设计理念在于通过减少指令的复杂度来提升性能,使用管道来加速指令处理,在内核附近提供大量的寄存器组来存储数据,使用load-store架构。

§  ARM设计理念也采用了一些非RISC的设计理念。

§  他允许可变周期指令的执行以节省功率、面积和代码大小

§  他使用了Thumb 16位指令集来提升代码密度。

§  他提高了代码密度和性能通过条件执行指令

§  他包含了加强指令来执行数字信号处理类型的功能。

嵌入式系统包括下列硬件部分:嵌入式芯片中的ARM处理器,可编程外围设备通过内存映射的寄存器有一类特殊的外围设备叫控制器,嵌入式系统使用它配置更高功能比如内存和中断。AMBA用于把处理器和外围设备连接在一起。

嵌入式系统也包括如下软件部分:初始化代码来配置硬件到已知状态。一旦配置,操作系统可以加载并执行,操作系统提供了一个编程环境来使用硬件资源和基础设施。设备驱动给外围设备提供了一个标准接口。应用程序执行嵌入式系统特定任务的职责。

ARM嵌入式系统开发指南-设计和优化系统软件(译作连载)相关推荐

  1. ARM 嵌入式系统开发 - 软件设计与优化

    ARM 的非 RISC 特征 允许特定指令的执行周期可变 增加桶形移位器 使用 16 位 Thumb 指令 使用条件执行指令 使用增强 DSP 指令 Jazelle Jazelle 是ARM 引进的第 ...

  2. [ARM嵌入式系统开发]第一章之嵌入式系统的软硬件

    本章的最后,通过描述ARM为核心的嵌入式系统,来介绍了嵌入式系统的软件和硬件构成和结构.这里根据这部分的介绍以及其他的文章,描述下通用的嵌入式系统的软件和硬件.     首先来说下硬件,书中说,包含有 ...

  3. 嵌入式:ARM嵌入式系统开发流程概述

    文章目录 嵌入式开发的具体过程 开发流程图 嵌入式软件开发环境 交叉开发环境 远程调试结构图 嵌入式应用软件开发的基本流程 软件模拟环境 目标板与评估板 嵌入式软件开发的可移植性和可重用性 嵌入式开发 ...

  4. ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础

    注:本文资料全部来源于网络或书籍,同时加上个人理解.若有侵权,告知即删.若有错误,留言商讨. 1.寄存器: 总共有37个寄存器,最多可以有17个活动寄存器(16个数据寄存器,2个状态寄存器:CPSR和 ...

  5. [ARM嵌入式系统开发]第一章之Dhrystone

    在书的第一章开头部分,作者提到了"最成功的ARM内核之一ARM7TDMI,具有最高120 Dhrystone MIPS的性能.高的代码密度和低功耗等特性,使它成为移动嵌入式设备的最佳选择&q ...

  6. 【软考 系统架构设计师】嵌入式系统⑤ 嵌入式系统开发与设计

    >>回到总目录<< 为了不辜负已经订阅了专栏的同学们的信任,所以本专栏不会有任何的优惠活动. 另外,当订阅人数每次达到 2 n ( n > 2 ) 2^n(n>2) ...

  7. 【正点原子FPGA连载】第六章Petalinux设计流程实战摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  8. 【正点原子FPGA连载】第十六章Petalinux设计流程实战摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  9. arm板telnetd为什么运行不了_一种基于ARM的嵌入式系统开发的方案详细讲解

    背景介绍 在日益信息化的社会中,各种各样的嵌入式系统已经全面渗透到日常生活的每一个角落.嵌入式系统的功能越来越复杂,这就使得一个嵌入式系统产品从市场需求立项到方案选择.样机研制.定型量产所需要的开发费 ...

  10. 嵌入式系统开发这六点硬件设计需要细心留意

    嵌入式设计是个庞大的工程,今天就说说硬件电路设计方面的几个注意事项,首先,咱们了解下嵌入式的硬件构架.我们知道,CPU是整个系统的灵魂,所有的外围配置都与其相关联,这也突出了嵌入式设计的一个特点硬件可 ...

最新文章

  1. 以AI制作AI,当AutoML加入AI研究员内卷大潮
  2. 程序员面试系列——冒泡排序
  3. java构造函数调用其他程序的顺序_java初始化构造函数调用顺序
  4. 2018/7/9-纪中某B组题【jzoj1503,jzoj1158,jzoj1161】
  5. microsoft visual c++全家桶_Adobe 2020 MAC全家桶最新版不闪退
  6. anaconda pip 命令报错
  7. Asp.Net MVC 体验 2 持久层的构建
  8. Atitit  atiMail atiDns新特性 v2  q39
  9. 一篇关于arc下内存管理的老文章,包含各种冷门修饰符(关于内存),写的较好,mark...
  10. linux 配置 MP3 RMVB 解码器
  11. 使用函数 imnoise 对图像添加噪声
  12. 21王道计算机网络pdf百度云,王道计算机网络第五章.pdf
  13. 魅族mx4服务器无响应,魅族MX4刷机失败解决方法
  14. RGB格式图片转YUV图片
  15. Anaconda 安装python时出错:Collecting package metadata (current_repodata.json): failed
  16. 后台管理系统纯前端模板
  17. linux can总线接收数据串口打包上传_【Linux应用】CAN总线编程
  18. 2020 9 17POJ青蛙约会
  19. 【Crash】C++程序崩溃排查方法
  20. 03.24.erer-test Estado da Pilha International –Março/ 2017

热门文章

  1. 办公室专用表格大全,公司管理常用表格公司制度大全
  2. java字节码查看器_jclasslib 下载
  3. 混合效应模型和广义线性模型计算R方的函数sem.model.fits
  4. linux fstab 远程,linux下fstab文件详解
  5. 安装terrasolid模块的“setup.exe”弹窗setup.inf not found
  6. 树莓派python识别二维码_树莓派识别二维码
  7. 通过python实现网页录音的效果--思路
  8. struct termios 结构体详解
  9. julia安装源_[julia]本地离线安装package
  10. 京东官网(京东注册,京东登录,京东首页,京东购物车,京东详情页,京东列表页)