记录一下,方便以后翻阅~
本章将介绍如何在CrossCore Embedded Studio(CCES)IDE中,调式硬件终端Hardware Target的整个流程。
全文目录如下
1)Debug Quick Start
1.1 创建和启动一个Debug Configuration
首先创建一个调试配置
单击菜单栏里的Run——>Debug As——>Application with CrossCore Debugger,
弹出Debug Configurations窗口时,还会弹出任务向导界面,先完成任务向导界面的设置:选择处理器型号(这里选项SC589),单击Next,
选择Emulator连接,如果自定义目标平台有多个CPU或JTAG扫描路径,单击Configurator…进行配置(这里暂不用操作),单击Next,
选择ADSP-SC589 via ICE-1000连接方式,单击Finish。
回到Debug Configurations窗口,该向导选择了配置的名称,若要改名称,在Name栏里改名。该向导还确定是否有双核应用软件,然后将dxe文件和各自的核进行映射。如果要手动编辑程序在特定的核上加载,或要手动编辑任何加载选项,可选项目标核的有关项,单击edit,
然后浏览到合适的项目,选择合适的dxe文件。如要调式启动代码,要编辑与加载程序有关的选项,例如禁用run immediately after load 选项。
大部分设置在session选项卡中进行,其它有关的选项卡有自动断点选项卡,
对于自定义目标可能会用到的一个选项卡是Custom board support选项卡,调式硬件目标时,要使能定制,定制板支持文件会为几个寄存器提供复位值,通常这些复位值与外部内存控制器有关。
Multiprocessor Group选项卡可将内核分组,除非需要在来源和公共选项卡下进行更改,否则很少用到。
单击Apply保存配置,关闭窗口。
然后启动调式任务
单击菜单里的RUN——>Debug启动调试,此时会生成项目,所有修改过的项目会出现空白构建,可以更改此默认操作,选择首选项、运行/调试、启动之后,在启动Windows下拉菜单选项之前,取消选择构建。启动调试任务时会切换到调试透视图,该透视图包含了支持应用程序调式的视图,然后建立与目标的连接,把程序加载到两个内核。由于配置的加载设置,如加载后立即运行程序,所以两个内核会启动。
默认情况,调式透视图有这么几个视图
1)调试视图显示了加载的可执行文件,程序在运行还是挂起,视图中还有许多工具栏图标可控制执行过程。
调试视图提供了在终端上执行代码的大量控件,Resume图标可启动执行,Suspend可暂定执行,step运行执行一行源代码,包括step into、step over和step return,Assembly step类似step,区别是执行一行汇编代码。step return后面四个图标支持多处理器调试,可以配置或设定多处理器组,默认情况,两个内核都是多处理器组的一部分,包括MP Resume,MP Suspend,MP step into。reset会复位选定的内核,restart会重新载入上一个应用程序,terminate会终止启动。本例程中,调式视图显示core0在断点处挂起,而core1在运行。
在双核应用程序中,core1启动代码中的循环会检查来自core0的信号并启用它,执行时可跳过core0的前几行代码,会看到执行core1启动函数:
adi_core_enable(ADI_CORE_SHARC0);
之后,core1会自动断点切换到主程序的某项,并进入挂起状态。
2)变量视图显示运行时所调用函数的入口参数变量和返回变量(个人理解)
如果从一个函数切换到另一个函数,那么变量视图里的变量会发生改变。同时还能在变量视图中看到调用的堆栈,调用某个函数会创建新的堆栈帧,最上边的帧用于当前函数,选择不同的堆栈帧时,还能看到源窗口跳到选定堆栈帧的函数。
通过单击pin to debug context图标,能把大多数调试视图与某个内核关联,按下后可以看到(下图)变量视图与Core0关联。
这时可以打开第二个变量视图,选择调式视图的Core1,并关联起来。这样可以切换合适的视图,观察对应内核的变量。
3)断点视图显示了系统中用户定义的断点。 可以取消复选框,禁用该断点。
4)其他调试视图可以在菜单栏里window——>show view里找到。
这里介绍一个常用的视图,单击Window——>show view——>Expressions,这个视图可以查看某个核里的全局变量(如下图中,我在core0里放了一个int aaa的全局变量),同时也可以查看该变量的地址(在变量前加&即可),还可以查看内存位置的内容,在寄存器前面加$,还可以检查寄存器。同样我们也可以将expressions与某个核关联。
![![在这里插入图片描述](https://img-blog.csdnimg.cn/20210402114450779.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_50,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xlaXN1cmVfa3Nq,size_16,color_A8A8A8,t_70#pic_center =500x200)
检查内存时,另一个有用的视图是内存浏览器视图,单击Window——>show view——>Memory Browser,在地址行中输入要检查内存地址的数字,或者要查看变量的符号名,还可以选择浏览功能,选择要检查的符号。
内存浏览器还允许用常量或数据文件的内容来填充内存,数据文件格式可以指定。
还可以将内存部分内容存储到一个文件,可以是文本格式或二进制格式,输入地址、说明和步长,手动指定内存区域。此外浏览器选择某个符号,会返回实体的正确大小。
同样我们也可以将内存浏览器视图与某个核关联。
数据缓冲可以可以在内存浏览器中显示为由数字组成的表格,有时以图形方式查看数据,会提供更多有用信息。
2)低层次调试
调试应用程序时,有时想要进入靠近CPU本身的底层应用程序,包括遍历汇编代码或检查寄存器。
2.1 反汇编视图Disassembly
在已经调试汇编文件时反汇编视图会自动出现,如程序运行完毕后,会看到反汇编视图弹出,并停在lib_prog_term。此处有一个自动断点,一旦程序执行到应用程序的末端就挂起。
若重新载入时,程序会停在adi_initComponents,在源文件和反汇编视图中都能看到该调用,右击空白区选择show line numbers,可现实行号。
2.2 寄存器浏览器视图 Registers Browser
在寄存器浏览器视图中单击New Tab,弹出可选的寄存器表,可选择指针、数据或调试等内核寄存器,以及DMA、外设、中断控制等系统寄存器。
2.3 追踪视图 Trace
低层次调试中,追踪视图也很有用。该视图允许查看过去执行的代码。单击Window——>Show View——>Trace打开,该页面显示不支持调式终端(我用的是SC589和ICE1000仿真器),所以暂时不多研究了。