打印
[ZLG-ARM]

ADS使用教程(高手绕行)

[复制链接]
3970|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
msp430ing|  楼主 | 2011-1-31 18:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADS 使用例程前言: ADS 是一个开发ARM 很好的环境,同样周立功单片机(www.zlgmcu.com)推出的EasyARM2104 实验套件也是学习ARM 相当超值的入门工具。由于配套实验书上对于如何做第一个实验方面给出的指导具体步骤不够清晰,新手一般都要摸索一阵子,所以本人写了如下一个ADS 的使用例程,演示一个最简单的程序的运行范例。另外,ADS 是一个功能很强大的ARM 开发软件,本人的水平也依然停留在初学的层次上,很多深层次的使用问题,设置参数问题需要大家一起仔细阅读英文的pdf 使用说明,这里只是希望这篇文档能起到抛砖引玉的作用,把大家领进门。花了3 天时间写出的本文,肯定存在不少错误,加上本人也是新手,所以如果发现文中有错误希望大家指出。我的e-mail:masashinakayama@sina.com.cn 注意:本例程要用程序控制周立功EasyARM2104 上的LED1,完成该LED1 亮暗闪烁。首先我们假设ADS 已经安装完毕(因为涉及版权问题,周公的配套光盘不含ADS 软件。请初学者各显神通,获得该软件)。本例程使用的是ADS1.2 。EesyJTAG 驱动已经安装。没安装的请仔细阅读周公配套光盘easyarm_drive eadme.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 Documentsex_led,完成后目录情况见图3。这几个文件说明如下: Vectors.s 异常向量入口及异常向量与c 语言代码的接口,初始化堆栈,一般不改Init.s lpc210x初始化代码,一般不需要改动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) 扩充最小代码框架

相关帖子

沙发
msp430ing|  楼主 | 2011-1-31 18:10 | 只看该作者
编写完整程序对于不明白如何编程控制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,或者周

使用特权

评论回复
板凳
msp430ing|  楼主 | 2011-1-31 18:11 | 只看该作者
立功实验指导书后常见问题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_ledex_led_DataDebugRel 目录下找一个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 中去。

使用特权

评论回复
地板
即时生效| | 2011-1-31 18:43 | 只看该作者
太多了,整理下看看

使用特权

评论回复
5
ladygaga| | 2011-2-1 22:36 | 只看该作者
有点晕了,看着看着不知道看到哪一行了。

使用特权

评论回复
6
amini| | 2011-2-5 19:50 | 只看该作者
呵呵,楼上的学我。直接收藏之。

使用特权

评论回复
7
3B1105| | 2011-2-6 22:46 | 只看该作者
收下了,多谢

使用特权

评论回复
8
yiganliao| | 2011-5-6 21:37 | 只看该作者
很不错的东东。。。学习了。。

使用特权

评论回复
9
lpfortminor| | 2011-5-7 14:41 | 只看该作者
:)

使用特权

评论回复
10
年轻不再| | 2011-5-7 18:13 | 只看该作者
哈哈,还好我不是高手。学习来了。

使用特权

评论回复
11
NE5532| | 2011-5-7 20:03 | 只看该作者
:L寒,我还以为是安捷伦那个ADS呢……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

730

帖子

1

粉丝