当前位置:文档之家› arm入门心得.

arm入门心得.

arm入门心得.
arm入门心得.

[转]关于ARM 入门与学习方案

一首先说说ARM 的发展

可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位。广义的嵌入式无非几种:传统的什么51、AVR 、PIC 称做嵌入式微控制器;ARM 是嵌入式微处理器;DSP ;FPGA 。

客观的讲,工作需求量上DSP 的需求比ARM 要多,而ARM 和FPGA 差不多。

DSP 因为数字处理与通信领域的空前发展而火暴,小到MP3 射象头,大到我们军品里的控制器,应用面很广。

FPGA 的兄弟一般做ANSIC (特殊芯片设计,好象是这么翻译的)。

而ARM 单纯说来并不比一个单片机强多少,但是它的独特就在于不断下降的价格和提升的性能。这完全依靠于ARM 公司的战略,厉害!!很佩服他们的战略眼光!!

值得注意的是:在找工作校?笠担ㄖ??模?〉牟凰悖┒缘ゴ康腁RM 硬件开发工程师并不比单片机重视,很少有大企业的职位里写“从事过ARM 开发优先”。

写的多的是什么?“嵌入式LINUX ”

到这相信大家看出来了吧,需要的是硬件中的软件。

二 ARM 是硬件还是软件

很难说,ARM 是硬件,LINUX 是软件。

ARM 的硬件多半已经模块化了,像我这样把板子改成这样的就算动的多的了,这同样是ARM 公司的战略,再次佩服。

实际中的LINUX 的开发工作更多,更耗时。从这方面说ARM 应该算是软件了。

在找工作中更是这样,举个例子,联想里和ARM 最接近的是“BIOS 工程师”是软件,MOTO 里接近的是嵌入式LINUX 工程师是软件。而其他很多公司把嵌入式产品开发归为硬件。所以,不要讨论这个,好好玩转自己的板子才是关键。实在不爽你就把自己叫“嵌入式开发工程师”

三要不要买开发板买哪家

我的答案是“在你个人的学习方*”,但是如果看家是需要看这骗笔记的水平,个人推荐还是买现成的。

1 买

买板子可以把注意力集中在软件开发上,软件开发(尤其是驱动)可以不必担心自己硬件上的问题,我就是以便调试一边写驱动和程序,每次写驱动前就要先确认硬件没问题。

另外,买板子更省钱和时间,我自己做的板子,原理图PCB 花了2周以上!制版又15天,回来以后焊接44B0 160个脚!那叫一个麻烦~~花了多少钱呢?2层板,制版费就300块!当然我把接口都外引了,还做了个20X18的LCD 背板,板子比较大。

总体下来元件+LCD屏+PCB=11XX块!够2410的了。

再有就是买的资料相对来说比较全,但是不要指望有技术支持!都是骗人的,卖你之后就不会理你。

2 做

自己做可以更了解底层硬件,可以按照自己的要求加东西,比如我就加了GPS 模块、 GPRS 模块、SD 卡模块,扩了个IIC 的35个键子的键盘、把LCD 接口按照买的LCD 改装了,可以

用FPC 线直接连接。做的很爽的。玩一把吗。

当然,你可以有策略的做,比如像我一样,把RAM 和ROM ,网络都保持和某现成的板子一样,这样他们的资料你就可以拿过来直接用,给自己留个退路。其他的如SD 了什么的自己做。都达到了~~就是费钱,费时间。

再有就是给做的朋友几点建议:尽量拿到现成的板子,尽量多搜集其他板子的全套资料,一定要拿到一张没问题的原理图。

网上流传的原理图多数是龚俊03年画的,再这里对龚俊表达一下我的敬意!!牛人!

但是那个图有个小BUG ,我指的是03版的,后来的没这问题了。8019那地址线和地址有问题。还有人仿照他的PDF 图画的SCH ,更是漏洞百出!谴责!顺便谴责把龚俊板子偷卖的人。

3 买哪家

个人感觉分3类吧

1)首先是ZLG 的,资料非常的全,感觉他是真正想教你怎么开发ARM ,而不是像有的公司自己技术都没做好就做个板子出来卖钱。但是最大的不利就是价格太贵!而且主要是PHILIP 的,货源比较麻烦~~可能有人说21XX 系列的不贵啊,那是总线不外扩的,只能跑UCOS ,不能跑UCLINUX 。但是说是话,21XX 系列才是ARM7的价格性能结合点。ARM7最适合做工业控制,ARM 普及,销量都是怎么来的?都是ARM7来的,而44B0是典型的商业片子。但是,这里如果你看中的是为工作做准备,还是选能跑UCLINUX 的吧。

但是仍然作为第一个推荐,因为菜鸟时期,合适的资料太重要了!!在这里被ZLG 的务实*感动!你看人家那代码写的。

2)感觉立宇泰的44B0不错

硬件没别的,就是资料比较全的说,不像有些家,原理图直接拿人家的,还错的~~

3)找个最便宜的

好象最便宜的有卖350的吧?也是没别的,就是即省了钱还省时间搜集资料,至于资料全不全,别计较了~~硬件肯定好使就行吧。

四要不要有51 AVR等单片机基础

有更好,但没有也无所谓。

两个月以前,我只是看别人做,耳濡目染~~,本科学过单片机,从来没做过。我们这的技术主干做AVR 和51,我就跟他们调过C 语言程序。你看出来了?我是个不折不扣的菜鸟吧?但是做这个之前我特意找了ZLG 的两本书,看了里面的例子和原理图,这很重要。例程里有汇编有C ,都看懂了就OK ,不用自己现写

五开发都需要学习哪些软件

总结起来最主要的有以下几个吧

1 ADS调试用

确切的说是ADS+AXD。ADS 里包含AXD 。原来都用SDT 后来ARM 公司停止对SDT 支持了,改支持ADS 了,还是用ADS 吧。

有的人的程序发布的仍然是SDT 版本的,但基本都可以找到相应ADS 的,新人在这里不要发蒙。ADS 是编译器,AXD 是调试器。便宜成AXF 以后再在ARM 的RAM 里调试。

2 PLASHPGM

FLASH 烧写的软件。AXD 在RAM 里调试,掉电就没有了,方便程序修改。调试好的程序再

下到FLASH 里,上电直接运行。

同类的软件还有很多,什么FLUTED 了、FLSHP 了都是,但FLASHPGM 最好,要是有人还问FLASH 不支持BIN 格式文件的问题就要看我写的PLASHPGM 使用了。

3 BANYANT调试代理(不知道名对不,起这么个难记的,我一般都叫它“半羊”因为知道它那几天刚吃了烤羊)

调试代理就是用它帮你使用更简单的JTAG (便宜啊)来实现原本1K 才卖的JTAG 仿真器的大部分功能。JTAG 调试原理看我另一篇笔记。简单的就可以把他理解为你自己做的JTAG 的驱动就行了。

调试代理还有很多种,什么H-JTAG 了、ARM7了(不知道具体叫什么,就记得可执行文件叫ARM7.EXE )都是,BANYANT 比较好。

需要注意的是,没种调试代理安装方*虽然都简单但都不一样,需要看说明。而且AXD 调试之前都要运行。省钱了,就别怕麻烦了。

4 ARM-ELF-TOOLS工具链

里面是UCLINUX 开发用的工具比如ARM-ELF-GCC 只类的。工具链就是把很多工具打包在一起发布的方便你开发的东西。具体安装方*看我另一篇笔记。

另外如果你开发LINUX 就要用ARM-LINUX-TOOLS ,不一样,不通用。

5 U-BOOT

大名鼎鼎的BOOTLOADER 生成工具,同类的好象还有VIVI (名字很暧昧~~)

生成的BOOTLOADER 烧到FLASH 里,然后就可以用BOOTLOADER 下载烧写其他了

有了BOOTLOADER 才能下UCLINUX 。BOOTLOADER 就像电脑上的BIOS 。当然UCOS 的不用这个,用什么我不知道:)

最新版本是1.1.4 具体使用方*看我另一篇笔记吧。

6 UCLINUX包

UCLINUX 的源码包,不用多说了吧?建议大家用现成的先体会一下,然后再自己编译,裁剪。因为单独UCLINUX 的编辑技术上比较简单,但涉及的方面还是比较广的。

7 VMWARE

老牌的虚拟机软件,在一个机器上虚拟出一个机器装LINUX (PC 上用的),省得你来回开关机了。记得装VMWARE-TOOLS ,安装方*在我另一篇笔记里。

六有哪些书推荐

主要推荐ZLG 的三本书,有这3本再加网络就不用别的书了,其中主要推荐前2本,3是介绍体系结构的,也不错

1 ARM嵌入式LINUX 系统构建与驱动开发,北航版

驱动写的很详细,前期开发介绍也很好

2 ARM 嵌入式系统实验教程(二),北航版

有ZLG2200的原理图,实验程序和注释,了解人家是怎么开发的。

3 ARM嵌入式系统基础教程

最重要的是体系结构,汇编部分介绍,看看吧,增加理论素质。

4 44B0数据手册

写在这里是强调它的重要。

不推荐ZLG 早期出的红色皮的ARM 什么体系结构~只类的

写的太多,看烦了。

其他的书没了几本,没看见好的,大家有看过的推荐吧。

七选UCOS ?UCLINUX ?LINUX ?VXWORKS ?还是当单片机用

1 搞开发,工程设计,用UCOS ,小巧,多进程,简单,体现了ARM7的精髓。

2 LINUX 正根的嵌入式系统,LINUX 消费与通信领域用的比较多,但缺点是必须ARM9才能跑,ARM9的板子自己做就不行了,6层板太贵。买开发板1K 达底吧。但是还是推荐选ARM9+LINUX

3 UCLINUX 算投机嵌入式系统:)ARM7上可以跑,由有LINUX 近亲,学好好可以比较方便的转向LINUX ,像我一样的穷鬼用吧,呵呵

4 VXWORKS

学好后可以找到高薪工作,但工作机会本身并不比LINUX 好找。

5 当单片机用

不推荐,虽然我景仰的ZLG 一直号召这么干。因为对于学习来说多进程的系统设计才是ARM7的玩头,至少你也要整个UCOS 啊:)

有朋友问我先学这个当基础不行吗?那当然可以~~但我当时就用了1周搞定,就是我先的ADS 在RAM 中调试的笔记。后来我清空FLASH 用的小段程序还是当时写的LED 闪烁程序呢。另外1周里其中还因为自己过于菜,没把OM 设置好导致晶阵不阵

哈哈。这个是必须做的,但一带而过。目标放的远一点。

八学习要用多长时间

我从菜鸟到现在两个多月,中间被打扰数次。仍然搞定了PCB 设计与制版,RAM 调试,FLASH 下载,UBOOT 移植和下载UCLINUX (没剪裁,用现成的),LCD 驱动。

再次坦诚的说:我确实比较菜,说这些不是让大家羡慕,只是告诉你们“你们应该比这个更好” 我相信良好的态度+合适的方*+及时的总结=成绩

九 ARM 都玩什么

就几点

1 硬件设计

2 系统移植

3 驱动开发

4 应用开发

没了。其中推荐把注意力放在后两个上,3有难度,4比较灵活,最重要的是都是找工作的砝码。

十我用的什么板子

很多人问我这个问题,我特意写过一个的。再说一次吧。

我是自己做的,RAM 、ROM 、8019等比较麻烦而当时的自己不理解的都按照龚俊的做的。保持其他不便的情况下做了如下改动。

1 加了串口通信的GPS 模块、 GPRS 模块

一个UART0,一个UART1,当与要用超级终端时用跳线切换。

2 SD卡,和7843触摸屏

同时挂在SPI 总线上,因为SPI 只能挂一个设备,同时还做了I/O模拟的准备,把两个设备又通过跳线挂在4个IO 上。

3 扩了个IIC 的35个键子的键盘

用的ZLG 的7290,不占用CPU ,最大支持64个键子,只上了35个,其他留接口。

4 把LCD 接口按照买的LCD 改装了,可以用FPC 线直接连接。

所以改动虽然多,但真正很移植了,初期调试有关的并没动,就是为了现在不那么菜的时候做准备:)

十一开发流程

这里是我的开发流程

1 设计原理图(含WIGGLER 的JTAG 访真器)

2 设计PCB (含WIGGLER 的JTAG 访真器)

3 制版

4 焊接电压,确定电压没问题

5 焊接44B0+JTAG电路+WIGGLER的JTAG 访真器+周边电路,用BANYANT+仿真器连接,BANYANT 提示错误,但可以显示44B0编号,好象是0X0F0F0F0F 只类的,说明44B0没问题

6 焊接晶体+RAM+ROM+周边电路,用BANYANT+仿真器连接,可以显示正确的44B0了

7 用BANYANT+仿真器连接,开AXD ,在命令行窗口操作RAM ,看可不可以修改,可以的话(用内存窗口看RAM 地址)RAM 就没问题

可以用这个命令“setmem 0xc000000,0xffffffff,32”

我的RAM 挂在BANK6上所以地址是0XC000000,你要是改了就也得改。

8 用我写的《自己写了个C 工程模板又写了个使用说明》里的方*调试程序吧,写个简单的,我当时写个LED 闪烁的。看好使不。

9 把程序按照《FLASH 烧写总结》里的烧到FLASH 里,测试一下

10 按照《UBOOT 移植操作》移植UBOOT

11 按照《UCLINUX 下载简单说明》下个UCLINUX

12 看看驱动开发的方*,自己写个驱动看看

13 还有很多事东西着你玩呵呵

十二关于JTAG 访真器

JTAG 访真器现在用的多是简板的,一个244那种,用的没什么不好。

按照并口定义不同分几种,建议选WIFFLER 定义的,因为支持的软件多。这个网上多的是,不多说了。

值得提的是有的JTAG 访真器原理图上有跳线用来使能复位信号,这个一般不跳上。就是不

用复位信号,因为 JTAG 协议里本身也可以控制44B0复位。当然,板子上的复位信号跳线也不用跳。十三哪个公司的 ARM 这个是问题比较简单。 1 ARM7主要就几个公司的三星,PHILIP,ATMEL 的 ATMEL 的有比较便宜的

AT91SAM7S32 和 AT91SAM7S64 专为8位应用产品量身定做,价格很便宜好象《3刀吧。和 PHILIP 的21XX 差不多,资料太少,项目中选还不错。其他两家上面说了的不多说了吧 2 ARM9 这个玩2410和2440的多吧,现在2440还比较火啊可以考虑买个了但是2410就比较便宜了,作为学习来说反到和不错,推荐整一个:)其实 ARM9用的最多的领域应该是消费电子,比如手机 PDA,而这上面用的多的应该是 INTEL 的和 TI 的吧。但是 INTEL 的 TI 的入门材料少,价格高,自己看情况定吧。自己写了个 C 工程模板又写了个使用说明(转载) 2007-06-11 18:06 C 工程模板使用说明本模板用于使44B0运行 C 程序一般说来汇编用来初始化之后跳到 C 入口 MAIN 函数处一、关于工程文件 1、本目录下建工程文件

(.MCP) 2、工程文件至少包含3个文件44binit.s 44blib_a.s *.c(自己的 c 文件Option.s 用于基本设置 3、44binit.s 中开头部分 INCLUDE 两个文件 MEMCFG.S 注意这两个文件的存放目录,即让 INCLUDE 找到它们 4、以上文件除自己的 c 文件之外均为三星公版,不需修改二、关于 CodeWarrior 设置 1、DebugRel Setting 里一般设置几项 1)Target Setting->Linker 里选 ARMLinker 用于设置连接 2)Target Setting->Post-Linker 选 ARM fromELF 用于生成 FLASH 烧录代码(只在 RAM 里运行而不烧录则不用) 3)ARM Linker->RO BASE 里添地址根据板子来,这板子上RAM 接的 NSCS6,地址0XC000000-0XC7FFFFF; FLASH 接的 NSCS0,地址

0X00000-0XFFFFF 地址分配原理见44B0数据手册内存管理那章的内存分配图想在 RAM 里调试就添0XC000000(比如0XC008000)的地址但是注意的是地址不要添过界,比如想在 RAM 里调试却添0X00000000 程序可以进入 C 代码但没法

运行再有想生成用于烧写得 FLASH 代码 RO 地址就需要设置为0X0000000开始的而且 LAYOUT 中也必须

设置44BINIT.O 为初始加载文件以上 FLASH 测试结论经 FLASHPGM 测试而且 FLASHPGM 不支持 BIN 文件只支持 INTEL 得 HEX 文件 4)RW 可以添可以不添一般 RO 解释为代码段,RW 解释为数据段有时高兴了就添上0XC100000(RAM 调试时) 5)ARM Linker->OPTION->Image entry point 选择0xc000000(RAM 调试时) 6)ARM Linker->Layout->Object/Symbol 里可以添工程起始程序44BINIT.O 注意是.O 不是.S 和.0 (零)也可以不添三、AXD 设置 1)按照BANYANGT 或者 ARM7正确设置调试代理 BANYANGT、ARM7、H-JTAG 都是代理,装哪个无所谓,一般认为 BANYANGT 好,但无论哪个调试之前必须运行代理 2) option->configure interface 里在 session file 选择 44b0.ini 这个文件是初始化44b0寄存器的,在必须运行 3)Options->Configue Target 里本来有两项,上面上是硬件调试,下面是软件仿真(在电脑上仿真)用 ARM7就改第一项(按照ARM7说明改)用 BANYANGT 就按照 BANYANGT 说明在下面再加,个BANYANGT 的驱动 4)在 general 标签页选择 attach,然后确定,最后在 file->save session,关闭 AXD(在 CodeWarrior 里一 DEBUG 就自动打开)四、关于 JTAG 1)JTAG 一般有几种 SDT 和 WIGGLER 我的是 WIGGLER 的,两者区别主要在并口25针定义不一样(不算复位脚),与板子上 JTAG 相连的脚不是区分 JTAG 类型的标志只要和44B0对上就行 2)JTAG 小板上与44B0大板上 JTAH 跳线 RAM 调试时都不用接烧 FLASH 才用到 3)网上流传的 JTAG 小板上也有不用 RST 信号的版本,无所谓,RST 信号不是标准的五、另外开始的时候犯了低级错误,没设置OM1 2 3跳线导致晶体不阵~~~ 其他的看万龙的 ARM 开发板使用手册,写的还不错模板:user94/mamajinco/upload/825806664.rar 这部分可能过于简单,很少有人写,但是对于不了解 ARM 开发过程的人真的简单吗?我是菜鸟,在这卡了3天:)一般说来有几种方法, 1)板子原来的 BOOTLOADER 程序或者为烧写而编写的专用 ADS 程序比较高级而快速的方法,很多现成的开发板都用这种方法(相对来说有实力的公司),此状态下 CPU 是运行的,所以速度快。比如 ZLG 的,但是对于初学或者不准备细研究硬件的人来说就比较麻烦,因为要编写(改

写) ADS 烧写程序。愿意的人可以看看。 2)FLUTED 和 FLASHPGM 一样,使用的好象叫边界扫描法,CPU 此时并不运行,因此烧写的比较慢。在这里也不推荐 FLUTED 这个软件,原因比较简单,麻烦+速度慢。因为需要编写(改写)两个配置文件,而且是字符界面。倒是有人说这个软件只能在 WIN98下用的说法好象不对(现在有可以让2000和 XP 下用的方法)

喜欢的朋友可以用用 3)FLASHPGM(推荐)很简单的程序,GUI 界面,速度尚好。设置很简单,在 CPU 里选对型号,当然是3星的44B0。在 FLASH 里也一样,39LV160,29LV160 都有。确定好地址,RAM 地址我的是0XC000000(BANK7上) FLASH 地址0X0(BANK0上)选完了以后读一下 FLASH 的 ID (左下脚的按钮吧)能读出厂家的 ID 就行。然后是烧写了,PROGRAME 按钮,注意的是 FLASHPGM 不支持 BIN 格式,按照下面方法处理。再有就是尽量在写之前擦一下,PROGRAME 菜单里有个选项,打个钩就 OK。具体烧写方法可以看我总结的另一篇文档,在这里只说说 UBOOT 相关的。前面说过 UBOOT 编译以后产生3个文件 u-boot——ELF 格式的文件,可以被大多数 Debug 程序识别; u-boot.bin——二进制 bin 文件,纯粹的 U-BOOT 二进制执行代码,不保存 ELF 格式和调试信息。这个文件一般用于烧录到用户开发板中; u-boot.srec——Motorola S-Record 格式,可以通过串行口下载到开发板中。 FLASHPGM 不支持 BIN 格式的,可以烧写 u-boot——ELF 格式的文件,别看它没扩展名,一样烧写。还有,如果你懒(和我一样)拿别人现成的 BIN 文件来烧,, FLASHPGM 还提供了一个 BINTOS19 的程序,就在它的安装目录下。具体用法运行它,它自己就告诉你了。注意:有时(尤其是 FLASH 里已经有程序的时候)0XC000000会莫名奇妙的提示内存不可以写,有几个方法可以试试:把地址改成0x10000000(好象是缓存地址),之后点 EREASE 擦除芯片,擦除一般说来是不成功的,最后无论如何都下不去,没关系,这时候关闭擦除对话框,然后 0x10000000地址不变,烧FLASH,我一般是烧写一个我自己写的 LED 测试小程序把内存占上:。)回来这时候再把0X1000000换成0XC000000再按照正常操作,一般可以正常。这现象的原因就是过去下的程序(多数是不正确的程序)正在运行占用了 RAM 与ROM,下个 LED 测试小程序就是把这几个部分清除掉。如果以上方法还不正常,

可以用另一个程序叫 FLASHP 就差2个字母:)很好!在这里对这个程序的作者致敬!!用这个软件擦 FLASH,然后再用 FLASHPGM 烧,原因是 FLASHP 擦厉害,但写好象有些问题~~

软件破解入门教程

先教大家一些基础知识,学习破解其实是要和程序打交道的,汇编是破解程序的必备知识,但有可能部分朋友都没有学习过汇编语言,所以我就在这里叫大家一些简单实用的破解语句吧! ---------------------------------------------------------------------------------------------------------------- 语句: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之方法入门篇(基于arm7内核)

by:爱雪胡 想必有很多同学都有这样的经历,学过了51单片机之后,想要学习ARM,但又无从下手,关于ARM的学习视频或资料又没有51的那样好理解,结果花了好长时间也不得其法。我也曾是一个初学者,也是从这个过程走过来的,对其中的困难深有感触,闲来无事,把自己的学习过程及心得体会记录成文,希望能对处在纠结中的孩纸有点帮助。ps:我不是大神,本人菜鸟一个,如有疏漏,还望不吝赐教qq:1906723068 首先说一下我用的芯片,是LPC2103,ARM7内核的,相信很多人也用过,ARM9比较高端,目前还没有学完。个人感觉ARM7还是作为单片机使用比较好,不适合用它来跑系统,因为它主频不够高(能提到60多M貌似),我就是把它单纯作为一个32位的单片机来使用的。 ARM7与51的最大区别首先是CPU位数不一样,这个应该好理解一个是32位单片机,一个是8位单片机,性能上当然前者更好点了,速度更快、功耗更小、外设更多,价格差距也越来越小。一般用的51单片机多为STC89C52或其同类产品如图所示:

51的外设一般比较少,以上图为例只有UART,定时器资源,其他功能基本需要另加元件,比如AD芯片、DA芯片、有些功能还只能靠软件模拟,如SPI接口,IIC接口,PWM等,在简单的控制系统中51是非常厉害的,但是在一些复杂控制并且对体积功耗等要求严格的系统中,51就力不从心了,这时ARM7就非常好用了,它速度快,体积小(LPC2103的面积还不到1平方厘米),外设多(集成有2个UART,1个SPI,2个IIC,1个SSP,2个定时器,PWM,AD,RTC等)这样就非常方便好用。 最开始学习ARM我们最希望弄明白的就是怎么去操作它,具体来说就是我买一个学习板,怎么把程序下载到芯片里边并让程序跑起来,这和我们学51时点亮第一盏等的想法是一样的。这就要求知道3点: 1.编程,即使用什么软件去编程序; 2.烧程序,即使用什么烧录程序软件; 3.怎么烧,是用串口ISP下载还是使用JLINK烧录 对这3个问题我一一解答。1.编程序,一般使用IAR或ADS或Keil,如果想很快上手建议使用IAR,不过我用了一段时间之后感觉并不好

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键。场景视图将移动以居中显示当前选择的物体。这个命令是非常有用的,你将在场景编辑的

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

汇编学习从入门到精通Step By Step 2007年12月15日星期六00:34 信息来源:https://www.doczj.com/doc/789094416.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毛,我记得很清楚,呵呵。 废话终于完了,感谢各位能看到这里,下面进入正题吧。

嵌入式学习心得体会5篇

嵌入式学习心得体会5篇 嵌入式学习心得体会(一) 首先我声明,我是基于嵌入式系统平台级设计的,硬件这个方向我相对来讲比较有发言权,如果是其它方面所要具备的基本技能还要和我们培训中心其它专业级讲师沟通。他们的方面上我只能说是知道些,但不是太多,初级的问题也可以问我。 对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的modem 射频模块,都采用成熟的套片,而当年国际上只有两家公司有此技术,自我感觉模拟功能不太强的人,不太适合搞这个,如果真能搞定到手机的射频模块,只要达到一般程度可能月薪都在15k以上。 另一类就是数字部分了,在大方向上又可分为51/arm的单片机类,dsp类,fpga 类,国内fpga的工程师大多是在ic设计公司从事ip核的前端验证,这部分不搞到门级,前途不太明朗,即使做个ic前端验证工程师,也要搞上几年才能胜任。dsp 硬件接口比较定型,如果不向驱动或是算法上靠拢,前途也不会太大。 而arm单片机类的内容就较多,业界产品占用量大,应用人群广,因此就业空间极大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互pk,判定水平高低的依据。而接口设计这块最关键的是看时序,而不是简单的连接,比如pxa255处理器i2c要求速度在100kbps,如果把一个i2c外围器件,最高还达不到100kbps的与它相接,必然要导致设计的失败。这样的情况有很多,比如51单片机可以在总线接lcd,但为什么这种lcd就不能挂在arm的总线上,还有arm7总线上可以外接个winband的sd卡控制器,但为什么这种控制器接不到arm9或是xscale处理器上,这些都是问题。 因此接口并不是一种简单的连接,要看时序,要看参数。一个优秀的硬件工程师应该能够在没有参考方案的前提下设计出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇到一个工程师

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

ARM基础知识(强烈推荐)

ARM基础知识(强烈推荐) ARM基础知识一 ARM处理器共有37个寄存器。其中包括: **31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。 **6个状态寄存器。这些寄存器都是32位寄存器。 ARM处理器共有7种不同的处理器模式,每一种模式中都有一组相应的寄存器组。在任何时刻,可见的寄存器包括15个通用寄存器(R0-R14),一个或两个状态寄存器及程序计数器(PC)。在所有的寄存器中,有些是各模式公用一个物理寄存器,有一些寄存器各模式拥有自己独立的物理寄存器。 **************************************************** 通用寄存器 ***************************************************8 通用寄存器分为以下三类:备份寄存器、未备份寄存器、程序计数器PC 未备份寄存器 未备份寄存器包括R0-R7。对于每一个未备份寄存器来说,所有处理器模式下都是使用同一个物理寄存器。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的场合都可以使用未备份寄存器。 备份寄存器 对于R8-R12备份寄存器来说,每个寄存器对应两个不同的物理寄存器。系统为将备份寄存器用于任何的特殊用途,但是当中断处理非常简单,仅仅使用R8-R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中断处理非常迅速。 对于R13,R14备份寄存器来说,每个寄存器对应六个不同的物理寄存器,其中的一个是系统模式和用户模式共用的;另外的五个对应于其他的五种处理器模式。采用下面的记号来区分各个物理寄存器: R13_ 其中MODE可以是下面几种模式之一:usr,svc,abt,und,irq,fiq 程序计数器PC 可以作为一般的通用寄存器使用,但有一些指令在使用R15时有一些限制。由于ARM采用了

嵌入式经典书籍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),有九个有意义的标志,将在下文用到时详细说明。

ARM嵌入式系统基础教程第二版课后习题答案

第1章嵌入式系统概述 (1)举出3个本书中未提到的嵌入式系统的例子。 答:键盘、鼠标、扫描仪。 (2)什么叫嵌入式系统? 答:嵌入到对象体系中的专用计算机应用系统。 (3)什么叫嵌入式处理器?嵌入式处理器分为哪几类? 答:嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。分为3类:1.注重尺寸、能耗和价格;2.关注性能;3.关注全部4个需求——性能、尺寸、能耗和价格。 (4)什么是嵌入式操作系统?为何要使用嵌入式操作系统? 答:嵌入式操作系统是操作系统的一种类型,是在传统操作系统的基础上加入符合嵌入式系统要求的元素发展而来的。原因:1.提高了系统的可靠性;2.提高了开发效率,缩短了开发周期。3.充分发挥了32位CPU的多任务潜力。 第2章ARM7体系结构 1.基础知识 (1)ARM7TDMI中的T、D、M、I的含义是什么? 答:T:高密度16位Thumb指令集扩展;D:支持片上调试;M:64位乘法指令;I:Embedded ICE硬件仿真功能模块。 (2)ARM7TDMI采用几级流水线?使用何种存储器编址方式? 答:3级;冯·诺依曼结构。 (3)ARM处理器模式和ARM处理器状态有何区别? 答:ARM处理器模式体现在不同寄存器的使用上;ARM处理器状态体现在不同指令的使用上。 (4)分别列举ARM的处理器模式和状态? 答:ARM的处理器模式:用户模式、系统模式、管理模式、中止模式、未定义模式、中断模式、快速模式;ARM的处理器状态:ARM状态、Thumb状态。 (5)PC和LR分别使用哪个寄存器? 答:PC:R15;LR:R14。 (6)R13寄存器的通用功能是什么? 答:堆栈指针SP。 (7)CPSR寄存器中哪些位用来定义处理器状态?

ARM学习心得etc

ARM 学习心得 一、通用I/O口设置: 1、使用PINSELx定义端口作为通用I/O功能, 每个引脚可能有4 个功能, 因此需要用2位来确定其功能 2、设置SCS寄存器第0位为1, 使其作为快速I/O端口 3、使用PINMODEx定义端口的模式, 分为上拉, 下拉, 浮空, 因 此需要用2位来确定其模式 4、使用FIOxDIR来确定端口方向 5、使用FIOxMASK与FIOxCLR, FIOxSET, FIOxPIN联合来设置端 口的值 6、由于通用I/O一般情况下方向是确定的, 通常或者为输入, 或者为输出, 要模拟数据总线, 必须在需要的时候, 随时 改变端口的方向, 可使用FIOxDIR寄存器完成此项工作 7、除EXTINT0-EXTINT3外,端口0和端口2均可以作为外部 中断源,它们共用EXTINT3这个外部中断。 8、根据实际情况合理选用。主要对上电时的初始值。上拉或 下拉都是弱的,有时也用外部分电阻上/下拉。对于输入, 上拉表示通用端口所连接的外部信号不存在时, 端口值 为1, 下拉为0。对于输出,如果没有更改时,上拉输出 为高(1), 下拉输出为低(0)。FIOxPIN总是可以读出端口的 状态。FIOxPIN对非通用I/O端口也可读出其状态。 9、对于内置(片上)外设, 如UART, CAN, SPI等:使用PINSELx定

义端口作为特定外设。通常情况作为外设的引脚的方向是 确定的,如果可能,还会自动改变方向。大多情况下,无 须设置上拉或下拉模。设置外设的参数,如果需要的话, 安装中断服务程序外设上电(有些外设默认是上电的,有些 不是)启动外设 二、以太网模块心得 实例1: 以微处理器LPC2368为核心、DP83848C为以太网物理层 接口芯片,介绍嵌入式以太网接口的实现方法。 以太网接口电路主要由MAC控制器和物理层接口 (Physical Layer,PHY)两大部分构成。LPC2368内嵌一个 以太网控制器,支持精简的媒体独立接口(Reduced Media Independent Interface,RMII)和带缓冲DMA接口(Buffered DMA Interface,BDI),可在半双工和全双工模式下提供 10M/100Mbps的以太网接入。因此,LPC2368内部实际上 己经包含了以太网MAC控制,但并未提供物理层接口,所 以,需要外接一片物理层芯片以提供以太网的接入通道。 在这里选用National Semiconductor公司的DP83848C作为 以太网物理层接口芯片,它提供了包括MII/RMII/SNI接口, 可以很方便地与LPC2368连接。 DP83848C是一个10/100Mb/s单端低功耗物理层器件,有 几种智能降功耗模式,包括有25MHz时钟输出,很容易通过

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处理器的高速图像采集和图像解压缩),目前主要还要靠汇编写程序(我看到过很多公司是这样做的)。当您在一个嵌入式公司工作时,在查看描述原理的手册时,可能很多都是用汇编描述的(我就遇到过),这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时您就必须看懂汇编程序,否则软硬件人

arm嵌入式linux安装课程设计心得

arm嵌入式linux安装课程设计心得 篇一:116709047陈俊松嵌入式Linux课程设计 福建农林大学金山学院电子信息类课程设计 课程名称:设计题目:姓名: 系: 专业:年级:学号:指导教师:职称: 嵌入式linux应用开发课程设计嵌入式linux Web服务器的设计 陈俊松信息与机电工程系电子信息工程2011级116709047 朱仕浪讲师 2014年11 月24 日 福建农林大学金山学院电子信息类 课程设计结果评定 目录 设计的目的

-------------------------------------------------------- 1 设计要求---------------------------------------------------------- 1 主要仪器设备(软硬件环境)---------------------------------------- 1 设计内容---------------------------------------------------------- 1 设计原理---------------------------------------------------- 1 总体方案设计------------------------------------------------- 3 程序设计---------------------------------------------------- 3 程序的调试和运行结果---------------------------------------- 7 总结-------------------------------------------------------------- 8 参考文献---------------------------------------------------------- 9 嵌入式linux Web服务器的设计 1. 设计的目的

ARM指令大全

目录 一、跳转指令 (4) 1、B指令 (4) 2、BL指令 (4) 3、BLX指令 (4) 4、BX指令 (5) 二、数据处理指令 (5) 1、MOV指令 (5) 2、MVN指令 (5) 3、CMP指令 (6) 4、CMN指令 (6) 5、TST指令 (6) 6、TEQ指令 (7) 7、ADD指令 (7) 8、ADC指令 (7) 9、SUB指令 (7) 10、~~~~C指令 (8) 11、R~~~~指令 (8) 12、RSC指令 (8) 13、AND指令 (9) 14、ORR指令 (9) 15、EOR指令 (9) 16、BIC指令 (9) 三、法指令与乘加指令 (10) 1、MUL指令 (10) 2、MLA指令 (10) 3、SMULL指令 (10) 4、SMLAL指令 (11) 5、UMULL指令 (11) 6、UMLAL指令 (11) 四、程序状态寄存器访问指令 (12) 1、MRS指令 (12) 2、MSR指令 (12) 五、加载/存储指令 (12) 1、LDR指令 (12) 2、LDRB指令 (13) 3、LDRH指令 (14) 4、STR指令 (14) 5、STRB指令 (14) 6、STRH指令 (15) 六、批量数据加载/存储指令 (15) LDM(或STM)指令 (15)

IA (15) IB (15) DA (15) DB (15) FD (15) ED (15) FA (15) EA (15) 七、数据交换指令 (16) 1、SWP指令 (16) 2、SWPB指令 (16) 八、移位指令(操作) (16) 1、LSL(或ASL) (17) 2、LSR (17) 3、ASR (17) 4、ROR (17) 5、RRX (17) 九、协处理器指令 (18) 1、CDP指令 (18) 2、LDC指令 (18) 3、STC指令 (18) 4、MCR指令 (19) 5、MRC指令 (19) 十、异常产生指令 (19) 1、SWI指令 (19) 2、BKPT指令 (20) 一、符号定义(Symbol Definition)伪指令 (20) 1、GBLA、GBLL和GBLS (20) 2、LCLA、LCLL和LCLS (21) 3、SETA、SETL和SETS (22) 4、RLIST (22) 二、数据定义(Data Definition)伪指令 (23) 1、DCB (23) 2、DCW(或DCWU) (23) 3、DCD(或DCDU) (24) 4、DCFD(或DCFDU) (24) 5、DCFS(或DCFSU) (25) 6、DCQ(或DCQU) (25) 7、SPACE (25) 8、MAP (26) 9、FILED (26) 三、汇编控制(Assembly Control)伪指令 (27) 1、IF、ELSE、ENDIF (27) 2、WHILE、WEND (28)

关于ARMloader的一些心得.

关于ARM loader的一些心得 最近的项目里需要用KS8695这块MPU,它是ARM922T内核的,有cache,也有MMU,RAM和ROM需要外扩,最大都支持到64M,足以跑起一个完整功能的linux核.虽然这MPU主频最高只有166Mhz,相比三星的S3C2410等性能不是很强,但有内置的硬件WAN口和LAN口,构建网络路由器非常方便. 考虑到各种原因,最主要是实时性响应和速度响应的原因,决定不上linux操作系统,当作普通单片机以单一任务不断循环的方式实现,这就涉及到了loader的问题.由于专用于网络,普及率不大,这块MPU的网上资料不多,随开发板赠送的loader是uboot,uboot 是引导linux内核的,功能多,但要在linux环境下编译和调试,比较麻烦.我习惯用的工具是ADS,因此决定用ADS的汇编实现一个简单功能的loader(以下提到的代码语法全部是针对ADS环境的,而且仅是KS8695这块芯片,对于Keil for ARM或GCC环境或其他ARM芯片需要做别的考虑,但可以参考下面的作法和思路). 玩ARM的朋友,少不免要接触loader,但因为loader涉及到很多跟硬件有关的很抽象的东西,看起来比较复杂和难理解。希望下面说的这些能帮助有兴趣的朋友更好理解。 下面由简单到复杂来说说这个loader。 先想想,这个loader该有哪些功能呢?很明显,最重要的是,它必须最后能调用C语言里的Main函数,因为我不想整个项目都用汇编写,毕竟我不是自虐狂.而很明显,如果你要调用函数,必须进行入栈,出栈这些保护现场的工作,否则程序就会乱套.那保护现场工作需要什么?当然就是需要RAM来保存现场.对于KS8695,它没有内置可随意使用的RAM(实际上,它有特殊的小容量的RAM,但那是给网卡这些做硬件数据缓冲,用户是不能随意调用的,顺便提一下,ARM芯片很多,不同的厂家有不同的硬件配置,譬如很多低端应用的ARM芯片其实有内置的SRAM,譬如菲利浦的LPC系列),因此,就得使用外扩的RAM了.开发板上用的是 SDRAM,SDRAM的本身的特性决定,需要定时刷新的支持,KS8695有内置的SDRAM控制器,只要往某个专用的寄存器写入一些与硬件参数有关的数值,该SDRAM控制器就能自动产生各种读写SDRAM的时序信号来驱动SDRAM。然后用户程序只需用str和ldr指令就能读写SDRAM的内容. OK,现在有点头绪了,loader至少要完成这两个功能: 只要这两部做完,其实就可以调用C里的main函数,然后由main函数再调用各种功能的子函数,以后就爱咋滴就咋滴了. 咋一看,似乎这两步做完,就天下太平了,真的就这么简单吗? 未必,别忘了,几乎所有的CPU都带有中断触发机制.一个稍能完成点实用功能的项目,你想完全避开中断处理这一部分是完全不可能的,也不现实,你必须按你的需要来编写各种各样的中断服务程序,处理各种各样的中断触发(至于中断触发对CPU来说是必需的吗?中断有什么好处?中断时CPU的硬件会做什么动作?...这些就不想罗嗦,有兴趣的可以参考51系列的中断原理作为入门理解).编写中断服务程序,可以在C语言里实现,不要在loader里实现,loader里要实现的,是要建立中断向量表.中断向量表是一个有点专业的名词,请自行查入门资料. 这里说说为什么要建立中断向量表.在51单片机里,是不用自己建立中断向量表的,这是因为标准51核的中断,本身就是一个向量中断(自行查资料),自身硬件里就已经有内置的中断向量表,没必要自己去建立.就是说,当某个中断触发时,51核的硬件会自动把PC置成相应的固定的地址入口来执行相应的中断处理程序,不同的中断触发时,会有不同的地址入口,一一对应,俗称向量中断.但

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),它们主要用于存放存储单元在段内的偏移量,

相关主题
文本预览
相关文档 最新文档