文档库 最新最全的文档下载
当前位置:文档库 › ARM开发工程师入门宝典.

ARM开发工程师入门宝典.

ARM开发工程师入门宝典.
ARM开发工程师入门宝典.

获取更多权威电子书请登录

ARM嵌入式系统开发综述

ARM开发工程师入门宝典

获取更多权威电子书请登录

前言

嵌入式系统通常是以具体应用为中心,以处理器为核心且面向实际应用的软硬件系统,其硬件是整个嵌入式系统运行的基础和平台,提供了软件运行所需的物理平台和通信接口;而嵌入式系统的软件一般包括操作系统和应用软件,它们是整个系统的控制核心,提供人机交互的信息等。所以,嵌入式系统的开发通常包括硬件和软件两部分的开发,硬件部分主要包括选择合适的MCU或者SOC器件、存储器类型、通讯接口及I/O、电源及其他的辅助设备等;软件部分主要涉及OS porting和应用程序的开发等,与此同时,软件中断调试和实时调试、代码的优化、可移植性/可重用以及软件固化等也是嵌入式软件开发的关键。

嵌入式系统开发的每一个环节都可以独立地展开进行详细的阐述,而本文的出发点主要是为嵌入式开发的初学者者提供一个流程参考。因为对于初学者在面对一个嵌入式开发项目的时候,往往面临着诸多困难,如选择什么样的开发平台?什么样的器件类型?在进行编译时怎样实现代码优化?开发工具该如何选择和使用?在进行程序调试时应该注意那些问题以及选择什么样的嵌入式OS等等。希望通过本文,能帮助初学者了解有关ARM嵌入式系统开发流程。

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

2 / 28

获取更多权威电子书请登录

目录

前言 (2)

1 嵌入式开发平台 (4)

1.1 ARM的开发平台: (4)

1.2 器件选型 (7)

2 工具选择 (11)

3 编译和连接 (13)

3.1 RVCT的优化级别与优化方向 (16)

3.2 Multifile compilation (21)

3.3调试 (22)

4 操作系统 (23)

4.1 哪里可以得到os 软件包 (Open Source and Linux Kernel) (25)

4.2 安装镜像 (26)

4.3 交叉编译 (26)

总结 (27)

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

3 / 28

获取更多权威电子书请登录

1 嵌入式开发平台

通常嵌入式开发的平台主要包括基于SoC或MCU开发板,板上提供常用的外设、接口和其他功能模块,开发者一般根据自己的应用需要选择适合自己板级开发平台。在这样的平台上开发者可以进行硬件的扩展,操作系统移植和应用软件的开发、调试及固化,并最终形成自己的产品推向市场。但是基于该平台的软件开发工作往往需要等到硬件平台完成后才能开展,这显然不利于缩短TTM (Time to Market),同时调试的过程也是需要反复迭代和修改设计的过程,因此硬件方案的变动在所难免。因此在系统方案没有最终定型前,急于搭建硬件平台不仅费时费力,而且也会造成系统开发成本的提高。因此在进行方案设计的时候,利用CPU或者其他外设的模型进行早期的评估是非常必要的。

1.1 ARM的开发平台:

! ARMulator仿真平台

这是一套最基础的ARM指令集仿真器,内嵌于ADS和RVDS中,是每一位ARM开发者的很好的起点。ARMulator可以模拟执行开发人员编写的C或汇编程序,支持源代码调试,帮助开发者确定代码编写的正确性。另一方面,ARMulator还能大致统计出,诸如:代码执行周期数,Cache命中率,存储器访问等利于我们优化代码的信息。但ARMulator是基于CPU的模拟,缺点在于比较难于模拟整个芯片系统的行为。

! RealView Integrator-CP平台

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

4 / 28

获取更多权威电子书请登录

https://www.wendangku.net/doc/af8462446.html,/products/DevTools/IntegratorFamily.html

RealView Integrator-CP平台(RealView Integrator Compact Platform)可以整合Core Module。Core Module FPGA 还整合了ARM PrimeCell 系列周边器件和内存控制器,包括LCD,MMC卡,音频解码,以及客户自己开发AHB接口器件。! Versatile PB/AB平台

https://www.wendangku.net/doc/af8462446.html,/products/DevTools/VersatileFamily.html

Versatile Platform Baseboard(Versatile PB)是一个可以开发软硬件的PCB平台,可以用LogicTile,AnalyzerTile进行扩展,用来连接用户开发的器件,逻辑分析仪等。而Versatile Application Baseboard(Versatile AB)主要区别是硬件扩展功能有限,因而主要用来进行软件应用开发。

! Emulation Baseboard(EB)

https://www.wendangku.net/doc/af8462446.html,/products/DevTools/EB.html

EB平台有一块相对大的FPGA(Xilinx Virtex2 XC2V6000)可以放下用户设计的周边器件,EB可以通过CoreTile 和LogicTile进行扩展,使用户做原型验证更加方便。

! ESL虚拟平台

https://www.wendangku.net/doc/af8462446.html,/products/DevTools/RealViewCREATE_Family.html

ARM ESL虚拟平台利用SystemC模型构建整个SoC系统,可以基于两种模型构建:时钟精确型(CA)和时钟近似型(CX),CA模型提供了和实际硬件时钟节拍一直的精确度,利用ESL SoC Designer工具在ESL CA模型构建虚拟

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

5 / 28

获取更多权威电子书请登录

仿真平台上,SoC硬件工程师利用ESL工具提供的强大的诸如Core运行状态监视、Bus Profiling、Cache工作状态和Memory Mapping等可视化插件对系统性能观测和分析,定位系统性能的瓶颈,实现硬件的性能优化和功能划分。

此外,对于嵌入式软件开发工程师而言,ESL虚拟平台带来的最大好处是让软件开发在更早的阶段开展,而不必等到在硬件平台上进行此工作。这样以来软硬件开发工作可以并行提高,缩短产品上市时间,软硬件的协同开发还可以尽早发现系统bug,降低开发风险和成本。同时该虚拟平台还提供了ARM软件开发调试工具接口同步进行软件调试,在ESL虚拟平台上实现软硬件的协同仿真,可以实现优化软件的目的。

从图1看,传统流程中容易引起反复的环节,而对引入ESL的开发流程,可将诸如驱动开发调试等,提前放置到虚拟开发平台上进行,实现系统设计的优化、

缩短开发周期等。而且仿真环境所能提供的调试手段,是FPGA平台所无法比拟的。

图1 传统和引入ESL工具的SoC开发流程

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

6 / 28

获取更多权威电子书请登录

! RTSM

https://www.wendangku.net/doc/af8462446.html,/products/DevTools/RealTimeSystemModel1176.html

RTSM(实时系统模型)是对整个芯片系统在指令集层面上的仿真,它能提供快速、准确的指令仿真,以及与RealView Debugger的无缝连接。大型应用程序的开发可以使用 RTSM模拟技术来完成。 RTSM模拟包括LCD显示器、键盘和鼠标等外设的仿真。不到5s,就可以利用PC在ARM处理器上对OS的启动过程进行模拟,用户可以在ARM提供的RTSM上进行快速的软件仿真。这是OEM在开发软件系统时成本最低的方法。想象一下,芯片公司不用等到芯片生产出来,也不用把缓慢的FPGA板交给方案厂商或OEM;只需要将整个芯片的模型交付,下游厂家就可以尽早尽快地将软件方案开发完毕。最终产品几乎可以从芯片生产出来就准备上市。

1.2 器件选型

器件的选择归根结底是为嵌入式系统选择合适的处理器芯片。ARM处理器是最常见的嵌入式处理器之一,它以低功耗、低成本和高性能而深受业界的青睐。而且ARM是目前产业中资源最为广泛的嵌入式处理器,基于广大的ARM合作伙伴计划,开发者可以在这个联盟里寻求到各种自己意想不到的帮助。从图2给出

了常见的ARM处理器的架构和支持的操作系统。目前在业内广为人知的ARM 处理器主要有ARM7系列和ARM9系列,同时为了关注今后嵌入式系统的发展,也有必要了解一下最新的ARM11和ARM Cotex系列处理器。

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

7 / 28

获取更多权威电子书请登录

图2 ARM体系结构

ARM7系列

ARM7TDMI是ARM7系列中使用最广泛的,它是从最早实现32位地址空间编程模式的ARM6内核发展而来的,并增加了64位乘法指令,支持片上调试、16位Thumb指令集和EmbeddedICE观察点硬件。ARM7TDMI属于ARM v4体系结构,采用冯诺伊曼结构,3级流水处理,平均0.9DMIPs/Mhz性能。不过

ARM7TDMI没有MMU(Memory Management Unit)和Cache,所以仅支持那些不需要MMU和Cahce的小型实时操作系统,如VxWorks、uC/OS-II和uLinux等RTOS。其他的ARM7系列内核还有ARM720T和ARM7E-S等。

ARM9系列

ARM9TDMI相比ARM7TDMI,将流水级数提高到5级从而增加了处理器的

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

8 / 28

获取更多权威电子书请登录

时钟频率,并使用指令和数据存储器分开的哈佛结构以改善CPI和提高处理器性能,平均可达1.1DMIPs/Mhz,但是ARM9TDMI仍属于ARM v4T体系结构。在ARM9TDMI基础上又有ARM920T、ARM940T和ARM922T,其中ARM940T增加了MPU(Memory Protect Unit)和Cache;ARM920T和ARM922T加入了MMU、Cache和ETM9(方便进行CPU实时trace),从而更好的支持象Linux 和WinCE这样的多线程、多任务操作系统。

ARM9E系列

ARM9E系列属于ARM v5TE,在ARM9TDMI的基础上增加了DSP扩展指令,是可综合内核,主要有ARM968E-S、ARM966E-S、ARM946E-S和

ARM926EJ-S(v5TEJ指令体系,增加了Java指令扩展),其中ARM926EJ-S是最具代表性的。通过DSP和Java的指令扩展,可获得70%的DSP处理能力和8x 的Java处理性能提升。另外分开的指令和数据Cache结构进一步提升了软件性能;指令和数据TCM(Tightly Couple Memory:紧耦合存储器)接口支持零等待访问存储器;双AMBA AHB总线接口等。ARM926EJ-S可达250Mhz以上的处理速度,很好地支持Symbian OS、Linux、Windows CE和Palm OS等主流操作系统。

ARM11系列

ARM11系列主要有ARM1136、ARM1156、ARM1176和ARM11 MP-Core等,它们都是v6体系结构,相比v5系列增加了SIMD多媒体指令,获得1.75x多媒体处理能力的提升。另外,除了ARM1136外,其他的处理器都支持AMBA 3.0-AXI总线。ARM11系列内核最高的处理速度可达500Mhz以上(其中90nm

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

9 / 28

获取更多权威电子书请登录

工艺下,ARM1176可达到

750Mhz)以及600DMIPS的性能,请参考和图3相关描述。

图3 ARM11系列内核

基于ARMv6架构的ARM11系列处理器是根据下一代的消费类电子、无线设备、网络应用和汽车电子产品等需求而制定的。其的媒体处理能力和低功耗特点

使它特别适合于无线和消费类电子产品;其高数据吞吐量和高性能的结合非常适合网络处理应用;另外,在实时性能和浮点处理等方面ARM11可以满足汽车电子应用的需求。

ARM Cotex系列

Cortex系列是ARM公司目前最新内核系列,属于v7架构,主要有

Cortex-A8、Cortex-R4、Cortex-M3和Cortex-M1等处理器,其中A8是面向高性能的应用处理器,最高可达1Ghz的处理速度,更好的支持多媒体及其他高性能要求,最高可达2000DMIPS;R4主要面向嵌入式实时应用领域(Real-Time),7级流水结构,相对于上代ARM1156内核,R4在性能、功耗和面积(PPA:Performance,Power and Area)取得更好的平衡,>1.5DMIPS/Mhz和高于400Mhz 的处理速度。而M3主要是面向低成本和高性能的MCU应用领域,相比

ARM7TDMI,M3面积更小,功耗更低,性能更高。Cortex-M3处理器的核心

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

10 / 28

获取更多权威电子书请登录

是基于哈佛架构的3级流水线内核,该内核集成了分支预测,单周期乘法,硬件除法等众多功能强大的特性,使其在Dhrystone benchmark上具有出色的表现(1.25 DMIPS/MHz)。根据Dhrystone benchmark的测评结果,采用新的Thumb?-2指令集架构的Cortex-M3处理器,与执行Thumb指令的

ARM7TDMI-S?处理器相比,每兆赫的效率提高了70%,与执行ARM指令的ARM7TDMI-S处理器相比,效率提高了35%。

目前已经有Cortex系列内嵌的产品问世,如TI公司推出的基于Cortex-A8内核的OMAP3430,TI、ST和Luminary也推出了基于Cortex-M3内核的低成本高性能32位MCU,更多详情请登陆这些公司的主页查询。

2 工具选择

根据开发目标平台的不同,ARM提供不同的工具解决方案。

MDK-ARM

RealView Microcontroller Development Kit(MDK) 支持基于ARM7,

ARM9,Cortex-M3微控制处理器,例如Atmel,Freescale,Luminary,NXP,OKI,Samsung,Sharp,ST,TI等厂家的产品。MDK提供工业标准的编译工具和强大的调试支持。MDK是专为MCU的用户开发嵌入式软件而设计的一套开发工具。包括根据器件定制的调试仿真支持,丰富的项目模版,固件示例以及为内存优化的RTOS库。MDK上手容易,功能强大,适合微控制器应用程序开发。RVDS

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

11 / 28

获取更多权威电子书请登录

正如前面所介绍RVDS是专为SOC,FPGA以及ASIC用户开发复杂嵌入式应用程序或者和操作系统平台组件接口而设计的开发工具。RVDS支持器件设计,支持多核调试,支持基于所有ARM

和Cortex系列CPU的程序开发。RVDS还可以和第三方软件进行很好的连接。图4 RVDS和RV-MDK

如上图表示:MDK主要是为终端客户提供价格低廉,功能强大的开发工具。集成了RealView编译工具,Keil uVision开发环境,支持基于

ARM7,ARM9,Cortex-M1,Cortex-M3产品的仿真,提供非常高效的RTOS Kernel,除此,提供的Real-Time库还有TCP/IP网络套件,Flash文件系统,USB 器件接口,CAN总线接口等,方便终端用户进行应用开发。因此对于MDK用户来说,他们得到的就是可以对MCU进行仿真和调试,容易使用又没有冗余的功能,关键是价格实惠,而且用户可以先试用再购买。

对于芯片设计公司以及相关解决方案提供商来说,需要的是更加强大的工具,可以进行多核调试,需要更加先进的调试和分析功能,可以支持多种操作系

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

12 / 28

获取更多权威电子书请登录

统,可以进行IP整合开发,可以结合ESL工具进行架构评估,系统软硬件划分等,那么选择RVDS可以提供完整解决方案。

3 编译和连接

ARM RealView 编译工具已经发展了16年,一直致力于为客户提供最好的编译器。RVDS是ARM公司继SDT与ADS1.2之后主推的新一代开发工具,目前最高版本是3.1。它由RealView编译器(RVCT)、RealView汇编器(armasm)、RealView连接器(armlinker),以及RealView调试器

(RVDebugger)三部分组成。

RVDS对代码密度的提升、代码执行速度的提高,都可以由ARM开发工具自动实现,而不需要软件开发人员花费过多的时间手动优化高级语言代码。这是RVDS的优势所在。

先前版本中的编译器armcc,tcc,armcpp,tcpp 已经整合成一个编译器armcc,可以将标准的C或C++语言源程序编译成32位ARM指令代码或者16位Thumb 指令代码或者Thumb-2指令代码。

编译器输出的ELF格式的目标文件,包含调试信息。除此之外,编译器可以输出所生成的汇编语言列表文件。

RVDS的编译器根据最新的ARM架构进行特别的优化,针对每个ARM架构都提供最好的代码执行性能,最优的代码密度。可以根据需要选择调试信息级别,以及不同的代码优化方向和优化级别。

RVCT中C和RogueWaveC++库包括

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

13 / 28

获取更多权威电子书请登录

! 完整ISO标准C语言库

标准C语言函数集,C语言库需要的支持函数以及在Semihosted执行环境中需要的目标相关的函数。

ARM C语言库结构使用户很容易定义目标相关函数,以适应特定的目标环境。! 浮点函数库使用ARM在IEEE754标准(二进制浮点算法)上实现的浮点环境。

! RogueWaveC++库

RogueWaveC++库包含标准C++函数,编译器需要的支持函数。

各种源文件经过ARM编译器编译后生成ELF格式的目标文件。这些目标文件和相应的C/C++运行时库经过ARM连接器处理后,生成ELF格式映像文件。ARM连接器可以去除使用不到的代码段和函数,这样可以减少内存的使用。ARM连接器可以将不同的指令代码和数据代码放置到不同的内存地址范围。(https://www.wendangku.net/doc/af8462446.html,/support/faqdev/1245.html)

通常在嵌入式系统中,指令和数据代码会固化在非易失性存储器中(ROM或Flash),可以从这些地方上电启动。从运行速度方面考虑,部分指令和数据代码会在启动后搬运到易失性存储器(RAM)中,因此连接器可以使用一些方法机制来配置调度。

这种分散装载(scatterloading)的机制可以让把不同的指令和数据分散的放到不同的地址,而且这些地址在系统启动和系统运行可以是不同的映射。

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

14 / 28

获取更多权威电子书请登录

详细的地址分配可以是用参数来指定,或者用一个描述文件来作为连接器的参数。使用描述文件会使维护起来非常简单,而且如果要改变地址分配,不需要把整个项目完全重新来做,只要把项目中需要的目标重新连接即可。

一个scatterloading文件的示例:

LOAD_FLASH 0x04000000 0x80000 ; 启动地址和长度

{

EXE_FLASH 0x04000000 0x80000

{

init.o (Init, +First) ;

* (+RO) ;

}

32bitRAM 0x0000 0x2000

{

vectors.o (Vect, +First) ;

int_handler.o (+RO)

}

16bitRAM 0x2000 0x80000

{

* (+RW,+ZI) ;

}

}

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

15 / 28

获取更多权威电子书请登录

! 本文件定义了启动区域和三个执行区域。在大括号外面定义了启动区域(LOAD_FLASH),里面三个定义了执行区域

(EXEC_FLASH,32bitRAM,16bitRAM)。

! 为了提高运行速度,异常向量(在vectors.s)和异常句柄(在

int_handler.c)被重新放置到32bitRAM的零地址开始的地方。

! 可以读写的变量被复制到16bitRAM的0x2000地址开始的地方。

! 零初始化的数据和可读写数据放在16bitRAM内。

! 其他不需要搬运的代码只需要还放在Flash里就好。

3.1 RVCT的优化级别与优化方向

提到RVCT就不能不提armcc的四个优化级别和两个编译选项,-O1、-O2、-

O3、-O4,以及-Otime、-Ospace。

-Ospace与-Otime负责给编译器提供代码优化的大方向,告知编译器编译任务的主要目标是代码密度(-Ospace)还是代码性能(-Otime)。而-O1、-O2、-O3、-O4则分别代表4种逐次递进的不同优化级别。

OSpace 还是OTime?

显然代码密度与代码执行速度在很多情况下是一对矛盾。以下面的代码为例。例1中左右两段代码可以完成相同的任务,但是左边的有较高的代码密度,右边的则有较高的执行速度。因为当expr = 0时,标志循环结束时,右边的代码可以顺序执行下去;而左边代码必须先跳转至循环体首部判断expr的值,随

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

16 / 28

获取更多权威电子书请登录

后再跳转道循环体尾,继续执行下一条指令。

例1 代码速度与尺寸的对比

while (expr) if (expr) do

{ { do

body; { body; }

}

那么我们什么时候使用Otime 什么时候使用Ospace呢?Otime与Ospace需要开发人员根据系统实际需求来决定,最好的情况是在两者之间找到一个合适的平衡点,而不是单纯的追求速度或者代码尺寸的缩小。即,将不同的代码模块根据其特性分别使用不同的编译选项。

此外,RVCT编译器支持很多非常有用的编译选项,如--no_inline(取消所有代码的内联函数)、--split_ldm(限制LDM/STM指令的最大操作寄存器数目)、--split_sections(将每个函数,而不是源文件,作为一个编译单元进行操作)等等。

编译器的所有这一切都可以严格根据开发者的要求,帮助开发人员得到系统真正需要的优化过了的代码。

O3还是O2?

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

17 / 28 } while (expr);

获取更多权威电子书请登录

老的开发工具,如ADS1.2中,只有3种递进的代码优化级别,对应3种编译选项,即-O0(Minimum optimization)、-O1(Restricted optimization)、-O2(High optimization )。

使用-O0编译选项时,RVCT编译器只对代码作最基本的优化操作,编译结束后用户得到的代码与用户手写源代码之间的差距很小,这种特性的主要作用是为了方便用户在程序开发阶段的调试工作,避免由于优化而产生的调试屏障。此外,很多资深软件工程师偏向于手写优化代码,在这种情况下,由于代码已经被优化过,可以使用-O0编译选项减少RVCT的工作量,节省编译链接的时间。

-O1与-O2则分别是相对于-O0更加高级别的编译优化选项,前者提供有限的优化;后者则会对代码进行较大程度的优化改进操作。

RVDS中新增加了-O3(Maximum optimization)编译选项,它可以最大程度的发挥RVCT编译器的优势,将代码编译成最优。O3与O2都是较高级别的编译优化选项,但-O3相比较于-O2,主要优势有以下几点。当用户使用-O3选项时:

――编译器会自动对代码进行髙阶标量优化。所谓的高阶标量优化就是编译器对根据代码特点,针对循环、指针等进行髙阶优化。

――编译器会把尽可能多函数的编译为内联(inline)函数;

――Multifile compilation功能被自动使能。

对于循环与指针的髙阶优化(High-level scalar optimizations)

当编译选项为-O3 –Otime时,RVCT会根据代码的具体情况,针对循环、

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

18 / 28

获取更多权威电子书请登录

指针等部分作髙阶优化工作:循环解开(Loop unrolling)、融合(fusion)、位置调整(interchange)、指针优化等等。以例2的函数为例。例2是一段简单的

C循环函数,在循环中含有数组指针调用。

例2

CodeA

void increment(int *restrict b, int *restrict c)

{ int i;

for (i = 0; i < 100; i++)

{

c[i] = b[i] + 1;

}

}

CodeB

void increment(int *b, int *c)

{

int i;

int *pb, *pc;

int b3, b4;

pb = b - 1;

pc = c - 1;

b3 = pb[1];

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

19 / 28

获取更多权威电子书请登录

for (i = (100 / 2); i != 0; i--)

{

b4 = *(pb += 2);

pc[1] = b3 + 1;

b3 = pb[1];

*(pc += 2) = b4 + 1;

}

}

仔细观察可以发现,CodeA与CodeB可以完成同样的功能,即将数组b的每个成员加1赋值给数组c对应成员。但是CodeB与CodeA相比,有较高的执行速度。主要体现在以下几点:

――循环100次变成了循环50次(loop unrolling),减少了跳转次数;

――数组变成了指针,减少每次计算数组偏移量的指令;

――微调了不同代码操作的执行顺序,减少了流水线stall的情况;

――循环从++循环变成了――循环。这样可以使用ARM指令的条件位,为每次循环减少了一条判断指令。

很多程序员就是这样,通过这种手写不同的C代码,再实现相同任务的情况下,提高了代码执行效率。

在RVDS中,使用-O3 –Otime编译选项,RVCT会自动帮助程序员进行这些髙阶标量优化,即,RVCT会直接将CodeA优化成以前由CodeB才能得到的汇编代码。虽然优化之后函数的代码尺寸大于原先的函数,但是执行速度却有大

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

20 / 28

获取更多权威电子书请登录

大的提高,

经过统计,使用EEMBC benchmarking, -O3编译选项编译得到的最终代码平均性能相对于-O1可以有10%的提升,而总体代码尺寸只增加了1%。

3.2 Multifile compilation

按照传统的编译方式,我们先把各个C或C++文件单独编译成.obj文件,再将这些目标文件链接在一起。考虑到虽然在编译单独的C或C++文件时,编译器会充分发挥它的优化特性;但此时,编译器无法关注到大量的C或C++文件接口之间可以优化的部分。所以在传统的编译结果里,还有许多优化的余地。如何才能让编译器同时关注和编译所有的源代码呢?

Multifile compilation是RVDS一个较新的特性,它可以帮助开发人员将所有的源文件作为一个compilation unit进行编译,并最终生成一个大的目标文件(如图3中的file1.o)。Mutifile compilation给软件开发人员带来的直接优势有以下几点:――增加inline的可能性。由于inline只能发生在一个compilation unit中,所以在没有使用mutifile compilation时,inline只能发生在一个源文件范围内。Multifile Compilation将一个compilation unit扩大到了所有源文件的范围上,所以直接增加了inline发生的几率。

――增加了基地址与函数间优化的可能性。同inline一样,所有的基地址与函数间的优化也必须在一个compilation unit中,随着conpilation unit的扩大这种优化的可能性也增加了。

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

21 / 28

获取更多权威电子书请登录

――减少了scatter file的复杂性。

图3 Mutifile compilation工作原理

3.3调试

由前面的介绍已经知道RealView Debugger(RVD)是RVDS的重要组件之一。RealView Debugger可以更好的帮助客户在复杂SoC设计中方便直观的调试软硬件。

! 方便协调的开发软硬件

RVD可以和RealView SoC Designer一起调试,这样软硬件开发人员可以更早的进行合作开发,而且双方都是使用各自熟悉的工具,这样可以有效地缩短开发周期。

! 单核或多核调试

RVD使用同步机制进行多核调试,使用RVD在一个处理器上设置的断点,可以停止整个系统,这样可以观测复杂的多核系统的各种关键状态信息。

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

22 / 28

获取更多权威电子书请登录

! 调试操作系统和中间件

RVD支持调试业内各种流行的操作系统,正如操作系统一章所述,RVD可以直观的观测操作系统的执行文本和各种资源。

! 调试跟踪,性能评估

RVD可以对基于ARM处理器的设计进行非插入式的实时地捕捉数据/指令和显示,从而实现调试,跟踪以及性能评估。目前业内其他的调试工具还不能达到有如RVD这样出色的性能。RVD可以对RealView ESL对系统模型进行调试,也可以使用RealView ICE以及RealView Trace对真实的硬件系统进行调试跟踪和性能评估。

! 调试目标设备

无论是开发一个新的软硬件架构,一个操作系统还是一个应用程序,RVD可以连接到SoC模型,指令集仿真模型,实时系统模型或者真实的硬件处理器来帮助完成开发。如此广泛的支持,使得RVD在整个开发周期中成为一个不可或缺的得力的开发工具。

4 操作系统

随着高端电子消费类产品的广泛普及,实时嵌入式操作系统使用越来越广泛。而基于ARM的嵌入式操作系统在各个领域都得到了广泛的应用,利用ARM系列产品的强大功能可以完成各种应用程序的开发。

ARM对操作系统以及系统开发执行环境提供最广泛的选择,客户可以根据需要来选择最适应市场要求的基于ARM的嵌入式操作系统。可供选择的嵌入式

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

23 / 28

获取更多权威电子书请登录

操作系统有几十种,使用较多的有Linux,WinCE,Palm,Symbian等等。采用WinCE更多的是OEM,以及按需进行特定的嵌入式器件开发的,例如GPS导航设备。采用Palm操作系统的厂家有联想三星索尼,他们的出货量都非常巨大。Symbian操作系统是先进的全球公开工业标准操作系统,基于Symbian操作系统的手机有:BenQ,DoCoMo,Motorola,Nokia,Panasonic,三星,索尼爱立信等。Linux是源代码开放的操作系统,可以运行在包括ARM等多种主流处理器架构上。由于有一大批的工程师在开发开放源代码以及相关开发工具,Linux可以更方便快捷的进行移植。

以Linux为例,选择基于ARM的Linux,可以得到更多的开发源代码的应用,可以利用ARM处理器的高性能开发出更广阔的网络和无线应用,ARM的Jazelle

技术带来Linux平台下Java程序更好的性能表现。ARM公司的系列开发工具和开发板,以及各种开发论坛的可利用信息带来更快的产品上市时间。

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

24 / 28

获取更多权威电子书请登录

4.1 哪里可以得到os 软件包 (Open Source and Linux Kernel)

Development

图5

ARM网站上可以下载到基于RealView Itegrator和RealView Versatile 平台的Linux Kernel镜像文件,补丁以及实用工具。我们都知道Linux是需要进行虚拟地址管理的,因此需要处理器整合有MMU。并不是所有的处理器都整合有MMU,因此可以在不具备MMU的处理器上运行的修改过的Linux又叫做uClinux,uClinux同样可以从ARM网站上下载。

可以以基于ARM926的Linux开发为例,浏览一下整个开发流程:

需要的相关软件:

! Boot Loader:U-Boot。 ! 预编译的Linux kenel,包括源文件和镜像文件。

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

25 / 28

获取更多权威电子书请登录

! 配置文件。

! 文件系统以及预编译的实用工具和应用软件。

首先可以从https://www.wendangku.net/doc/af8462446.html,/linux/linux_download.html 下载U-Boot和Linux的镜像文件,相关开发平台有RealView Integrator-CP平台,Versatile PB/AB平台,EB平台。

4.2 安装镜像

可以使用与主板相连的调试器,通过 JTAG 运行控制设备(如 ARM

RealView ICE 单元)将映像安装到闪存中。

以PB926EJ-S为例,使用从调试器运行主板随附的 BootMonitor.axf 程序来编写映像。Flash 菜单提供一些编写 ELF 或二进制映像的选项。RealView Versatile系列还提供一个闪存编程实用工具,即“网络闪存实用工具”(NFU)。该程序可以通过以太网连接将映像编写到闪存中。

使用U-Boot完成对闪存中的镜像引导。可以通过U-Boot完成对Linux的一些设置以及将一些环境保存到闪存中。

Linux Kernel可以从https://www.wendangku.net/doc/af8462446.html,上得到。

4.3 交叉编译

主机系统上必需安装 ARM 交叉编译工具链来生成 Linux 内核或应用程序。(系统中需安装 Glibc library 2.3 或更高版本)。

可从 https://www.wendangku.net/doc/af8462446.html, 或 GCC CVS 主存储库下载用于构建

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

26 / 28

获取更多权威电子书请登录

GCC 工具的源文件。该网站还提供讨论组,供用户讨论 ARM GNU 工具的相关技术问题

开发人员可以从 https://www.wendangku.net/doc/af8462446.html,下载用于构建 GCC 工具的源文件。该网站还提供讨论组,供用户讨论 ARM GNU 工具的相关技术问题。

arm-elf 生成与任何操作系统无关的平坦或独立二进制文件。arm-elf 会选择 ELF 支持,其大部分代码与 arm-linux 共享。

arm-none-linux-gnueabi 是 Linux 所需的目标,它生成 Linux/ARM 的 ELF 支持。ARM RealView开发工具

总结

本文概略的介绍了ARM公司的开发工具,如何选择您需要的器件,从一个SoC 设计者或者软件开发者的角度如何选择开发工具,RealView开发工具中的编译工具、连接工具以及调试工具。简单描述了开发操作系统以及相关应用程序的步骤。

无论是硬件系统开发还是软件开发,调试都是最重要也是需要时间最多的环节,软硬件开发人员的沟通也是缩短产品上市时间的关键。强大的RealView Debugger成为不同的开发团队之间沟通最好媒介。RealView开发工具使得调试环境保持一致,软硬件开发人员更加协调。而后续开发人员或者第三方开发者可以更好继承这一调试环境,包括操作系统以及应用程序库,配以RealView系列工具的支持,可以更迅速的完成新的设计。

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

27 / 28

获取更多权威电子书请登录

电子工程专辑优秀电子书

# 电子工程师必备手册(上)--GPS设计全攻略(HOT)

# 电子工程师必备手册(下)--运算放大器设计与应用(HOT) # TD-SCDMA射频系统发射部分性能监测方法(HOT)

# LTC四输出负载点DC/DC μModule 系统设计要点

# D类音频放大器设计:概念、原理和方法

# 车用电容传感器的新契机

# LCDTV(欧洲机型)AV输入设计

# PolySwitch LVR/LVRL器件有助于家用和专业电器的电机保护 # OFDM原理

# 视觉人体工程学设计要点

硬件工程师必读攻略----如何通过仿真有效提高数模混合设计性能(上)

28 / 28

软件破解入门教程

先教大家一些基础知识,学习破解其实是要和程序打交道的,汇编是破解程序的必备知识,但有可能部分朋友都没有学习过汇编语言,所以我就在这里叫大家一些简单实用的破解语句吧! ---------------------------------------------------------------------------------------------------------------- 语句:cmp a,b //cmp是比较的意思!在这里假如a=1,b=2 那么就是a与b比较大小. mov a,b //mov是赋值语句,把b的值赋给a. je/jz //就是相等就到指定位置(也叫跳转). jne/jnz //不相等就到指定位置. jmp //无条件跳转. jl/jb //若小于就跳. ja/jg //若大于就跳. jge //若大于等于就跳. 这里以一款LRC傻瓜编辑器为例,讲解一下软件的初步破解过程。大家只要认真看我的操作一定会!假如还是不明白的话提出难点帮你解决,还不行的话直接找我!有时间给你补节课!呵呵! 目标:LRC傻瓜编辑器杀杀杀~~~~~~~~~ 简介:本软件可以让你听完一首MP3歌曲,便可编辑完成一首LRC歌词。并且本软件自身还带有MP3音乐播放和LRC歌词播放功能,没注册的软件只能使用15天。 工具/原料 我们破解或给软件脱壳最常用的软件就是OD全名叫Ollydbg,界面如图: 它是一个功能很强大的工具,左上角是cpu窗口,分别是地址,机器码,汇编代码,注释;注释添加方便,而且还能即时显示函数的调用结果,返回值. 右上角是寄存器窗口,但不仅仅反映寄存器的状况,还有好多东东;双击即可改变Eflag的值,对于寄存器,指令执行后发生改变的寄存器会用红色突出显示. cpu窗口下面还有一个小窗口,显示当前操作改变的寄存器状态. 左下角是内存窗口.可以ascii或者unicode两种方式显示内存信息. 右下角的是当前堆栈情况,还有注释啊. 步骤/方法 1. 我们要想破解一个软件就是修改它的代码,我们要想在这代码的海洋里找到我们破解关键的代码确实很棘 手,所以我们必须找到一定的线索,一便我们顺藤摸瓜的找到我们想要的东东,现在的关键问题就是什么

ARM嵌入式系统基础与开发教程丁文龙

第1章嵌入式系统概述 1.填空题 (1)嵌入式系统硬件平台嵌入式软件 (2)硬件抽象层HAL 板级支持包BSP 设备驱动程序 (3)嵌入式微处理器嵌入式微控制器嵌入式片上系统SoC 2.选择题 (1)B (2)A B D (3)D 3.简答题 (1)什么是嵌入式系统?列举几个熟悉的嵌入式系统的产品。 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。常见的有汽车、手机、MP3等等。 (2)嵌入式系统由哪几部分组成? 嵌入式系统从大的方面分嵌入式系统硬件平台和嵌入式软件两大部分,其中软件部分又具体分为若干层次。对于包含有操作系统的嵌入式系统来讲,嵌入式系统软件结构包含4个层次:设备驱动层、实时操作系统RTOS层、应用程序接口API层、应用程序层。 (3)简述嵌入式系统的特点。 系统内核小;专用性强;系统精简;软件固化;嵌入式软件开发要想走向标准化,就必 须使用多任务的操作系统;嵌入式系统开发需要开发工具和环境。

第2章ARM体系结构 1.填空题 (1)Cortex-R4处理器Cortex-A8处理器 (2)ARM Thumb (3)R13 R14 R15 (4)8 16 32 2.选择题 (1)A C D (2)A (3)B C D 3.简答题 (1)简述ARM可以工作的几种模式。 ARM体系结构支持7种处理器模式:用户模式、快中断模式、中断模式、管理模式、 中止模式、未定义模式和系统模式。 (2)ARM7内部有多少个寄存器? 在ARM7TDMI处理器内部有37个用户可见的32位寄存器,其中31个通用寄存器,6个状态寄存器。 (3)描述一下如何禁止IRQ和FIQ的中断? 在一个特权模式下,都可通过置位CPSR中的I位来禁止IRQ。 在一个特权模式中,可通过置位CPSR中的F标志来禁止FIQ异常。 (4)请描述ARM7TDMI进入异常或退出异常时内核有何操作? 当异常发生时,ARM处理器尽可能完成当前指令(除了复位异常)后,再去处理异常,并执行如下动作: ①进入与特定的异常相应的操作模式; ②将引起异常指令的下一条指令的地址保存到新模式的R14中; ③将CPSR的原值保存到新模式的SPSR中; ④通过设置CPSR的第7位来禁止IRQ;如果异常为快中断,则要设置CPSR的第6位禁止快中断; ⑤给PC强制赋向量地址值。 退出异常时: ①将LR中的值减去偏移量后移入PC,偏移量根据异常的类型而有所不同; ②将SPSR的值复制回CPSR; ③清零在入口置位的中断禁止标志。

Unity3D经典入门教程(精)

一、Unity基础 本部分是你开始Unity的关键。、这里将解释Unity的界面,菜单项,使用资源,创建场景,和发布。当你完全阅读了该部分后,你将能够理解Unity是如何工作的,以及如何使其更加有效的工作,和如何将简单的游戏放置在一起。 1. 界面学习 现在我们开始学习Unity,如果你还没有打开 Unity,你可以通过双击位于Application->Unity文件夹中的 Unity图标来运行它,当它第一次运行时你将看到如下的场景: Unity运行时的缺省场景,如果你打开过任何实例,你的屏幕会与上图不同 有很多需要学习的东西,让我们花费点时间来观察理解上述界面。我们将介绍每一个接口 元素。 概要主窗口的每一个部分都被称为视图(View)。在 Unity中有多种类型的视图,但是,你

不需要同时看见所有的视图。不同的布局模式(Layout modes)包含的视图是不同的。通过单击布局下拉控件来选择不同的布局,该控件位于窗口的右上角。 布局模式选择下拉列表 现在,单击布局选择,并单击Animation,切换到动画布局 (Animation layout)。还可以从菜单中选择Window->Layouts->Animation来切换。动画布局包含所有的视图,这是昀好的用来介绍它们的方法。

通过视图左上角的名称你可以迅速的分辨这些视图。这些视图是:场景视图(Scene View)-用于放置物体游戏视图(Game View)-表示游戏在运行时的外观层次视图(Hierarchy)-当前场景中的游戏物体的列表工程视图(Project)-显示当前打开工程中所有可用的物体和资源检视视图(Instpector)-显示当前选中物体的细节和属性时间线(Timeline)-用于为当前选中物体创建基本的时间线动画 场景视图(Scene View) 场景视图 场景视图(Scene View)是一个可交互的沙盘。你将使用它来选择并在场景中定位所有的游戏物体(GameObjects),包括玩家,摄像机,敌人等。在场景视图中操纵并修改物体是Unity非常重要的功能。这是昀好的通过设计者而不是玩家的角度来查看场景的方法。在场景视图中你可以随意移动并操纵物体,但是你应该知道一些基本的命令以便有效的使用场景视图。 第一个你应该知道命令是FrameSelected命令。这个命令将居中显示你当前选中的物体。你可以在层次视图(Hierarchy)单击任何物体,然后移动你的鼠标到场景视图上并按F键。场景视图将移动以居中显示当前选择的物体。这个命令是非常有用的,你将在场景编辑的

嵌入式开发工具使用

《嵌入式开发工具使用》 实验报告 学生姓名:______________________ 学号:— 专业班级:_______________ 指导教师:_________________ 完成时间: 实验2嵌入式开发工具使用实验 一?实验目的 了解嵌入式开发工具套件组成,掌握开发工具安装,熟练运用gcc各命令选项,熟练编写Makefile和使用make工具,掌握gdb各命令用于应用程序调试。 二?实验内容 实验 2.1 arm-linux-gcc安装 实验2.2编译工具gcc使用 实验2.3 编写Makefile和使用make编译 实验2.4使用gdb调试应用程序 实验2.5 使用code::blocks进行图形化编程 三?预备知识 Linux使用等 四?实验设备及工具(包括软件调试工具) 硬件:ARM嵌入式开发平台、PC机Pentium100以上、串口线。软件:WinXP或 UBUNTU开发环境。 五?实验步骤 5.1交叉编译工具配置及编译 第一步,解压缩交叉编译器工具,命令为: #cd /tmp _____________________________________________________________________ ? arm-l inu x-gcc可执行文件位于目录 /root/gcc-gdb-make_exp _________________________________________ 。 第二步,修改PATH环境变量,将arm-linux-gcc可执行文件目录添加到PATH环境变量中,命令为 5.2 arm-l inu x-gcc编译工具使用

[学习引导]4412开发板之嵌入式技术学习步骤及项目案例

嵌入式技术的学习步骤(基于iTOP-4412) 北京迅为电子有限公司

嵌入式技术的知识体系 ?适用于iTOP-4412开发板及配套教程的学习步骤 ?嵌入式的知识面广泛,初学者难于入门 ?本节阐述嵌入式技术学习步骤,适用于初学者 ?力图起到提纲挈领的作用,在大量学习资料中有一个比较清晰的脉络?最后会介绍一个实战案例

首先要搞明白几个重要文件的意义?学习方法:首先要掌握基础架构 ?对于架构来说,最基本的东西就是要搞清楚几个概念(几个文件的意义): –bootloader引导程序(UBOOT) –linux操作系统内核(kernel) –文件系统(可能包含2个文件) ?推荐大家首先研读:“澄清几个基本概念-迅为精英版聊天记录.doc” –该文件在QQ群共享中 ?开发编译环境的搭建、源代码的编译和烧写、应用和驱动的建立等等都是围绕这几个文件展开的!

第二步:搭建开发编译环境 ?64位WIN7系统--》虚拟机--》ubuntu ?对于初学者,推荐按照教程的要求和步骤来做,这样少走弯路,效率更高 ?其他系统不是不可以,但可能会遇到各种安装和编译过程的问题 ?熟练掌握以后,再去创新,这时才可以去做各种不同的尝试 ?搭建开发环境,有的时候并不顺利,需要克服一些安装问题 ?迅为已经把安装步骤做了很大程度的简化,比如虚拟机上的ubuntu镜像,直接拷贝进去就可以用了,避免了通过网络安装各种插件 ?搭建完成,就可以按照教程学习源代码编译和系统的烧写。 ?再次强调:这些工作都是围绕那三个文件展开的(实际是4个文件) ?Linux或Android系统的编译和烧写都是依赖于这个开发环境的。

6、汇编学习从入门到精通(荐书)

汇编学习从入门到精通Step By Step 2007年12月15日星期六00:34 信息来源:https://www.wendangku.net/doc/af8462446.html,/hkbyest/archive/2007/07/22/1702065.aspx Cracker,一个充满诱惑的词。别误会,我这里说的是软件破解,想做骇客的一边去,这年头没人说骇客,都是“黑客”了,嘎嘎~ 公元1999年的炎热夏季,我捧起我哥留在家的清华黄皮本《IBM-PC汇编语言程序设计》,苦读。一个星期后我那脆弱的小心灵如玻璃般碎裂了,为了弥补伤痛我哭爹求妈弄了8k大洋配了台当时算是主流的PC,要知道那是64M内存!8.4G硬盘啊!还有传说中的Celeon 300A CPU。不过很可惜的是在当时那32k小猫当道的时代,没有宽带网络,没有软件,没有资料,没有论坛,理所当然我对伟大的计算机科学体系的第一步探索就此夭折,此时陪伴我的是那些盗版光盘中的游戏,把CRACK_XXX文件从光盘复制到硬盘成了时常的工作,偶尔看到光盘中的nfo 文件,心里也闪过一丝对破解的憧憬。 上了大学后有网可用了,慢慢地接触到了一些黑客入侵的知识,想当黑客是每一个充满好奇的小青年的神圣愿望,整天看这看那,偷偷改了下别人的网页就欢喜得好像第一次偷到鸡的黄鼠狼。 大一开设的汇编教材就是那不知版了多少次的《IBM-PC汇编语言程序设计》,凭着之前的那星期苦读,考试混了个80分。可惜当时头脑发热,大学60分万岁思想无疑更为主流,现在想想真是可惜了宝贵的学习时间。 不知不觉快毕业了,这时手头上的《黑客防线》,《黑客X档案》积了一大摞,整天注来注去的也厌烦了,校园网上的肉鸡一打一打更不知道拿来干什么。这时兴趣自然转向了crack,看着杂志上天书般的汇编代码,望望手头还算崭新的汇编课本,叹了口气,重新学那已经忘光了的汇编语言吧。咬牙再咬牙,看完寻址方式那章后我还是认输,不认不行啊,头快裂了,第三次努力终告失败。虽然此时也可以爆破一些简单的软件,虽然也知道搞破解不需要很多的汇编知识,但我还是固执地希望能学好这门基础中的基础课程。 毕业了,进入社会了,找工作,上班,换工作成了主流旋律,每天精疲力尽的哪有时间呢?在最初的中国移动到考公务员再到深圳再到家里希望的金融机构,一系列的曲折失败等待耗光了我的热情,我失业了,赋闲在家无所事事,唯一陪伴我的是那些杂志,课本,以及过时的第二台电脑。我不想工作,我对找工作有一种恐惧,我靠酒精麻醉自己,颓废一段日子后也觉得生活太过无聊了,努力看书考了个CCNA想出去,结果还是被现实的就业环境所打败。三年时间,一无所获。 再之后来到女朋友处陪伴她度过刚毕业踏入社会工作的适应时期,这段时间随便找了个电脑技术工作,每月赚那么个几百块做生活费。不过这半年让我收获比较大的就是时间充裕,接触到了不少新东西,我下定决心要把汇编学好,这时我在网上看到了别人推荐的王爽《汇编语言》,没抱什么希望在当当网购了人生中的第一次物,19块6毛,我记得很清楚,呵呵。 废话终于完了,感谢各位能看到这里,下面进入正题吧。

Linux基本反汇编结构与GDB入门

Linux下的汇编与Windows汇编最大的不同就是第一个操作数是原操作数,第二个是目的操作数,而Windows下却是相反。 1、基本操作指令 简单的操作数类型说明,一般有三种, (1)立即数操作数,也就是常数值。立即数的书写方式是“$”后面跟一个整数,比如$0x1F,这个会在后面的具体分析中见到很多。 (2)寄存器操作数,它表示某个寄存器的内容,用符号Ea来表示任意寄存器a,用引用R[Ea]来表示它的值,这是将寄存器集合看成一个数组R,用寄存器表示符作为索引。 (3)操作数是存储器引用,它会根据计算出来的地址(通常称为有效地址)访问某个存储器位置。用符号Mb[Addr]表示对存储在存储器中从地址Addr开始的b字节值的引用。通常可以省略下标b。 图1表示有多种不同的寻址模式,一个立即数偏移Imm,一个基址寄存器Eb,一个变址或索引寄存器Ei和一个伸缩因子s。有效地址被计算为Imm+R[Eb]+R[Ei]*s,对于这中寻址方式,我们可以在数组或者结构体中进行对元

注:操作数可以是立即数值、寄存器值或是来自存储器的值,伸缩因子必须是1、2、4、或者是8。从上面的图我们就可以大致了解操作数的类型了。 在操作指令中,最频繁使用的指令是执行数据传送的指令。对于传送指令的两个操作数不能都指向存储器位置(我的理解是一般存储器存储的都是地址,不能够对地址和地址进行操作)。将一个值从一个存储器位置拷到另一个存储器位置需要两条指令——第一条指令将源值加载到寄存器中,第二条将该寄存器值写入到目的位置。下面给出源操作数和目的操作数的五种可能组合。 1、movl $0x4050, %eax 立即数——寄存器 2、movl %ebp, %esp 寄存器——寄存器 3、movl (%edi, %ecx), %eax 存储器——寄存器 4、movl $-17, (%esp) 立即数——存储器 5、movl %eax, -12(%ebp) 寄存器——存储器 注意这里的指令mov可能有不同的形式,不同平台的汇编一般是有些不一样的, 结合例子来进行讲解一下指令的具体操作,在这里将会正式接触到Linux下的GCC开发环境和GDB调试器,不过都是比较简单的应用。我的Linux操作系统是Ubuntu9.10,其它版本的差别应该不大, 如果我们要编写一个程序,我们可以用Linux下自带的vi或vim编辑器,studyrush@studyrush-desktop:~/C$ vi exchange.c vi 后面加我们要创建的程序文件的名字,在这里是exchange.c studyrush@studyrush-desktop:~/C$ gcc -o exchange exchange.c gcc -o exchange exchange.c 或gcc exchange –o exchange这两者都可以对源文件进行编译,-o exchange 表示对我们要输出的文件名称,可能表达的不够准确,大家可以先熟悉一下gcc编译器,应该就会明白的了。 studyrush@studyrush-desktop:~/C$ ./exchange 点加斜线再加输出文件名就表示运行程序,下面是运行的结果。 a = 3, b = 4

嵌入式经典书籍100册

嵌入式工程师必读100本专业书籍 ——从小白到大牛你只差这100本书《大话数据结构》 《鸟哥的linux私房菜》 《疯狂android讲义》 《第一行代码》 《linux内核设计与实现》 《驱动设计开发》 《linux内核解密》 《unix环境高级编程》 《linux内核设计与实现》 《essential C++》 《嵌入式linux》 《linux设备驱动》 《c语言深度解剖》 《linux下的c编程》 《C Primer Plus(第五版)》 《ARM体系结构与编程(第二版)》 《lINUX设备驱动开发详解(第三版)》 《android开发艺术探讨》 《c++plus》 《Unix环境高级编程》 《与大数据同行——学习和教育的未来》 《用户体验的要素》 《编程与艺术》 《ARM嵌入式体系结构与接口技术》 《cortex-m0接口编程》 《C语言程序设计:现代方法》 《C++ Primer》

《数据结构》(严蔚敏) 《算法导论》 《Linux设备驱动开发》 《代码大全》 《深入理解计算机系统》 《UNIX环境高级编程》 《计算机安全原理》 《UNIX网络编程》 《HeadFirst设计模式》 《linux驱动》(宋保华) 《C++ primer4》 《qt5精彩实例》 《ldd3》 《C++高级编程》 《c语言教程》 《实战linux编程精髓》 《ARM教程》 《JAVA编程思想》 《HTML+CSS网页设计与布局从入门到精通》《C语言深度解剖》 《深度实践嵌入式Linux系统移植》 《unix高级编程》 《c嵌入式一站式教学》 《编译原理》 《深度实践嵌入式Linux系统移植》《UNIX环境高级编程》 《linux网络编程》 《C语言程序设计》 《unix环境高级编程》 《嵌入式linuxc语言程序设计基础教程》

汇编语言入门教程

汇编语言入门教程 2007-04-29 22:04对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK 出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS 段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。

OllyDBG完美教程

关键词:OD、OllyDBG、破解入门、调试专用工具、反汇编 一、OllyDBG 的安装与配置 OllyDBG 1.10 版的发布版本是个 ZIP 压缩包,只要解压到一个目录下,运行 OllyDBG.exe 就可以了。汉化版的发布版本是个 RAR 压缩包,同样只需解压到一个目录下运行 OllyDBG.exe 即可: OllyDBG 中各个窗口的功能如上图。简单解释一下各个窗口的功能,更详细的内容可以参考 TT 小组翻译的中文帮助: 反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单界面选项->隐藏标题或显示标题来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方式。

寄存器窗口:显示当前所选线程的 CPU 寄存器内容。同样点击标签寄存器 (FPU) 可以切换显示寄存器的方式。 信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。 数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。 堆栈窗口:显示当前线程的堆栈。 要调整上面各个窗口的大小的话,只需左键按住边框拖动,等调整好了,重新启动一下 OllyDBG 就可以生效了。 启动后我们要把插件及 UDD 的目录配置为绝对路径,点击菜单上的选项->界面,将会出来一个界面选项的对话框,我们点击其中的目录标签: 因为我这里是把 OllyDBG 解压在 F:\OllyDBG 目录下,所以相应的 UDD 目录及插件目录按图上配置。还有一个常用到的标签就是上图后面那个字体,在这里你可以更改 OllyDBG 中显示的字体。上图中其它的选项可以保留为默认,若有需要也可以自己修改。修改完以后点击确定,弹出一个对话框,说我们更改了插件路径,要重新启动 OllyDBG。在这个对话框上点确定,重新启动一下 OllyDBG,我们再到界面选项中看一下,会发现我们原先设置好的路径都已保存了。有人可能知道插件的作用,但对那个 UDD 目录

嵌入式软件工程师学习指南

嵌入式软件工程师学习 1. 嵌入式软件课程体系 自学嵌入式确实不大现实(当然也不是说没有这个可能),毕竟嵌入式难度也是比较大的。嵌入式的应用主要是几个方向: 一是系统开发:侧重开发环境搭建、内核原理、交叉编译等; 二是嵌入式Linux应用开发:侧重Linux应用编程、内核编译、系统调用; 三是底层驱动开发:侧重嵌入式Linux系统下的驱动开发、内核的深入分析。 不过初进门者主要往系统开发和应用开发发展,有了相关工作经验再进一步向底层驱动靠。 嵌入式课程的目标,想自学完课程,要掌握以下知识点: ◆Linux命令、工具和C编程基础 ◆嵌入式Linux C语言强化 ◆嵌入式Linux上的C编程训练 ◆Linux高级编程及编程训练 ◆嵌入式ARM处理器体系结构及编程训练 ◆嵌入式Linux内核环境搭建和编程训练 ◆嵌入式Linux驱动理论及驱动程序开发训练 ◆Android应用研究和系统开发 ◆Android体系结构和系统移植 ◆嵌入式ARM Linux项目实践和训练 嵌入式软件方面最重要的课程包括: (1)嵌入式微处理器结构与应用 这是一门嵌入式硬件基础课程,我院用这门课取代了传统的“微机原理与接口”课程(目前国内已有少部分高校IT专业这样做了,因为讲x86微机原理与接口很难找到实际用处,只为教学而已)。我们说过,嵌入式是软硬件结合的技术,搞嵌入式软件的人应对ARM 处理器工作原理和接口技术有充分了解,包括ARM的汇编指令系统。若不了解处理器原理,怎么能控制硬件工作,怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率),怎么能写出驱动程序(驱动程序都是与硬件打交道的)?很多公司招聘嵌入式软件人员时都要求熟悉ARM处理器,将来若同学到公司中从事嵌入式软件开发,公司都会给你一本该设备的硬件规格说明书 (xxx Specification),您必须能看懂其中的内存分布和端口使用等最基本的说明(就像x86汇编一样),否则怎么设计软件。有些同学觉得嵌入式处理器课程较枯燥,这主要是硬件课程都较抽象的原因,等我们的嵌入式实验室10月份建好后,您做了一些实验后就会觉得看得见摸得着。还有同学对ARM汇编不感兴趣,以为嵌入式开发用C语言就足够了。其实不应仅是将汇编语言当成一个程序设计语言,学汇编主要是为了掌握处理器工作原理的。一个不熟悉汇编语言的人,怎么能在该处理器写出最优的C 语言代码。在嵌入式开发的一些关键部分,有时还必须写汇编,如Bootloader等(可能还包括BSP)。特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和图像解压缩),目前主要还要靠汇编写程序(我看到过很多公司是这样做的)。当您在一个嵌入式公司工作时,在查看描述原理的手册时,可能很多都是用汇编描述的(我就遇到过),这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时您就必须看懂汇编程序,否则软硬件人

嵌入式Linux应用软件开发流程

从软件工程的角度来说,嵌入式应用软件也有一定的生命周期,如要进行需求分析、系统设计、代码编写、调试和维护等工作,软件工程的许多理论对它也是适用的。 但和其他通用软件相比,它的开发有许多独特之处: ·在需求分析时,必须考虑硬件性能的影响,具体功能必须考虑由何种硬件实现。 ·在系统设计阶段,重点考虑的是任务的划分及其接口,而不是模块的划分。模块划分则放在了任务的设计阶段。 ·在调试时采用交叉调试方式。 ·软件调试完毕固化到嵌入式系统中后,它的后期维护工作较少。 下面主要介绍分析和设计阶段的步骤与原则: 1、需求分析 对需求加以分析产生需求说明,需求说明过程给出系统功能需求,它包括:·系统所有实现的功能 ·系统的输入、输出 ·系统的外部接口需求(如用户界面) ·它的性能以及诸如文件/数据库安全等其他要求 在实时系统中,常用状态变迁图来描述系统。在设计状态图时,应对系统运行过程进行详细考虑,尽量在状态图中列出所有系统状态,包括许多用户无需知道的内部状态,对许多异常也应有相应处理。 此外,应清楚地说明人机接口,即操作员与系统间地相互作用。对于比较复杂地系统,形成一本操作手册是必要的,为用户提供使用该系统的操作步骤。为使系统说明更清楚,可以将状态变迁图与操作手册脚本结合起来。

在对需求进行分析,了解系统所要实现的功能的基础上,系统开发选用何种硬件、软件平台就可以确定了。 对于硬件平台,要考虑的是微处理器的处理速度、内存空间的大小、外部扩展设备是否满足功能要求等。如微处理器对外部事件的响应速度是否满足系统的实时性要求,它的稳定性如何,内存空间是否满足操作系统及应用软件的运行要求,对于要求网络功能的系统,是否扩展有以太网接口等。 对于软件平台而言,操作系统是否支持实时性及支持的程度、对多任务的管理能力是否支持前面选中的微处理器、网络功能是否满足系统要求以及开发环境是否完善等都是必须考虑的。 当然,不管选用何种软硬件平台,成本因素都是要考虑的,嵌入式Linux 正是在这方面具有突出的优势。 2、任务和模块划分 在进行需求分析和明确系统功能后,就可以对系统进行任务划分。任务是代码运行的一个映象,是无限循环的一段代码。从系统的角度来看,任务是嵌入式系统中竞争系统资源的最小运行单元,任务可以使用或等待CPU、I/O设备和内存空间等系统资源。 在设计一个较为复杂的多任务应用系统时,进行合理的任务划分对系统的运行效率、实时性和吞吐量影响都极大。任务分解过细会不断地在各任务之间切换,而任务之间的通信量也会很大,这样将会大大地增加系统的开销,影响系统的效率。而任务分解过粗、不够彻底又会造成原本可以并行的操作只能按顺序串行执行,从而影响系统的吞吐量。为了达到系统效率和吞吐量之间的平衡折中,在划分任务时应在数据流图的基础上,遵循下列步骤和原则:

OllyICE反汇编教程及汇编命令详解

OllyICE反汇编教程及汇编命令详解[转] 2009-02-11 08:09 OllyICE反汇编教程及汇编命令详解 内容目录 计算机寄存器分类简介 计算机寄存器常用指令 一、常用指令 二、算术运算指令 三、逻辑运算指令 四、串指令 五、程序跳转指令 ------------------------------------------ 计算机寄存器分类简介: 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 对低16位数据的存取,不会影响高16位的数据。 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数; 寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。 在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果, 而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。 2、变址寄存器 32位CPU有2个32位通用寄存器ESI和EDI。 其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。 寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,

粤嵌开发板电子相册嵌入式课程设计

课程设计说明书题目:电子相册 课程名称:嵌入式系统 学院: 专业:学号: 姓名: 指导教师: 完成日期: 2017年6月10日

目录 1. 设计的工程背景 任务阐述 设计任务: 制作一个电子相册,要求每个人一种特效,结果显示在ARM开发板上。开发平台为LINUX。 电子相册简介: 以数字照片的存储和浏览为主要功能,具有内置数据存储器、USB等卡接口、强大的文件管理等特征。 背景: 在市场需求上,随着数码相机的普及,作为一种以数字照片的保存、回放和浏

览为核心的功能产品迎合了消费者需求,嵌入式linux的电子相册比一般电子相册更具优越性和实用性。目前市场,目前主流电子相册软件普遍体积庞大、占用内存多、硬件要求高。所以开发一个运行速度快,占用空间小,对硬件要求较低的功能实用的嵌入式Linux电子相册很有意义。 Linux开发优势: Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux 是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。 Linux是我国软件的国策,尤其是在IT行业,庞大的使用群体、开放的体系和丰富资源使得Linux将是日后普及和推广的重点。Linux的优越性日益凸显Linux将是我们学习和工作实用的首选。目前,很多网络技术、服务器、网络设备都是基于Linux操作系统,并且在不少时尚的手机、PDA、媒体播放器等消费类电子产品中已经广泛使用Linux作为操作系统。 在Linux软件国策的指引下,Linux已经得到很大的普及。很多学生已经自发地通过书籍、互联网等资源学习Linux。综上所述,提高技术水平就是以市场流行需求为导向进行研发,特别是像嵌入式种工程类的技术。在条件允许的情况下,我们甚至应该时刻与国际接轨,掌握当前最领先的技术。 任务分析 设计的目标是制作5种电子相册特效,每个人负责制作一种。在制作前期,首先要查阅资料,了解电子相册的背景和制作原理,对其形成大致的设计方案。然后,根据资料安装linux和虚拟机软件,搭建开发环境,安装交叉编译。最后,根据自己设计的方案进行尝试,不断修改错误,直到达到目标。 课题项目管理计划进度表

嵌入式系统开发基础1

青岛理工大学琴岛学院计算机系实验教材 Linux嵌入式系统 实验指导书

青岛理工大学琴岛学院计算机科学系 二0一0年四月

前言 随着后PC时代的到来,嵌入式系统技术已经成为了一个万众瞩目的焦点。目前已广泛应用于信息家电、数据网络、工业控制、医疗卫生、航空航天等众多领域。巨大的市场潜力,无穷的商机,吸引了各路英豪纷踵沓来。 硬件方面,各大电子厂商相继推出了自己的专用嵌入式芯片,漫天而至的是mp3,PDA,无线上网装置,让人们充分感受到了这股强劲之势;软件方面,在Vxworks、pSOS、Neculeus 和Windows CE等嵌入式操作系统引领下,也出现了空前繁荣的局面,但这些专用操作系统都是商业化产品,其高昂的价格使许多面向低端产品的小公司望而却步,并且其源代码的封闭性也大大限制了开发者的积极性。 近两年在我国登陆并蓬勃发展的Linux,也已广泛应用于各类计算应用,不仅包括IBM 的微型Linux腕表、手持设备(PDA和蜂窝电话)、因特网装置、客户机、防火墙、工业机器人和电话基础设施设备,甚至还包括了基于集群的超级计算机。Linux在高端服务器的优越表现及其天生具有的突出特点,就注定它必将在低端嵌入式系统中再次给人们以惊喜,而基于嵌入式Linux操作系统的应用,必定给我们未来的工作和生活带来翻天覆地的变化。 Linux价格低廉、功能强大,可以运行在X86,Alpha,Sparc,MIPS,PPC,MOTOROLA,NEC,ARM等硬件平台上,而且开放源代码,可以定制。我们所介绍的硬件平台是基于ARM体系结构,由北京博创兴业科技有限公司开发的UP-CUP 3000 平台、UP-CUP 2410-S 平台系列以及UP-CUP P270A 平台系列实验仪器。UP-CUP 3000 平台的CPU为ARM7TDMI内核的三星 S3C44B0X01芯片,由于没有MMU(内存管理单元)只能运行uClinux,UP-CUP 2410-S 平台系列的CPU为ARM920T内核的三星S3C2410芯片,由于有MMU可以运行标准的ARM-LINUX 内核。UP-CUP P270 平台系列实验仪器为Intel XSCALE ARM10系列CPU。通过这些硬件平台,我们可以学习嵌入式LINUX中的针对有MMU和无MMU的不同开发过程。UP-CUP 3000 平台和UP-CUP P270 平台系列产品及其相关资料可以访问博创公司的网站获得。本书以 S3C2410系列中的UP-CUP S2410 经典平台为例,详细介绍嵌入式 Linux的开发过程。 指导书参考与引用了许多相关资料,在此一并致谢。本指导书仅供内部学生学习使用。由于时间仓促,编者水平有限,书中疏漏之处在所难免,欢迎读者批评指正,并提出宝贵意见和建议,以便不断改进。 编者江艳飞 二0一一年四月 目录

OllyDbg入门完全教程(完美排版)

OllyDbg完全教程 目录 第一章概述 (1) 第二章组件 (5) 一、一般原理[General prnciples] (5) 二、反汇编器[Disassembler] (8) 三、分析器[Analysis] (9) 四、Object扫描器[Object scanner] (12) 五、Implib扫描器[Implib scanner] (12) 第三章 OllyDbg的使用 (13) 一、如何开始调试[How to start debugging session] (13) 二、CPU 窗口[CPU window] (14) 三、断点[Breakpoints] (14) 四、数据窗口[Dump] (15) 五、可执行模块窗口[Executable modules window] (16) 六、内存映射窗口[Memory map window] (17) 七、监视与监察器[Watches and inspectors] (19) 八、线程[Threads] (19) 九、调用栈[Call stack] (20) 十、调用树[Call tree] (21) 十一、选项[Options] (21) 十二、搜索[Search] (22) 十三、自解压文件[Self—extracting (SFX) files] (22) 十四、单步执行与自动执行[Step—by—step execution and animation] (23) 十五、Hit跟踪[Hit trace] (23) 十六、Run 跟踪[Run trace] (24) 十七、快捷键 (26) 十八、插件[Plugins] (29) 十九、技巧提示[Tips and tricks] (29) 第四章其他功能 (30) 一、调试独立的DLL[Debugging of stand—alone DLLs] (30) 二、解码提示[Decoding hints] (32) 三、表达式赋值[Evaluation of expressions] (32) 四、自定义函数描述[Custom function descriptions] (34)

初学者硬件开发步骤

嵌入式系统硬件开发自学方法简介 1.概述 最近因为工作的缘故,接触到了100多人的2012年的大学毕业生,他们今后的工作方向都是嵌入式系统的开发,具体来讲,也就是即将从事基于Android的智能手机、平板电脑等设备的开发,从我与他们的交流的情况来看,他们的困惑很多,具体表现以下几个方面: 1.1.想从事硬件开发的人,不知道一个硬件产品是如何做出来的,只有少数的人能够绘制简单的原理图和PCB,很多人对此几乎是一无所知。 1.2.一些想从事软件开发的人,分不清什么是驱动软件开发、上层应用软件开发,很多人只有点基本的C、C++语言的概念,在学校里自己写过几百行代码以上的人,也是寥寥无几,几乎搞不清楚自己以后到底想干什么和自己到底适合做什么工作。 1.3.因为开发一个产品是个复杂的事情,很多毕业生几乎是无法自己决定如何入手来开始他们的学习过程,基本上处于迷茫中。当然也有一些在学校参与过一些竞赛的同学,有一点基础的知识,绝大多数的人都需要重新开始思考他们该如何融入今后的工作。 1.4.基础知识薄弱,很多想搞硬件设计的人搞不清楚一些基本的模拟电路、数字电路的工作原理,想搞软件开发的人,对于软件编程的理念也了解不深,几乎都需要重新培训。 2.硬件开发学习的几个过程介绍 2.1.设计一个最小的基于单片机的嵌入式系统 任何硬件系统的设计,都要绘制原理图、印刷电路板,因此学会使用一种绘制原理图和印制板软件的使用,是未来从事硬件设计的基础,建议可以先购买一套简单的基于单片机的开发板,然后自己再将其复制出来,来锻炼自己的设计能力,这样子做有如下几个优点: 2.1.1.可以锻炼自己绘制原理图和印刷电路板的能力。 2.1.2.不用自己编写软件来测试自己的设计,可以利用开发的测试程序来验证自己的设计是否正确。 2.1. 3.可以锻炼自己采购器件的能力。 2.1.4.可以锻炼自己使用基本的工具的使用能力,例如:电烙铁、万用表等等。 2.1.5.花费比较低,一个人独立承担的话,也就是500元左右的花费,如果几个人合作开发的话,每个人花费100元左右就可以了,与学到的技能相比,这点花费根本算不了什么。 2.1.6.可以锻炼自己的综合素质,至少也可以了解一下如何将示范软件在自己设计的系统上运行起来,也可以了解一下嵌入式系统软件是如何开发出来的,为以后与软件设计人员在一

相关文档
相关文档 最新文档