当前位置:文档之家› ADS新手使用教程

ADS新手使用教程

ADS新手使用教程
ADS新手使用教程

ADS使用例程

前言:

ADS是一个开发ARM很好的环境,同样周立功单片机(https://www.doczj.com/doc/d119047708.html,)推出的EasyARM2104实验套件也是学习ARM相当超值的入门工具。由于配套实验书上对于如何做第一个实验方面给出的指导具体步骤不够清晰,新手一般都要摸索一阵子,所以本人写了如下一个ADS的使用例程,演示一个最简单的程序的运行范例。

另外,ADS是一个功能很强大的ARM开发软件,本人的水平也依然停留在初学的层次上,很多深层次的使用问题,设置参数问题需要大家一起仔细阅读英文的pdf使用说明,这里只是希望这篇文档能起到抛砖引玉的作用,把大家领进门。

花了3天时间写出的本文,肯定存在不少错误,加上本人也是新手,所以如果发现文中有错误希望大家指出。我的e-mail:masashinakayama@https://www.doczj.com/doc/d119047708.html,

注意:

本例程要用程序控制周立功EasyARM2104上的LED1,完成该LED1亮暗闪烁。

首先我们假设ADS已经安装完毕(因为涉及版权问题,周公的配套光盘不含ADS软件。请初学者各显神通,获得该软件)。本例程使用的是ADS1.2 。

EesyJTAG驱动已经安装。没安装的请仔细阅读周公配套光盘easyarm_drive\readme.txt安装过程。

EasyARM实验板上JP8 LED1跳线已经短接。其余跳线设置正确。

(1)建立一个新的项目

运行ADS的CodeWarrior IDE,点击File->New,弹出New对话框(如图1)

图1 ADS新建工程对话框

选择要建立的项目模板,初学者建议选择ARM Executable Image,建立一个ARM指令的项目。

ARM Executable Image 由ARM指令代码生成ELF格式的映像文件

Thumb ARM Interworking Image 由ARM指令和Thumb指令混合代码生成ELF格式的映像文件

Thumb Execuable Image 由Thumb指令代码生成的ELF格式的映像文件

其余选项请参考ADS使用手册

在Location项中设置项目的存放目录,并在Project name 项中输入新建项目的名称(本例取名ex_led),然后确定。生成窗口如图2,可以看到只有刚建成空mcp项目文件。

(2)在Windows窗口中复制周立功光盘上的\实验程序\启动代码下的所有文件到刚才新建的项目目录下,

本例为e:\My Documents\ex_led,完成后目录情况见图3。这几个文件说明如下:

Vectors.s 异常向量入口及异常向量与c语言代码的接口,初始化堆栈,一般不改 lpc210x初始化代码,一般不需要改动

Init.s

Target.c 和 Target.h 包括异常处理程序和目标板初始化程序,用户根据程序的需要修改

Config.h 用户配置文件,用户根据需要修改

LPC2106.h 定义lpc2104/lpc2105/lpc2106的特殊寄存器及固件程序,不改

注意:没有LPC2104.h这个文件,因为LPC210X系列寄存器都一样,只有FLASH和RAM大小不同,所以统一都使用LPC2106.h

图2 生成的空项目

图3 复制完成后的ex_led文件目录

(3)给该项目添加源文件

刚才只是简单的把几个周立功提供的启动文件物理拷贝到相应目录,并没有在ex_led.mcp项目文件中反映出来,所以还要在该mcp项目中添加一下。

选择Project->Add Files,弹出以对话框,再选择Vectors.s,Init.s,Target.c三个文件(按住Ctrl点击,同时选中)。后面的对话框的也按默认选择。

这里,我们仅选择如上三个文件加入项目中。其余的几个.h头文件因为是被上面三个文件包括进去(include)的,所以我们不必添加入项目。

注:config.h 由用户主文件包括的(后面可知,用户自己新建文件为ex_led.c)。

图4 添加文件选择窗口

(4)新建并添加用户主文件

为什么要添件用户主文件呢?因为上述步骤我们仅添加了几个启动文件,这是不够的,打开这些文件观察可以看到,并没用main()函数的定义。main()函数是程序执行的主体,根据我们的目标和需求,我们必须自己新建,所以还必须加入一个文件。

选择File->New菜单中的File选项卡,新建一个文件:在File name栏中填写文件名称,例如,ex_led.c。

(注意:扩展名为c,表示C语言源文件。扩展名为s,表示汇编语言源文件)

勾中Add to Project,表示将该文件添加到该项目中。后面的Target复选框内也全部打勾。如图5。选择确认。完成后界面如图6。

(5)在ex_led.c文件中自己编写c语言代码。

可以参考周立功光盘上实验程序目录下的一些程序,并在此基础上修改而来。

或者也可以自己编写,自己编写最简单框架如图7

图5 在项目中添加用户源文件

图6 ex_led.c生成结果,这是一个空白文件

图7 什么都不干的用户最小代码

(6)扩充最小代码框架,编写完整程序

对于不明白如何编程控制LED1的同学,请参考周立功书中的程序。

下面给出 ex_led.c的完整程序,见图8。

图8 完整的LED1控制程序

(7)相关设置

同PC机上的程序不同,PC机上写的C++等程序只要编译就行了,不用去管放哪里的问题,所有这些都是VC环境自己解决的。但是LPC2104不一样,程序存放哪里,数据存放哪里必须自己设置一下。

进行JTAG仿真时,使用的存储空间是目标机上的RAM空间,LPC2104具有16K的SRAM,其地址为0x40000000~0x40003FFFF。

在生产最终产品时,程序放在0x00000000开始的Flash中,SRAM中存放的是运行生成数据,程序入口在0x00000000处。

但是请注意:在一般在JTAG仿真调试时,通常将用户程序和数据空间都放到SRAM中去运行。程序存放地址在0x40000000往后,通常运行数据存放地址在0x40003000往后。程序入口为0x40000000。这么做的好处是:不用每次都下载到Flash中,缩短时间,而且Flash的寿命是有限的(不过几百次至少没问题)。方便修改,方便调试。不足之处在于:可用的程序和数据空间都缩小了,可以计算,上面的设置后实际可用程序空间为12K,数据空间为4K。

用JTAG调试,请按如下设置:

选择菜单Edit->DebugRel Settings,弹出的对话框中,先确认Target Settings窗口如图9所示。

图9 项目设置窗口

点击左边Linker下的 ARM Linker 项,在Output页中,RO Base项中写入程序段的起始地址,RW Base 项中写入数据段的起始地址,点击Apply生效,如图10。在Options页中的 Image entry point项中填入调试入口地址,如0x40000000,这将会覆盖程序代码中的ENTRY入口声明,如图11。在Layout页中的Place at beginning of image项中设置哪一段代码存放在程序空间的开始处,在Objetc/Symbol处写入包含要设置的段的文件的“文件名.o”,在Sction处写入代码段段名,如图12。

图10 项目连接设置窗口

图11 项目连接设置窗口

图12 项目连接设置窗口

另外,ARM核是支持大小端存储方式的,所以要进行正确的配置(使用LPC210X系列时,一定要选择小端模式,确保如图13所示)

图13 小端模式设置

(8)编译

选择菜单Project->Make,或按F7键将对工程进行变异。若编译出错,会有相应的出错提示,双击出错提示行信息,编辑窗即会使用光标指出当前出错的源代码行。第一次编译肯定通不过,具体原因和修改请看附录2。

最后修改完毕后正确通过的窗口如图14。

图14 编译连接无误的输出窗口

当编译通过时,选择菜单Project->Debug,或者F5键,即可打开AXD,进入调试状态。

注意:假如不进入AXD而是跳出一个对话框,据周公那边传说,是由于操作系统兼容问题引起的,EasyJTAG仿真器在98下运行稳定,在2000/XP下会经常出现这个问题。请参考本文档附录1,或者周立功实验指导书后常见问题2。

(9)AXD调试

AXD是ADS软件中的调试工具。上步编译通过并打开AXD后,正确的界面应如图15所示。界面中打开的窗口是文件Vectors.s,左边蓝色的小箭头指向中断向量表的开始处。当选择Execute->Go或者按F5时,弹出包含main函数的ex_led.c的窗口,如图16。继续选择Execute->Go或者按F5将进入全速执行状态。假如执行结果并非预期,请用菜单Execute中的其它功能如单步,暂停,断点等,调试程序。注意,AXD环境中只能进行调试,不能进行源文件的修改。假如想要修改,必须在CodeWarrior中修改,重新编译,重新打开AXD或者在原来AXD上Reload Image文件。

图15 正确进入AXD的界面

图16 调入包含main函数的ex_led.c后的窗口

附录1。进入AXD出现问题

出现窗口如图17所示,点确定,后面的文件选择窗口点取消。出现图18界面。

图17 编译后不能进入AXD出现的情况

图18 什么也没载入的AXD界面

选择Options->Configure Target,出现图19界面

图19 选择Target窗口

图20 选择EasyJTAG并确定后的窗口

选择EasyJTAG并确定后,出现的致命AXD错误框,如图20。在Connect mode中选择ATTACH项,OK。然后选择Restart,出现如图21所示AXD界面,注意,此时Image文件并未载入。

图21 进入的AXD界面

选择File->Load Image将会出来一个文件对话框,在ex_led\ex_led_Data\DebugRel目录下找一个axf 文件ex_led.axf,如图22,选中并打开。

好了,至此问题已经解决,下面请参照正文第9节,继续调试。

图22 找到并选中ex_led.axf文件

附录2。编译出错的解决

按正文第8步,会出现一个窗口,里面表示编译出现很多错误。如图23。

图23 编译出现很多错误

可以看到有17个错误之多,不过不用紧张,都是由于第一个错误引起的,我们双击第一个错误,可以看到,打开了config.h文件,如图24,红色箭头表示可能出现错误的地方。

图24 编译器指出了错误的大概地方

错误原因找到了,原来是那句 #include 的问题,后面包括头文件的路径不对,所以我们要把路径修改一下。因为我们的LPC2106.h文件不在那个地方,所以只要修改为”LPC2104.h”即可,指向项目的默认目录。如图25。

图25 修改完后的程序

关闭该文件,存盘。按F7重新编译。全部通过。后面的16个错误也不见了。因为后面很多错误都是因为使用了LPC2106.h中定义的一些寄存器,所以现在LPC2106.h找到了,后面的错误也就没有了。

附录三。固化程序

同周公实验室书上第254页,这部分内容比较清晰。这里阐述一下为什么要固化程序。因为前面的运行方法是调试用的,把程序和数据都放在了LPC2104的RAM中,去掉EasyJTAG,按下板上RST键的时候,RAM中的数据丢光了,复位后开始从0x00000000执行。所以我们在调试完毕,做产品的时候必须把程序固化到LPC2104的FLASH中去。

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