- 仿真调试
SylixOS IDE集成多种仿真调试功能,对于i.MX-RT1050平台可以使用J-Link仿真器进行代码调试。
-
- 准备工作
- 首先安装好需要的软件,以及准备好开发板和J-Link仿真器,本文档调试使用的各软硬件版本如下:
- 操作系统 :Windows10 64位教育版
- RealEvo-IDE :V3.7.3 Ultimate
- 目标开发板 :MIMXRT1050-EVK
- J-Link调试器 :硬件为J-LinkV9,固件版本V9.40,软件版本V6.31a
- 去掉开发板上J32,J33的跳帽,断开板载DAP仿真器与SOC的SW仿真接口,防止与J-Link仿真器硬件冲突。用跳帽短接J1的5脚和6脚,用USB线连接电脑与J28口,使用USB接口为开发板供电,同时使用板载DAP仿真器提供的USB转串口功能作为串口调试接口。
- 关闭或断开J-Link仿真接口2脚的电源输出功能,使用20PIN排线连接J-Link与开发板,J-Link的USB口连接电脑。
- 修改BSP工程中的BSP_CFG_BOOT_MODE宏,定义为BSP_CFG_SDRAM_BOOT,编译获取sdram版系统镜像。镜像运行前需要初始化外部sdram并加载镜像到sdram中。
- 设置调试参数
- 选择“Run→Debug Configurations”或者点击Debug按钮(小虫子图标)右边三角下拉框选择“Debug Configurations”。打开Debug Configurations设置页面。右键“GDB SEGGER J-Link Debugging”选择“New”新建一个调试对象。
图 4.1新建调试对象
- “Name”栏为调试对象名称。“Name”栏下为5个设置标签页。
图 4.2 调试对象设置界面
- “Main”标签页
- “Project”栏填写要仿真的工程名称。或点击“Browse”按钮,在弹出的对话框中选择。
- “C/C++ Application”栏填写要仿真的.elf目标文件,或通过下方三个按钮进行选择,一般使用“Search Project...”。
- “Build before launching”栏是选择启动仿真前是否要编译工程,一般默认即可。
- “Debugger”标签页
- “Actual executable”填写实际要运行的J-Link GDB Server程序,需要到J-Link驱动安装路径下查找,一般都能自动识别。这里的值为“C:/Program Files (x86)/ SEGGER/ JLink_V631a// JLinkGDBServerCL.exe”。
- “Device name”填写目标处理器型号,这里是“MCIMXRT1052”
- “Executable”填写要调用的本地GDB Client可执行程序,也可以通过右边的按钮进行选择。这里使用的值为“C:ACOINFORealEvocompilerarm-sylixoslitele-toolchainin arm-sylixoslitele-eabi-gdb.exe”。
- 其他选项按图 4.3设置。
图 4.3 Debugger标签页设置
- “Startup”标签页
- “Initialization Commangds”栏用于设置目标初始化命令,方框中用于填写要执行的命令。因为sdram版的系统镜像是要在外部sdram中运行,所以在仿真运行前需要通过此处添加的命令来初始化外部sdram,初始化外部sdram命令如下:
monitor writeu32 0x400FC068=0xffffffff
monitor writeu32 0x400FC06C=0xffffffff
monitor writeu32 0x400FC070=0xffffffff
monitor writeu32 0x400FC074=0xffffffff
monitor writeu32 0x400FC078=0xffffffff
monitor writeu32 0x400FC07C=0xffffffff
monitor writeu32 0x400FC080=0xffffffff
monitor writeu32 0x400D8030=0x00002001
monitor writeu32 0x400D8100=0x001d0000
monitor writeu32 0x400FC014=0x00010D40
monitor writeu32 0x401F8014=0x00000000
monitor writeu32 0x401F8018=0x00000000
monitor writeu32 0x401F801C=0x00000000
monitor writeu32 0x401F8020=0x00000000
monitor writeu32 0x401F8024=0x00000000
monitor writeu32 0x401F8028=0x00000000
monitor writeu32 0x401F802C=0x00000000
monitor writeu32 0x401F8030=0x00000000
monitor writeu32 0x401F8034=0x00000000
monitor writeu32 0x401F8038=0x00000000
monitor writeu32 0x401F803C=0x00000000
monitor writeu32 0x401F8040=0x00000000
monitor writeu32 0x401F8044=0x00000000
monitor writeu32 0x401F8048=0x00000000
monitor writeu32 0x401F804C=0x00000000
monitor writeu32 0x401F8050=0x00000000
monitor writeu32 0x401F8054=0x00000000
monitor writeu32 0x401F8058=0x00000000
monitor writeu32 0x401F805C=0x00000000
monitor writeu32 0x401F8060=0x00000000
monitor writeu32 0x401F8064=0x00000000
monitor writeu32 0x401F8068=0x00000000
monitor writeu32 0x401F806C=0x00000000
monitor writeu32 0x401F8070=0x00000000
monitor writeu32 0x401F8074=0x00000000
monitor writeu32 0x401F8078=0x00000000
monitor writeu32 0x401F807C=0x00000000
monitor writeu32 0x401F8080=0x00000000
monitor writeu32 0x401F8084=0x00000000
monitor writeu32 0x401F8088=0x00000000
monitor writeu32 0x401F808C=0x00000000
monitor writeu32 0x401F8090=0x00000000
monitor writeu32 0x401F8094=0x00000000
monitor writeu32 0x401F8098=0x00000000
monitor writeu32 0x401F809C=0x00000000
monitor writeu32 0x401F80A0=0x00000000
monitor writeu32 0x401F80A4=0x00000000
monitor writeu32 0x401F80A8=0x00000000
monitor writeu32 0x401F80AC=0x00000000
monitor writeu32 0x401F80B0=0x00000010
monitor writeu32 0x401F80B4=0x00000000
monitor writeu32 0x401F80B8=0x00000000
monitor writeu32 0x401F8204=0x000110F9
monitor writeu32 0x401F8208=0x000110F9
monitor writeu32 0x401F820C=0x000110F9
monitor writeu32 0x401F8210=0x000110F9
monitor writeu32 0x401F8214=0x000110F9
monitor writeu32 0x401F8218=0x000110F9
monitor writeu32 0x401F821C=0x000110F9
monitor writeu32 0x401F8220=0x000110F9
monitor writeu32 0x401F8224=0x000110F9
monitor writeu32 0x401F8228=0x000110F9
monitor writeu32 0x401F822C=0x000110F9
monitor writeu32 0x401F8230=0x000110F9
monitor writeu32 0x401F8234=0x000110F9
monitor writeu32 0x401F8238=0x000110F9
monitor writeu32 0x401F823C=0x000110F9
monitor writeu32 0x401F8240=0x000110F9
monitor writeu32 0x401F8244=0x000110F9
monitor writeu32 0x401F8248=0x000110F9
monitor writeu32 0x401F824C=0x000110F9
monitor writeu32 0x401F8250=0x000110F9
monitor writeu32 0x401F8254=0x000110F9
monitor writeu32 0x401F8258=0x000110F9
monitor writeu32 0x401F825C=0x000110F9
monitor writeu32 0x401F8260=0x000110F9
monitor writeu32 0x401F8264=0x000110F9
monitor writeu32 0x401F8268=0x000110F9
monitor writeu32 0x401F826C=0x000110F9
monitor writeu32 0x401F8270=0x000110F9
monitor writeu32 0x401F8274=0x000110F9
monitor writeu32 0x401F8278=0x000110F9
monitor writeu32 0x401F827C=0x000110F9
monitor writeu32 0x401F8280=0x000110F9
monitor writeu32 0x401F8284=0x000110F9
monitor writeu32 0x401F8288=0x000110F9
monitor writeu32 0x401F828C=0x000110F9
monitor writeu32 0x401F8290=0x000110F9
monitor writeu32 0x401F8294=0x000110F9
monitor writeu32 0x401F8298=0x000110F9
monitor writeu32 0x401F829C=0x000110F9
monitor writeu32 0x401F82A0=0x000110F9
monitor writeu32 0x401F82A4=0x000110F9
monitor writeu32 0x401F82A8=0x000110F9
monitor writeu32 0x402F0000=0x10000004
monitor writeu32 0x402F0008=0x00030524
monitor writeu32 0x402F000C=0x06030524
monitor writeu32 0x402F0010=0x8000001B
monitor writeu32 0x402F0014=0x8200001B
monitor writeu32 0x402F0018=0x8400001B
monitor writeu32 0x402F001C=0x8600001B
monitor writeu32 0x402F0020=0x90000021
monitor writeu32 0x402F0024=0xA0000019
monitor writeu32 0x402F0028=0xA8000017
monitor writeu32 0x402F002C=0xA900001B
monitor writeu32 0x402F0030=0x00000021
monitor writeu32 0x402F0004=0x000079A8
monitor writeu32 0x402F0040=0x00000F31
monitor writeu32 0x402F0044=0x00652922
monitor writeu32 0x402F0048=0x00010920
monitor writeu32 0x402F004C=0x50210A08
monitor writeu32 0x402F0080=0x00000021
monitor writeu32 0x402F0084=0x00888888
monitor writeu32 0x402F0094=0x00000002
monitor writeu32 0x402F0098=0x00000000
monitor writeu32 0x402F0090=0x80000000
monitor writeu32 0x402F009C=0xA55A000F
monitor sleep 100
monitor writeu32 0x402F0090=0x80000000
monitor writeu32 0x402F009C=0xA55A000C
monitor sleep 100
monitor writeu32 0x402F0090=0x80000000
monitor writeu32 0x402F009C=0xA55A000C
monitor sleep 100
monitor writeu32 0x402F00A0=0x00000033
monitor writeu32 0x402F0090=0x80000000
monitor writeu32 0x402F009C=0xA55A000A
monitor sleep 100
monitor writeu32 0x402F004C=0x50210A09
- “RAM application”是否为RAM中的应用程序,需要勾选。
- “Run/Restart Commands”栏方框内填写加载或下载完成后仿真运行前要操作的命令。此处需要设置向量表偏移,初始化栈地址及PC值。命令如下:
monitor writeu32 0xE000ED08=0x80000000
monitor reg sp = (0x80000000)
monitor reg pc = (0x80000004)
- 其他项按照图 4.4进行设置。
图 4.4 “Start”标签页设置
-
- 启动调试
点击“Debug”按钮启动仿真调试,IDE会进入Debug视图模式,不同配置下界面会有所区别,此处的界面如下图所示:
图 4.5 Debug视图模式
按F8快捷键即可进行全速仿真,另外单步执行、暂停、设置断点、查看变量等都可以使用。
-
- 调试Extension
- 编译好sdram版的BSP工程和Extension工程。
- 启动BSP工程仿真,等待镜像加载完成。
图 4.6 Console窗口
- 导入Extension工程的.elf文件。方法是在Debugger Console窗口中输入“add-symbol-file D:/project/imxrt1050/extExample/Debug/extExample.elf 0x81800000”。“add-symbol-file”为GDB命令,第一个参数为要导入的.elf文件,第二个参数为对应文件的链接地址。
图 4.7 Debugger Console窗口
- 在Extension工程源文件打一个断点,然后全速仿真,加载运行Extension工程,仿真会在断点处停止。
图 4.8 加载运行Extension工程
图 4.9 仿真在Extension源码处停止