ARM初学入门

更新时间:2024-02-02 03:45:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

经过一段时间对ARM的学习,在这里跟大家说一些前期的学习经验,另外仅以一个例子说明一下ADS的开发过程,因为这也是初学,可能有的地方说的不太好,望大家谅解,另外可以找其它参考资料来学习。

第一部分:ARM前期学习经验

个人认为,要想学好ARM应该首先对ARM的整体框架(包括ARM体系结构,ARM开发过程,及ARM程序框架及执行过程等)有一个了解。这里这就不多说了,这些东西我也只是刚刚开始学习,还没有很好的掌握,就只说一些个人想法吧。

呵呵,因为时间比较紧张,本来说是一个星期搞定ARM,至少拿着书本可以一点点的做着,可是经过上一个星期,到最后,哇,真的快疯了。刚开始拿到实验箱,以为和NIOS一样,多跑一些DEMO应该就差不多会玩了,没想到一开始就碰到一个大问题,ARM实验箱里边带了几本教材和实验指导书,拿着实验指导书做了几个DEMO就做不下去了,因为前两个DEMO还比较简单,就只是用汇编语言写了几条对ARM寄存器操作的语句,学过汇编语言的很快就可以理解了。可是往后就不一样了,因为刚开始学,不太了解ARM程序的框架,实在是看不懂了,为什么每个全程里边都有用到44b.h ,44blib.h ,44blib.c还有一个44binit.s文件?前边三个还容易理解,玩过单片机的很容易就能看出来44b.h里边定义了一些在S3C44B0X内部的寄存器,44blib.h和44blib.c定义了一些有关初始化的函数,而44binit.s呢?看不懂,到这里我的ARM程序就没法往下做了,只有在网上再找资料,看这个函数到底是干什么用的,原来这就是以前经常听说的“bootloader”或着说是“启动代码”,或着说是“ARM的引导程序”,就是处理器在启动的时候执行的一段代码,主要任务是初始化处理器模式,设置堆栈,初始化变量等等.由于以上的操作均与处理器体系结构和系统配置密切相关,所以一般由汇编来编写(关于这方面的内容大家可以查看相关资料)。所以又花了几天时间来专门学习“44binit.s”这个文件。从对这个文件的学习中,了解了不少关于ARM程序设计的知识,并对ARM程序设计的整体框架学习有了一个大体上的了解,学完这个,几天来第一次这么有信心,以为了解了这样ARM就可以很容易了。

可是,没高兴几个小时,做了一些程序,因为开实验箱上带的两个程序都没有注册,其中IDE还好说,很容易就搞定了,可是那个online flash progremmer,哎,我对它一点办法都没有。。。。只能。。。。无奈。。。。

还过现在好了,用自己开发板光盘里带的flash progremmer今天终于可以下载了。

因为老师要做一块简单的ARM系统板,就当是了解一下44B0的硬件吧,我又画了几天的板子,因为protel用的不太好,就只画了原理图部份,不过,这学习ARM的外围电路还算是有很大帮助的。

中间还做了个JTAG转接口,因为想用实验箱上带的ARM仿真器还在我的开发板上用,那个仿真器同20针的,而我的开发板上的JTAG是14针了,还好,还算简单,只要对着两个原理图看看它们的JTAG接口,对比一下,基本就可以搞定了,最后用面包板焊了一个转接口,还不错,能用。可是没办法,那个online flash progremmer地直没能够用上,最后又想实在不行就换开发环境,可是还真不容易,换了ADS(现在看来很简单,也就不过几步),以前玩过几天,因为那时没太多时间玩那个,当时对ARM还不是很了解,玩那个感觉真是一个字“难”,不过还好,今天总算还是有结果了。。。。。。

呵呵,说的很乱,只是我想说个人感觉,学习ARM还是先从整体上把握一下还是比较好,也算是比较快的一种方法,可以不用一开始就去看他怎么编程,内部的一些控制器怎么用等,最好是先了解一下ARM的ARM的整体框架及ARM程序设计的框架。等把这些都看懂了,后边的也就简单了,和学习其它单片机基本上也就差一多了。很简单的~~~

要说的就这么多了,下边通过例子简单演示一下用ADS开发的过程。 说明:ADS包括两个部分CodeWarrior for ARM Developer Suite和AXD Debugger。另外如果要用wiggler调试还要用到ARMJtagDebugFinal(调试代理),如果要烧写flash 还要用

Flash Programmer。在连接开发板调试之前必须先运行调试代理ARMJtagDebugFinal。

1. 和其它软件都一样,一开始当然是NEW一个工程序了:

File -> New: 选择ARM Executable Image , 并输入工程名和路径

完成后会出现口arm_demo.mcp一个窗口,有三个标签,分别为files , link order , target .

默认的为files.

2.软件基本上都一样,下一步就是建立文件,并加入工程了。

这里说明一下,还记得我上边说的那几个文件吧(44b.h , 44blib.h ,

44blib.c ,44binit.s另外还有option.inc , def.h , option.h , memcf.inc等,分别是什么功能大家可以自己看看很容易就看懂),以后基本上做每个ARM的工程都会把它们加入,这几个文件基本上就已经固定了。

除了这几个文件,就是建立自己包含Main函数的文件和一些自己要用到

的文件了。

2. 下来就是对编译的一些设置了,在上边刚刚建的工程中的arm_demo.mcp窗口上有三个标签,基中Targets下边有三个选项,是选择编译规则的:

其中,DebugRel : 使用该目标,在生成目标的时候,会为每一个源文件生成调试信息,

也就是说一般在调试时都选这项。

Release : 使用该目标,在生成目标时不会包含任何调试信息,如果要生成下

载到flash中去的文件的话就选择这项。

Debug : 使用该目标为每一个源文件生成最完全的调试信息。 (注意,本例中使用了DebugRel和Release两项分别做了调试和下载文件的生成)

3. 首先在2中选DebugRel(默认的),点 按钮,进行DebugRel Setting设置 在里就说三点生重要的: (1):Target->Target Settings 做如下设置: (2):linker -> ARM Linker设置如下:

其中ro base 和rw base 的设置参考“ADS中文教程”(这里 ro base 0x0c000000是SDRAM的地址)。

下边填写Image所在的开始段:

一般情况下Object/Symbol 填44BINIT.o , Section填写:Init (Init段是在在44BINIT.s中定义的)

(3)ARM fromELF 设置输出文件,参考下

(注意,因为我用的flash progermme不支持.bin文件的下载,所以这里选择Inter 32位

hex文件)

OK , 好了,可以编译了,编译后就会生成用于调试的文件,可以能过来调试,点 分别表示:选择要编译的文件,make ,debug 和 Run. 4.AXD调试:

在ADS窗口中点bebug或run之后,会跳出AXD调试界面: (Options—>configure target)对AXD进行配置 因为用wiggler来调试,要对AXD做以下设置:

(第一次使用时也要对AXD设置)如下对话框中,选择ADP —> Configure Setting… 选择ARM Ethernet driver :

OK —>Configure :Target IP address 填写127.0.0.1

OK,OK , Configure Target 配置完成,下来我们来配置Configure Interface….选项: Option —> Configure Interface …: 在出现的对话框中: General标签下:

Target connection 下拉列表中选择:ATTACH:connection according to target properties

Session file options 标签下:Reselect Target , Reload Images ,Run Configuration Script都选中: 其中Run Configuration Script下选择的44b0.INI为软件调试时用来初始化寄存器的脚本文件。

应用,确定。 好了,AXD的配置就这些。

下边就可以调试了(注意,用wiggler调试时必须先打开调试代理ARMJtagDebugFinal)。 在以后调试时,点击debug , run 就可以直接调用打开AXD调试了 调试窗口:

和其它软件差不多,有单步调试、全速运行等工能:

不过,很奇怪我没有找到Reset功能,每次重新调试都必须重新Reload Image。 下来我们来生成用来下载到flash 中去的文件: 还记得上边说到的这个窗口吧:

在上边我们调试时,这个窗口选择在DebugRel,而下边我们就要选择Releass了,这样可以生成不带任何调试信息的目标文件了,就可以下载到flash 中去了。 5. 选中Releass标签,点 按钮,进行设置

(1) 与调试时相同Post-linker选择ARM fromELF. 如下图: (2) Linker—>ARM Linker

RO填写0x00000000(flash地址),RW RW可以添也可以不添, 高兴了就添上0XC100000

Layout标签 :这个与前面Debug时的设置一样:

ARM fromELF :也设置和前面一样,只是为了区别前面生成的带有调试信息的目标文件,这里填写目标文件名称为:arm_down.hex:

OK,重新编译,就可生成arm_down.hex文件了,可以把它下载到flash中去,上电就可以运行了。

整了两天了,还好出来结果了,要不就真要有人疯了!!!呵呵。。。

给ARM上装了别个做好的LCD,并没有用到S3C44B0X自带的LCD controller , 而是用了几个GPIO,虽然说只是“移植上去”,可也把我整地够呛,整了两天,不知道为什么那LCD就是不理我,最后经过一点点的测试,可能是因为我开发板上44B0X的一个管脚(GPD0)坏了吧,无法让它输出高电平,找到问题之后,就在GPD0旁边找了一个管脚(GPE1)来分代替GPD0,OK问题解决了,怎么也没想到就这样一个问题又让我调了两天,哎,看来

以后还是得更细心一些了。

好了就说这些了,大家开始自己试试吧!!!

本文来源:https://www.bwwdw.com/article/33fw.html

Top