关于 ADS1.2 的使用有很多的文档,同时一般也会涉及到 AXD 调试的一些问题,我前几天因为这些问题而苦恼了好久而且网上搜不到较好的,就是完整的解决办法。我只是讲一些过程,至于原理的东西我也不是很懂所以现在就不多说。我的 PC 机时 xp 系统, ARM 板 mini2440 ,使用 J_link 调试。
第一. 使用 ADS 的 CodeWarrior 编译。使用 CodeWarrior 编译首先要新建工程,然后新建 C 后者汇编文件,添加文件要工程,然后要编译的问题了,单独对 C 和汇编源文件进行编译,然后再使用 make 连接成一个可执行文件,不编译直接 make 会出现一些文件找不到,变量没定义的问题。
第二. 可执行文件也就是 BIN 文件,这里说的是裸机程序,下载到 Nand Flash 中的前 4k 中,(关于为什么是到 NandFlansh ,注意文件大小要小于 4k ,这里不多说,可以上网搜索网上比较多),注意 2440 板启动是从 NorFlash 启动。注意这样下载的裸机程序因为没有操作系统所以需要一段汇编的启动代码去初始化堆栈,寄存器,中断向量表, C 语言环境等等具体我也不是很清楚,需要的话网上很多分析启动代码的。启动代码编译后和 C 源文件一起连接成一个可执行文件,下载到板之里执行。
第三. CodeWarrior 设置,这里是最重要的步骤,打开 CodeWarrior ,选择 Edit 菜单,打开 DebugRel Settings ,第一个 Target Settings –> Post-linker 选择 ARM fromELF ,第二个设置 Language Settings->ARM Assembler(ARM 汇编器 ) 选择对应的 ARM 板型号, mini2440 对应 ARM920T ,相应的设置好 C 编译器,如果要用到 C++ 同样要设置好。第三个设置的地方 Linker->ARM Linker 这个比较关键,开始我一直没设置好的地方就是这里,因为手册上还是看别人的设置都没有说到,我一个人弄了好几天。好了说重点, ARM Linker 中选择 Output 在 RO Base 下选择地址 0x30000000 不同的 ARM 板可能不同,手册上应该会给出,这个地址就是 SDRAM 的开始地址。然后选择 Options 选项在 Image entry point 中输入 0x30000000 ,继续选择 Layout 选项,在 Object/Symbol 中输入你的初始化目标文件, 2440init.o 在旁边的 Section 中输入 Init ,最好 Listings 选项,这个应该可以不用,不过我没试验,先填一下落,在 Listings->Image map 前打上勾, List file 中填一个 txt 文件,如 list.txt, 到这里这个大选择就弄好了,继续下面的, ARM fromELF 中 Output format 中选择输出文件格式,选择 Plain binary 可执行的二进制文件,注意下面 Output file name 要自己写一个 .bin 文件,如 led.bin 。如果这里不写文件名将找不到 bin 文件。现在 CodeWarrior 就设置好了。
第四. 第四如果要调试的会,还要初始化 SDRAM ,初始化 SARAM 的代码如下
Setmem 0x53000000 0x00000000 32
Setmem 0x4A000008 0xFFFFFFFF 32
Setmem 0x4A00001C 0x000007FF 32
Setmem 0x53000000 0x00000000 32
Setmem 0x56000050 0x000055AA 32
Setmem 0x4C000014 0x00000007 32
Setmem 0x4C000000 0x00FFFFFF 32
Setmem 0x4C000004 0x00061012 32
Setmem 0x4C000008 0x00040042 32
Setmem 0x48000000 0x22111120 32
Setmem 0x48000004 0x00002F50 32
Setmem 0x48000008 0x00000700 32
Setmem 0x4800000C 0x00000700 32
Setmem 0x48000010 0x00000700 32
Setmem 0x48000014 0x00000700 32
Setmem 0x48000018 0x0007FFFC 32
Setmem 0x4800001C 0x00018005 32
Setmem 0x48000020 0x00018005 32
Setmem 0x48000024 0x008E0459 32
Setmem 0x48000028 0x00000032 32
Setmem 0x4800002C 0x00000030 32
Setmem 0x48000030 0x00000030 32
把上面的代码粘贴带记事本中,并把名字重命名为一个 .iniz 的配置文件放在调试文件 .axf 同目录下。启动 CodeWarrior 并编译链接后按调试后,按 Alt + L 快捷键弹出 AXD 命令窗口,输入 ob ( obey ) name.ini 执行,这个你可以不这样只有你调试文件前执行了初始化文件 name.ini 。执行后选择 file 下的重新装载当前文件,就可以调试了。
遇到的问题
1. Failed initailizing heap region 。使用超级终端和 DNW 下载程序后( led.c )超级终端显示初始化堆栈失败,解决办法,上面的第三步没有设置好,设置好第三步就没有问题了。
2. Processor ARM79_0 raised an exception.Cause: The processor was reset 。这个问题需要设置 SEGGER J-link RDI V4.081 Status 中的 Congfiguration 中的 CPU 选项选择第一个不在重启 NO reset ,不过好像把问题 3 解决后这个问题也没有了。先解决问题三。
3. Processor ARM79_0 raised an exception.Cause: Undefined instruction 。这个问题非常恼火,困扰我好久,解决办法上面步骤第四步。
4. 'c:/documents and settings/****/default-1-2-0-0.ses' could not be loaded 。这个问题是关于ADS 文件最好不要带中文路径。重新加载动态链接文件就是那个。Dll 的文件,一般使用前你都会加载的。下面地址有详细介绍。
http://hi.baidu.com/jialaolian629/blog/item/12d0981102756429dd5401eb.html
2011-04-04
今天添加文件的时候突然弹出“ at least one file could not be added to the selected targets ”一时我还以为是工程建错了后来上网搜了一下,发现是因为工程里已经添加了文件,重复添加文件错误。当然还可能是其他原因,但一般是因为文件重复添加到一个工程。