[转]ADS简要教程

http://bbs.61job.cn/space/viewspacepostlist.aspx?spaceid=7

ADS简要教程

经过一段时间对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.h44blib.c定义了一些有关初始化的函数,而44binit.s呢?看不懂,到这里我的ARM程序就没法往下做了,只有在网上再找资料,看这个函数到底是干什么用的,原来这就是以前经常听说的“bootloader”或着说是“起运代码”,或着说是“ARM的引导程序”,就是处理器在启动的时候执行的一段代码,主要任务是初始化处理器模式,设置堆栈,初始化变量等等.由于以上的操作均与处理器体系结构和系统配置密切相关,所以一般由汇编来编写(关于这方面的内容大家可以查看相关资料)。所以又花了几天时间来专门学习“44binit.s”这个文件。从对这个文件的学习中,了解了不少关于ARM程序设计的知识,并对ARM程序设计的整体框架学习有了一个大体上的了解,学完这个,几天来第一次这么有信心,以为了解了这样ARM就可以很容易了。

 

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

 

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

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

 

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

 

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

要说的就这么多了,下边通过例子简单演示一下用ADS开发的过程。

说明:ADS包括两个部分CodeWarrior for ARM Developer SuiteAXD 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 : 使用该目标为每一个源文件生成最完全的调试信息。

   (注意,本例中使用了DebugRelRelease两项分别做了调试和下载文件的生成)

 

 

 

 

 

 

3. 首先在2中选DebugRel(默认的),点 按钮,进行DebugRel Setting设置

     在里就说三点生重要的:

1):Target->Target Settings 做如下设置:

 2):linker -> ARM Linker设置如下:

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

 

 

 

 

 

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

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

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

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

hex文件)

OK 好了,可以编译了,编译后就会生成用于调试的文件,可以能过来调试,点

分别表示:选择要编译的文件,make debug Run.

4.AXD调试:

ADS窗口中点bebugrun之后,会跳出AXD调试界面:

Options>configure target)对AXD进行配置

因为用wiggler来调试,要对AXD做以下设置:

(第一次使用时也要对AXD设置)如下对话框中,选择ADP > Configure

Setting… 选择ARM Ethernet driver :

OK >Configure Target IP address 填写127.0.0.1

OKOK , Configure Target 配置完成,下来我们来配置Configure Interface….选项:

Option > Configure Interface …

在出现的对话框中:

 General标签下:

Target connection 下拉列表中选择:ATTACHconnection 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)来分代替GPD0OK问题解决了,怎么也没想到就这样一个问题又让我调了两天,哎,看来以后还是得更细心一些了。

 

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

 

原文地址:https://www.cnblogs.com/pumax/p/1816497.html