本文共 3670 字,大约阅读时间需要 12 分钟。
Learn lumit Step 9 : 使用 JTAG 调试 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 在嵌入式程序开发过程中,使用 JTAG 调试是最常用的调试方法。此前我们一直 没有提到 JTAG ,并不是不推荐大家用 JTAG 来调试开发,而只是因为我个人的习惯。 如果是在中断或者是对时序要求比较严格的程序中,我比较喜欢用点灯的办法来调试; 对于在程序各个接口执行流程上,对系统进行跟踪和观察,我比较喜欢用 DPRINT 来 实现控制输出调试信息的开关;如果是有很多计算公式或者是逻辑分支比较多的代码, 我想通过 JTAG 配合上层的调试软件应该是最好的选择。 举个例子,在写 led_api 中led_set_value( int value ) 接口时,我曾经犯了 一个小错误,我把左移指令 << 写出了 < ,结果这段代码在执行中就变成了 // set the i bit value to buf[i] for( i = 0; i < LED_NUM; i++ ) buf[i] = (value & (1 < i)) ? 1 : 0 ; 这个错误是一个比较好的例子,通过 JTAG 设置断点,然后观察 buf[i] 变量的值, 很快就能定位出这个 bug 所在,所以这一节我觉得有必要先说说 JTAG 调试。 在 ADS 出来之前,大家都基本上是用 SDT 配合一个 JTAG.exe 的后台程序来实现 调试功能的。随着 SDT 基本上被 ADS 所替代,JTAG.exe 也不能继续用了,比较贵的 仿真器大家基本都买不起,所以 wiggler jtag + jtag.exe + SDT 的搭配还延续了很长 一段时间。 现在我们推荐一种 wiggler jtag + banyan.dll + ADS 的调试方案,从硬件成本上, 无需购买价格上千的 ARM 仿真器,而只需要一块价格几十的 wiggler jtag 小板子, 配合飞雁软件工作室提供的 Banyan Daemon 仿真器,上层使用 ADS 和 AXD 就可以实现 对 lumit4510 学习板的在线调试。这里特别感谢 飞雁软件工作室 为大家写出这么好的 软件,虽然从未认识,但却充满敬意。我想表达敬意的最好方式就是宣传它,让更多的人 认识了解它并使用它。请大家直接去他们的网站下载 “简易JTAG版软件”。 这里把整个使用 ADS + AXD + Wiggler Jtag + Banyan.dll 的调试过程步骤写出来。 一、Banyan 的下载和安装 下载地址: ( 无需注册,直接安装即可 ) 缺省安装的目录为: C:/Banyan 目录下面有这几个文件: 驱动器 C 中的卷是 ORIGINAL 卷的序列号是 807F-76E5 C:/Banyan 的目录 2005-06-07 08:49a <DIR> . 2005-06-07 08:49a <DIR> .. 2003-10-18 05:58p 64,512 uninstall.exe 2005-04-12 09:30p 552,960 Banyan.dll 2004-01-05 02:11p 2,186 Banyan.sys 2004-02-26 11:40p 69,632 configure.exe 2005-04-12 12:31a 704,512 Daemon.exe 2005-06-07 08:49a 1,661 setup.log 6 个文件 1,395,463 字节 2 个目录 432,119,808 可用字节 二、ADS 工程文件的建立 1) 打开 ADS 1.2 ,选择 File -> New 创建一个新项目。 2) 在 Project 下,选择 ARM Executable Image 。 3) 在 Location 右侧点击按钮,选择工程文件所在目录。 4) 在 Project Name 输入框内,输入 ADS_demo_jtag 作为项目名称。 5) 此时,在 ADS 右上侧出现一个小窗口,窗口名称 ADS_demo_jtag.mcp。 6) 同时在刚才的目录下出现一个 ADS_demo_jtag 子目录,其中包含一个 名为 ADS_demo_jtag.mcp 的项目工程文件。 三、建立/编译整个工程 1) 在 ADS_demo_jtag.mcp 窗口中,点击鼠标右键,出现弹出菜单。 2) 选择弹出菜单中的 Add Files 3) 选择 src 目录下的所有源码文件 main.c led_driver.c[.h] led_api.c[.h] 4) 在 Add Files 对话框中点击 ok 即可。 5) 选择 ADS 菜单 -> Project -> make ,编译整个项目工程。 6) 此时会弹出一个 Errors & Warnings 窗口,显示编译链接过程正确无误。 7) 选择 ADS 菜单 -> Project -> debug ,开始进入 JTAG 调试。 四、准备调试 1) 进入 AXD 调试软件后,选择 AXD 菜单 -> Options -> Configure Target 2) 出现 Choose Target 对话框,点击 ADD 按钮,准备添加新的 dll 3) 找到刚才 Banyan 的安装目录,选择 Banyan.dll 文件,点击打开。 4) 此时可以看到在 Choose Target 对话框中,出现了 Banyan-TRI 行。 5) 选中这一行,点击 ok 即可。 五、使用 Banyan 调试 1) 此时可能会出现一个 Fatal AXD Error 的错误,信息如下: RDI Servere Error 00261: Banyan Daemon Not Found 2) 这个时候,首先找到刚才 Banyan 的安装目录,执行 Daemon.exe 3) 如果板子没有加电,或者开发板没有通过 wiggler jtag 板连接到 主机的并口,则还会出现 Fatal AXD Error 的错误,信息如下: RDI Servere Error 00261: Banyan Daemon Not Ready 4) 此时,给板子加电,连接开发主机并口和 wiggler jtag 板到开发板上。 5) 切换到 Banyan Deamon 主程序界面,选择菜单 Detect 6) 此时,正常情况下应该出现识别出 S3C4510 Samsung 的标识。 7) 切换到 AXD 中,选择刚才 Fatal AXD Error 错误对话框中 Restart <!--[if !vml]--><!--[endif]-->此时 AXD 中 RDI Log 信息栏中会出现: ARM RDI Module Server ADS v1.2 [Build number 805]: Attaching to S3C4510B and EmbeddedICE ARM RDI Module Server ADS v1.2 [Build number 805]: 'EICE' ARM RDI 1.5.1 -> ASYNC RDI Protocol Converter ADS v1.2 [Build number 805]. Copyright (c) ARM Limited 2001. Banyan V 1.5.6. Copyright(C) 2003-2005, Pure Feeling Studio. Connected to TAP 0, S3C4510B, Little-Endian. 9) 这时,整个准备调试工作完毕,接下来就可以开始调试了。 六、调试 axf 文件 1) 在 AXD 菜单下,选择 File -> Load Image 2) 选择打开目录 src/ADS_demo_wiggler/ADS_demo_wiggler_Data/DebugRel 下的 ADS_demo_jtag.axf 文件。 3) 此时可以看到程序停在 __main 入口,等待开始执行。 4) 选择 AXD 菜单 -> Execute -> Go 。 此时会提示需要定位 main.c 文件,找到 并选择 main.c 文件即可。 5) 此时可以看到程序停在 int main( void ) 入口,等待继续执行。 6) 可以选择 AXD 菜单 -> Execute -> Step In 单步调试,观察单步执行的点灯效果。 7) 也可以在适当的位置设置断点,直接执行到断点处,停下来观察变量和点灯状态。 有了 AXD 的强大调试功能,会使得今后的开发更加容易,更接近我们以前的编程习惯。 下面我们就可以开始真正介绍硬件驱动实验了。
转载地址:http://aknfb.baihongyu.com/